从 iOS 获取我的 JSON 以发布到我的 php 文件并插入到 mySQL 时遇到问题

Posted

技术标签:

【中文标题】从 iOS 获取我的 JSON 以发布到我的 php 文件并插入到 mySQL 时遇到问题【英文标题】:Having problems getting my JSON from iOS to post to my php file & insert into mySQL 【发布时间】:2015-05-29 15:58:43 【问题描述】:

我查看了许多线程,但无法让我的代码工作,我有一个 php 文件,我已成功使用该文件从 android 设备接收 JSON 并将我的值插入 mysql

 <?php
include_once './db_functions.php';
//Create Object for DB_Functions clas
$db = new DB_Functions(); 
//Get JSON posted by Android Application
$json = $_POST["usersJSON"];
//Remove Slashes
if (get_magic_quotes_gpc())
$json = stripslashes($json);

//Decode JSON into an Array
$data = json_decode($json);
//Util arrays to create response JSON
$a=array();
$b=array();


//Loop through an Array and insert data read from JSON into MySQL DB
for($i=0; $i<count($data) ; $i++)

//Store User into MySQL DB
$res = $db->storeChecklist($data[$i]->CustomerName, $data[$i]->Address, $data[$i]->Date,$data[$i]->Device,$data[$i]->Operator,$data[$i]->Installer,$data[$i]->Complete,$data[$i]->Check1,$data[$i]->Check2,$data[$i]->Check3,$data[$i]->Check4,$data[$i]->COLUMN_Check5,$data[$i]->Check6,$data[$i]->Check7,$data[$i]->Check8,$data[$i]->Check9,$data[$i]->Check10,$data[$i]->Check11,$data[$i]->Check12,$data[$i]->Check13,$data[$i]->lite_id,$data[$i]->User,$data[$i]->SyncID,$data[$i]->Photo1,$data[$i]->Photo2,$data[$i]->Photo3,$data[$i]->Photo4,$data[$i]->Photo1b,$data[$i]->Photo2b,$data[$i]->Photo3b,$data[$i]->Photo4b,$data[$i]->Completed_by);
    //Based on inserttion, create JSON response
if($res)
    //$b["id"] = $data[$i]->COLUMN_ID;
        $b["status"] = 'yes';
        array_push($a,$b);
    else
    //  $b["id"] = $data[$i]->COLUMN_ID;
        $b["status"] = 'no';
        array_push($a,$b);
    




//Post JSON response back to Android Application
echo json_encode($a);


?>

我在 ios 中尝试的代码如下:

NSDictionary *dict = @@"CustomerName" : self.txtCustomername.text,
                       @"Address" : self.txtLocation.text, @"Date" : self.txtDate.text, @"Device" : self.txtDevice.text, @"Operator" : self.txtOperator.text, @"Installer" : self.txtInstaller.text, @"Complete" : self.txtDateComplete.text, @"Check1" : self.txtCheck1.text, @"Check2" : self.txtCheck2.text, @"Check3" : self.txtCheck3.text, @"Check4" : self.txtCheck4.text, @"Check5" : self.txtCheck5.text, @"Check6" : self.txtCheck6.text, @"Check7" : self.txtCheck7.text, @"Check8" : self.txtCheck8.text, @"Check9" : self.txtCheck9.text, @"Check10" : self.txtCheck10.text, @"Check11" : self.txtCheck11.text, @"Check12" : self.txtCheck12.text, @"Check13" : self.txtCheck13.text, @"lite_id" : self.txtUniqueID.text, @"User" : self.txtUser.text, @"SyncID" : self.txtSyncID.text, @"Photo1" : self.txtPhoto1.text, @"Photo2" : self.txtPhoto2.text, @"Photo3" : self.txtPhoto3.text, @"Photo4" : self.txtPhoto4.text, @"Photo1b" : @"blank", @"Photo2b" : @"blank", @"Photo3b" : @"blank", @"Photo4b" : @"blank" ,@"Completed_by" : self.txtEmployee.text
                       // ,@"Array" : arrayOfObjects
                       ;

NSError *error = nil;
NSData *json;

// Dictionary convertable to JSON ?
if ([NSJSONSerialization isValidJSONObject:dict])

    // Serialize the dictionary
    json = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];

    // If no errors, let's view the JSON
    if (json != nil && error == nil)
    

        NSString *jsonString = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];

        NSString *queryString = [NSString stringWithFormat:@"http://myurlhere.com/insertchecklist.php=%@", jsonString];
        NSMutableURLRequest *theRequest=[NSMutableURLRequest
                                         requestWithURL:[NSURL URLWithString:
                                                         queryString]
                                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                                         timeoutInterval:60.0];
        [theRequest setHTTPMethod:@"POST"];
        NSString *post = [NSString stringWithFormat:@"usersJSON=%@", jsonString];
        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
        [theRequest setHTTPBody:postData];
        NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
        if (con) 
         //   _receivedData=[NSMutableData data];
            NSLog(@"It connected");
         else 
            //something bad happened
            NSLog(@"Something Bad Happend");
        


        NSLog(@"usersJSON: %@", jsonString);
        //   [jsonString release];
    

任何帮助将不胜感激。我已经成功地能够从 php 中获取数据并将其保存到我的 iOS sqlite 中,但是我无法以其他方式进行,

【问题讨论】:

你从 iOS 代码中得到的错误是什么? iOS没有错误 【参考方案1】:

JSON 应以 UTF-8、UTF-16 或 UTF-32 编码。

所以使用NSUTF8StringEncoding 而不是NSASCIIStringEncoding

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];

将 Content-Type 设置为 application/json 也没有什么坏处。

[theRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

【讨论】:

嗯,你的 NSLog 行的输出是什么?

以上是关于从 iOS 获取我的 JSON 以发布到我的 php 文件并插入到 mySQL 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 文件创建联系人表

iOS 编程,获取 JSON 数据

我可以在属性中指定路径以将我的类中的属性映射到我的 JSON 中的子属性吗?

如何在 iOS 中获取 JSON 响应?获得零值?

iOS 9.1 导致我的 JSON NSURL 连接到 PHP 页面时出错

如何使用节点 js 将我的 json 发送到我的视图