菜鸟教程小白 发表于 2022-12-13 06:31:44

php - 使用 NSData 将日期从 xCode 传递到 PHP


                                            <p><p>我正在尝试将日期从 Xcode 传递到 PHP 页面(将日期存储到 mysql DB)但是 NSData 似乎不喜欢日期的格式。</p>

<pre><code>//Format date for mysql &amp; PHP
NSDateFormatter *dateFormatter = [ init];
;
NSString *strToday = ];

NSString *strURL = ;

//strURL=;

NSLog(@&#34;%@&#34;, strURL);

NSData *dataURL = ];

NSString *strResult = [ initWithData:dataURL encoding:NSUTF8StringEncoding];
NSLog(@&#34;%@&#34;, strResult);
</code></pre>

<p>我已经通过手动输入数据测试了 PHP 页面,它可以正常工作。但是,当我运行上面的代码时它不起作用,我已将问题隔离到日期,并且我认为 NSData 在我的日期格式中的空间(日期和时间之间)存在问题。</p>

<p>我尝试使用 %20(URL 编码等)填补空白,并与数据库建立了连接,但日期字段的格式不正确,因此它在 mysql 数据库中显示为空。</p>

<p>我不想在我的 PHP 中开始解析字符串,有人知道如何解决这个问题吗?</p>

<p>下面是我的 PHP 代码:-</p>

<pre><code>&lt;?PHP

$hostname = &#34;XXX&#34;;
$username = &#34;XXX&#34;;
$password = &#34;XXX&#34;;
$database = &#34;XXX&#34;;

$db_handle = mysql_connect($hostname, $username, $password);
$db_found = mysql_select_db($database, $db_handle);


$uID = $_GET[&#39;uID&#39;];
$item1 =$_GET[&#39;item1&#39;];
$item2 =$_GET[&#39;item2&#39;];
$startDate =$_GET[&#39;startDate&#39;];
$endDate =$_GET[&#39;endDate&#39;];

if ($db_found) {

    $sql = &#34;INSERT INTO Items (uID, item1, item2, startDate, endDate) VALUES(&#39;$uID&#39;,&#39;$item1&#39;,&#39;$item2&#39;,&#39;$startDate&#39;,&#39;$endDate&#39;);&#34;;

    //$cleanSQL = str_replace(&#34;%20&#34;,&#34; &#34;,$sql);
    $result = mysql_query($sql);

    mysql_close($db_handle);

    print &#34;Records added to the database&#34;;

} else {

    print &#34;Database NOT Found &#34;;
    mysql_close($db_handle);
}

?&gt;
</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&amp;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&#39;d really advise sticking with GMT when using formatters to create and parse date strings that you&#39;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(@&#34;responseString = %@&#34;, responseString);
    } else {
      NSLog(@&#34;error = %@&#34;, error);
      NSLog(@&#34;response = %@&#34;, response);
    }
}];
;

// don&#39;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]
查看完整版本: php - 使用 NSData 将日期从 xCode 传递到 PHP