POST NSArray NSDictionaries для php

Я пытаюсь отправить NSArray из NSDictionaries из моего приложения ios в мой php webservice и у меня возникают проблемы с получением определенного строкового поля.

Я формирую параметры POST следующим образом:

NSDictionary *orderInformation = [NSDictionary dictionaryWithObjectsAndKeys:self.orderItems,@"ORDER_ITEMS",storeId,@"STORE_ID",userId,@"USERID",nil];

"storeId" и "userId" - это строки, и у меня нет проблем с получением их в php, но "self.orderItems" - это NSMutableArray из NSDictionaries, где я сталкиваюсь с проблемой.

NSDictionaries в self.orderItems имеют следующие ключи: "ITEM_ID" и "ITEM_PRICE".

Это мой код для отправки моей "orderInformation" на php:

NSString *webService = @"http://localhost/~testuser/Developer/ReceiveOrder.php?rquest=placeOrder";
NSURL *url = [NSURL URLWithString:webService];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url];
NSURLRequest *placeOrderRequest = [client requestWithMethod:@"POST" path:webService parameters:orderInformation];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:placeOrderRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){
    [self orderPlaced:JSON];

}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
    NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
}];
[operation start];

Метод в моем php, который получает этот запрос, как показано ниже:

//Place Order
public function placeOrder(){
$userId = $_POST['USERID'];
$storeId = $_POST['STORE_ID'];
$orderItems = array();
$itemInfo = array();
$orderItems = $_POST['ORDER_ITEMS'];//This is where I receive my NSArray of NSDictionaries

Я попробовал оба этих подхода, чтобы перебрать $ orderItems, но оба не получают правильные результаты. По какой-то причине ITEM_ID выходит как ноль, но ITEM_PRICE выбирает правильное значение.

подход 1:

    for ($i=0; $i<count($orderItems); $i++)
       {
         $itemInfo = $orderItems[$i]; //receiving correct value
         $itemId = $itemInfo['ITEM_ID']; //receiving correct value
         $itemPrice = $itemInfo['ITEM_PRICE']; //receiving correct value
         $orderStatus['ITEM_ID'] = $itemId ; //comes out as null
         $orderStatus['ITEM_PRICE'] = $itemPrice; //receiving correct value
       }

подход 2:

    foreach ($orderItems as $itemInfo){
         $itemId = $itemInfo['ITEM_ID']; //receiving correct value
         $itemPrice = $itemInfo['ITEM_PRICE']; //receiving correct value
         $orderStatus['ITEM_ID'] = $itemId ; //comes out as null
         $orderStatus['ITEM_PRICE'] = $itemPrice; //receiving correct value
    }

Я возвращаю $orderStatus обратно в ios в NSLog, чтобы убедиться, что $itemId и $itemPrice получены правильно:

    $orderStatusJson = json_encode($orderStatus);
    header('Content-Type: application/json');
    echo $orderStatusJson;

Но в обоих подходах $itemId отображается как "ноль", а $itemPrice показывает правильное значение. Я точно знаю, что идентификатор элемента - это параметры, которые я отправляю, потому что я регистрирую их в ios перед отправкой в ​​php, и в этот момент они отображаются правильно.

Не могли бы вы, пожалуйста, сообщить мне, если я что-то упускаю / неправильно делаю что-то при получении / переборе NSArray NSDictionaries в php?, Я схожу с ума от вещи с утра. Я знаю, что это должно быть что-то маленькое / или я, должно быть, упускаю что-то очень простое, но я не могу понять это. Ваш ответ очень ценится.

РЕДАКТИРОВАТЬ:

Вывод JSON, полученный от php NSLogged в ios:

JSON - {
"ITEM_ID" = "<null>";
"ITEM_PRICE" = "3.99";
}

Спасибо, Майк!

2 ответа

Ваш item_id выводит "null", поэтому php читает его как "null". Возможно, вам следует проверить свой NSDictionary, чтобы понять, почему он выводит нулевой элемент.

Вы отправляете как JSON, но не получаете как JSON. В вашем PHP вы должны будете сделать:

$jsonString = file_get_contents('php://input');
if ($jsonString != "") {
  error_log("[".$jsonString ."]");
  $jsonArray = json_decode($jsonString, true);
  error_log(print_r($jsonArray,true));
}

Чтобы отправить PHP так, как вы ожидали, вам нужно будет передать kvp в теле сообщения, например, где значение - это URL-кодированные данные:

key1=value1&key2=value2&key3=value3
Другие вопросы по тегам