Я надеюсь, что кто-то может помочь мне поставить, потому что я пробовал весь день :( (новые вещи)
У меня есть база данных mySQL, которая содержит одну таблицу "products" (две строки: "id")и «сток»). И я хочу, чтобы мое приложение 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. Теперь у меня есть только одно эхо, отправка данных в формате JSON. Он отлично работает смоя база данных и мое приложение: я получаю всю таблицу ("id" и "stock") всех товаров.Спасибо.
Но я обнаружил еще одно препятствие (неудивительно): мне нужно изменить базу данных после того, как продукты были проданы, и, поскольку они обычно не продаются, 1 к 1 необходимо разместить массивы в PHP,, я намереваюсь отправить POST идентификатору и редуктору (редуктор представляет, сколько продуктов с этим «идентификатором» было продано) затронутых продуктов / элементов (array_id и array_reductor).1027 *
// с идентификатором продуктов;
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 (вероятно), но как я могу получить эти два массива и работать с ними????
Заранее спасибо
Я провожу много времени в стеке Overflow: ОЧЕНЬ ПОЛЕЗНО ПОЛУЧИТЬ !!!!!