php - 使用 NSData 将日期从 xCode 传递到 PHP
<p><p>我正在尝试将日期从 Xcode 传递到 PHP 页面(将日期存储到 mysql DB)但是 NSData 似乎不喜欢日期的格式。</p>
<pre><code>//Format date for mysql & PHP
NSDateFormatter *dateFormatter = [ init];
;
NSString *strToday = ];
NSString *strURL = ;
//strURL=;
NSLog(@"%@", strURL);
NSData *dataURL = ];
NSString *strResult = [ initWithData:dataURL encoding:NSUTF8StringEncoding];
NSLog(@"%@", strResult);
</code></pre>
<p>我已经通过手动输入数据测试了 PHP 页面,它可以正常工作。但是,当我运行上面的代码时它不起作用,我已将问题隔离到日期,并且我认为 NSData 在我的日期格式中的空间(日期和时间之间)存在问题。</p>
<p>我尝试使用 %20(URL 编码等)填补空白,并与数据库建立了连接,但日期字段的格式不正确,因此它在 mysql 数据库中显示为空。</p>
<p>我不想在我的 PHP 中开始解析字符串,有人知道如何解决这个问题吗?</p>
<p>下面是我的 PHP 代码:-</p>
<pre><code><?PHP
$hostname = "XXX";
$username = "XXX";
$password = "XXX";
$database = "XXX";
$db_handle = mysql_connect($hostname, $username, $password);
$db_found = mysql_select_db($database, $db_handle);
$uID = $_GET['uID'];
$item1 =$_GET['item1'];
$item2 =$_GET['item2'];
$startDate =$_GET['startDate'];
$endDate =$_GET['endDate'];
if ($db_found) {
$sql = "INSERT INTO Items (uID, item1, item2, startDate, endDate) VALUES('$uID','$item1','$item2','$startDate','$endDate');";
//$cleanSQL = str_replace("%20"," ",$sql);
$result = mysql_query($sql);
mysql_close($db_handle);
print "Records added to the database";
} else {
print "Database NOT Found ";
mysql_close($db_handle);
}
?>
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>此代码存在许多问题,但根据所提供的有限信息,无法诊断出您所描述的问题的确切原因。几点观察:</p>
<ol>
<li><p>您肯定需要对日期字符串进行百分比转义。 URL 中的空格是 Not Acceptable (标准 <code>x-www-form-urlencoded</code> 请求的正文也是如此)。</p></li>
<li><p>如果你要插入数据,你应该发出 <code>POST</code> 请求,而不是将这些东西添加到 URL,实际上是发出 <code>GET</code> 请求。</p ></li>
<li><p>您不应使用 <code>dataWithContentsOfURL</code> 发出请求。不仅是<code>GET</code>,而且是同步的,不报错。</p></li>
<li><p>如果你仍然有问题,你应该使用 <a href="http://charlesproxy.com" rel="noreferrer noopener nofollow">Charles</a> 或类似的工具来观察这个请求。观察您通过网络浏览器处理的相同请求并进行比较和对比。</p></li>
<li><p>就个人而言,当我遇到问题时,我会临时更改我的 PHP 代码以返回我传递给它的数据,这样我就可以确保一切都被正确接收。这是一种简单但有效的方式来确认所有内容都已正确接收。 </p></li>
<li><p>如果您将日期字符串传递给服务器,您通常应该使用 GMT 时区,以避免由于服务器不知道用户设备所在的时区而导致的问题。同样,您应该使用 <code>en_US_POSIX</code> 语言环境,以避免出现非公历的问题。请参阅 Apple <a href="https://developer.apple.com/library/ios/qa/qa1480/_index.html" rel="noreferrer noopener nofollow">Technical Q&A 1480</a>。</p></li>
</ol>
<p>综合起来,你最终会得到类似的东西:</p>
<pre><code>NSDateFormatter *dateFormatter = [ init];
;
];
]; // if you REALLY want to use local timezone, eliminate this line, but I'd really advise sticking with GMT when using formatters to create and parse date strings that you're sending to a remote server
NSString *strToday = ];
NSURL *url = ;
NSMutableURLRequest *request = ;
;
NSString *body = [ stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
];
;// not necessary, but good practice
NSURLSessionTask *task = [ dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// use the data/error/response objects here
if (data) {
NSString *responseString = [ initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"responseString = %@", responseString);
} else {
NSLog(@"error = %@", error);
NSLog(@"response = %@", response);
}
}];
;
// don't try to use the string here, because the above happens asynchronously
</code></pre>
<p>坦率地说,我不喜欢这种设置 <code>body</code> 的过于简单的机制(如果任何字段包含特殊字符,例如 <code>+</code> 或 <code>&</code>,以上行不通)。但是,如果参数与您在问题中概述的完全相同,那么这个简单的解决方案应该可以工作。但是,如果您想要在这方面更强大一些,请参阅 <a href="https://stackoverflow.com/a/22887238/1271826" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/22887238/1271826</a> 中显示的 <code>encodePostParameters</code> 方法。</p>
<p>顺便说一句,我建议考虑使用 <a href="https://github.com/AFNetworking/AFNetworking" rel="noreferrer noopener nofollow">AFNetworking</a> ,因为这样可以让您摆脱手动构建请求的麻烦。</p>
<p>但是,回到您最初的问题,如果没有看到服务器代码或您进行更多调试(Charles,确认正确接收到值等),我们无法为您提供进一步的建议。</p></p>
<p style="font-size: 20px;">关于php - 使用 NSData 将日期从 xCode 传递到 PHP,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/29780462/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/29780462/
</a>
</p>
页:
[1]