从 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 中的子属性吗?