gpt4 book ai didi

php - JSON 解析 : from PHP5 ( which attacks a database: mySQL ) ios5 iphone

转载 作者:行者123 更新时间:2023-11-28 23:09:26 25 4
gpt4 key购买 nike

我希望有人能帮我解决问题,因为我已经尝试了一整天了:( ( new stuff )

我有一个数据库 mySQL,其中包含一个表“products”(两行:“id”和“stock”)。我希望我的 ios5 应用程序发送一个“id”并接收该产品的“库存”。

在我的 PHP 代码中:

echo json_encode(array(
'id'=>$id,
'stock'=>$stock, ));

我认为它向我的应用程序发送了一个 JSON,我的应用程序在一个名为的函数中接收到这个 JSON:

- (void)requestFinished:(ASIHTTPRequest *)request
{
NSString *responseStringWEB = [request responseString];
NSLog(@"STRING:: %@ \n", responseStringWEB); //3
NSDictionary *responseDict = [responseStringWEB JSONValue];
NSLog(@"DICT: %@ \n", responseDict); //3
NSString *id_producto = [responseDict objectForKey:@"id"];
NSString *stock = [responseDict objectForKey:@"stock"];
NSLog(@"ID: %@\n", id_producto); //3
NSLog(@"stock: %@", stock); //3
}

并检查我得到的控制台:

**`STRING`::**
Connection establishedDatabase selected..
***{"id":"3","stock":"46"}***
Connection closedDesconectado
2011-12-26 18:58:57.170 CaeDeCajon[1998:16403] Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x984aeb0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
2011-12-26 18:58:57.171 CaeDeCajon[1998:16403] **`DICT`**: (null)
2011-12-26 18:58:57.171 CaeDeCajon[1998:16403] **`ID`**: (null)
2011-12-26 18:58:57.171 CaeDeCajon[1998:16403] **`stock`**: (null)

问题是:我不知道 JSON 的格式是什么(数组,我应该如何解析 NSstring responseStringWEB 以获得这两个值( ID 和 STOCK )。我似乎从数据库中收到了它们,但我没有伸手去提取它们。

帮助 :) 谢谢,

编辑::

谢谢。这真的很有帮助。

看来和我在PHP代码中使用的多重回显有关系。现在我只有一个echo,以json格式发送数据。它与我的数据库和我的应用程序完美配合:我收到了所有项目的整个表格(“id”和“stock”)。谢谢。

但我发现了另一个障碍(难怪),就是一旦产品售出我就需要更改数据库,而且由于它们通常不会 1 乘 1 地销售,所以必须将数组发布到 PHP 中,我的意图是发布受影响的产品/项目(array_id 和 array_reductor)的 id 和 reductor(reductor 代表售出多少个“id”的产品)。

IOS5 代码:

NSArray *array_id=[[NSArray alloc]initWithObjects:@"0",@"3",@"5", nil]; 

//带id的产品;

NSArray *array_reductor=[[NSArray alloc]initWithObjects:@"10",@"5",@"40", nil];

//与销售的产品数量(所以我必须将数据库中以前的库存数量减去这些以获得当前库存数量)。

NSURL *url=[[NSURL alloc]initWithString:@"http://www.haveyourapp.com/promos/"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:array_id forKey:@"id"];
[request setPostValue:array_reductor forKey:@"reductor"];

[request setDelegate:self];
[request startAsynchronous];

我的 PHP 文件:

if (isset($_POST['id'])&&isset($_POST['reductor']))//检查数据是否到来 {

$id = array();          // I create arrays
$reductor = array();

$id=$_POST['id']; // and store arrays in them ( At least is what I believe )
$reductor=$_POST['reductor'];

$connection = new createConnection(); //i created a new object
$connection->connectToDatabase(); // connected to the database
$connection->selectDatabase();

/////////////////////////////////////////////////////////////////////////////////////////////////////////////// Stock reduction in the items affected////////////////////////////////


$num=mysql_numrows($id);
$i=0;
$stock_anterior=array();
while ($i < $num) {

$query=" SELECT stock FROM productos WHERE id = $id[$i]";
$stock_anterior[$i] = mysql_query($query);
++$i;
}


$l=0;

$num2=mysql_numrows($id);

while ($l < $num2) {

$stock_reductor[$l] = $stock_anterior[$l] - $reductor[$l];

$query = "UPDATE productos SET stock = '$stock_reductor[$l]' WHERE id = $id[$l] ";
mysql_query($query);


++$l;

}



$connection->closeConnection();

但是我的代码不工作,我不知道问题是在我的应用程序中还是在 PHP 文件中(可能),但我如何接收这两个数组并使用它们????

提前致谢

我在堆栈溢出上花了很多时间:非常有用!!!!!

最佳答案

json_encode 仅适用于 UTF-8 编码的数据,因此当发现无效字符时,它会全部返回 NULL。

检查您的数据是否以 UTF-8 编码。

同时检查您的文件是否使用 UTF-8。

json_encode 的替代方案:

// función interna: comprueba si un array es puro o no
// es puro si sus índices son: 0, 1, 2, ..., N
function aputio($a) {
$i=0;
foreach ($a as $n=>$v) {
if (strcmp($n,$i)) return(true);
$i++;
}
return(false);
}

// cambiar quotes, \n y \r para devolver cadenas válidas JSON
function qcl2json($qcl) {
return str_replace('"','\"',str_replace("\n",'\n',str_replace("\r",'\r',$qcl)));
}

// devolver variable en formato json
function ajson($av,$level=0,$utf8=false) {
if (($av===null) && !$level) return("null");
if (!is_array($av)) return (gettype($av)=="integer"?$av:'"'.($utf8?utf8_encode($av):$av).'"');
$isobj=aputio($av);
$i=0;
if (!$level) $e=($isobj?"{":"["); else $e="";
foreach ($av as $n=>$v) {
if ($i) $e.=",";
if ($isobj) $e.=(is_numeric($n) && !is_string($n)?$n:"\"".qcl2json($utf8?utf8_encode($n):$n)."\"").":";
if (!is_array($v)) {
if (is_bool($v)) $e.=($v?"true":"false");
else if ($v==NULL) $e.='""';
else if (is_int($v)||is_double($v)) $e.=$v;
else $e.='"'.qcl2json($utf8?utf8_encode($v):$v).'"';
} else {
$e.=(count($v)
?(aputio($v)
?"{".ajson($v,$level+1)."}"
:"[".ajson($v,$level+1)."]")
:"{}");
}
$i++;
}
if (!$level) $e.=($isobj?"}":"]");
return($e);
}

如果可以使用 UTF-8,请避免使用此函数。

关于php - JSON 解析 : from PHP5 ( which attacks a database: mySQL ) ios5 iphone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com