Array / Dict из Xcode в JSON для PHP в mySql - PullRequest
2 голосов
/ 10 декабря 2010

Это сводит меня с ума.Это кажется таким простым, и я, вероятно, упускаю что-то очевидное - и сильно подозреваю, что это потому, что мои навыки PHP / mysql отсутствуют, но я не могу заставить его работать.В другом месте я искал (и украл) несколько фрагментов кода из StackOverflow, пытаясь решить эту проблему, но я все еще не уверен, что он работает.

Из Xcode, который я пытаюсь кодироватьNSDictionary объект в JSON (с использованием JSON Framework), чтобы я мог динамически хранить массив в MySQL (в идеале, как один плоский объект - я знаю, я знаю), используя метод PHP POST.

Код ниже.Я могу создать JSON хорошо.Я могу подключиться нормально, я могу изменить переменные, которые не являются переменными массива и которые не нужно отправлять через json, я могу сделать что угодно.Я не могу передать этот JSON и сохранить его в MySQL.

Да, я нуб.

Thx ...

Я получил это далеко:

в xcode

NSDictionary *loginDict = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"aname", @"username",
                                @"hello", @"password", 
                                nil];   


    NSString *jsonString = [loginDict JSONRepresentation];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    NSString *post = [NSString stringWithFormat:@"json=%@", jsonString];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];

    [request setURL:[NSURL URLWithString:@"http://domain.com/post_dict.php"]];
    [request setHTTPMethod:@"POST"];

    [request setHTTPBody:postData];

    [[NSURLConnection alloc] initWithRequest:request delegate:self];

вpost_dict.php

<?php

$rawJsonData = $_POST['json'];
$decodedData = json_decode($rawJsonData); //do i even need to decode if i want to store a flattened json object in mysql?


//Connect To Database
$hostname='**BLACKEDOUT**.com';
$username='**BLACKEDOUT**';
$password='**BLACKEDOUT**';
$dbname='**BLACKEDOUT**';
$usertable='users';
//I want to update the Records field with the array
$recordsfield = 'Records';


mysql_connect($hostname,$username, $password) OR DIE ('Unable to connect to database! Please try again later.');
mysql_select_db($dbname);


$query = "UPDATE $usertable SET $recordsfield = '$decodedData' ";//do i encode? serialize? dunno

$result = mysql_query($query);


  if(!$result)
    {
      mysql_close();
      echo mysql_error();
      return;
    }

  mysql_close();


?>

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Если вы отправляете ваш JSON методом POST, его можно получить в PHP с кодом ниже

<?php $handle = fopen('php://input','r');
                $jsonInput = fgets($handle);
                // Decoding JSON into an Array
                $decoded = json_decode($jsonInput,true);
?>
0 голосов
/ 10 декабря 2010

Чтобы ответить на ваш комментарий: //do i even need to decode if i want to store a flattened json object in mysql?

Нет, вы не должны json_decode() данные; вместо этого сохраните $rawJsonData в MySQL. Однако вы должны избежать его, используя mysql_real_escape_string(). Вот пример:

$rawJsonData = $_POST['json']; //i don't to decode if i want to store a flattened json object in mysql.

//Connect To Database $hostname='BLACKEDOUT.com'; $username='BLACKEDOUT'; $password='BLACKEDOUT'; $dbname='BLACKEDOUT'; $usertable='users'; //I want to update the Records field with the array $recordsfield = 'Records';

mysql_connect($hostname,$username, $password) OR DIE ('Unable to connect to database! Please try again later.'); mysql_select_db($dbname);

//Escape the JSON data for MySQL
$mysqlEncodedJsonData = mysql_real_escape_string($rawJsonData);

$query = "UPDATE $usertable SET $recordsfield = '$mysqlEncodedJsonData' ";//inserted variable should be mysql_real_escape_string()'d as it is above

$result = mysql_query($query);

if(!$result) { mysql_close(); echo mysql_error(); return; }

mysql_close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...