2010-12-10 5 views
2

Это сводит меня с ума. Кажется, это так просто, и я, вероятно, пропущу что-то очевидное - и сильно подозреваю, что это потому, что мои навыки PHP/mysql отсутствуют, но я не могу заставить его работать. Я смотрел в другом месте (и украл) несколько фрагментов кода из StackOverflow, пытающихся решить проблему, но я все еще не убежден, что у меня это работает.Array/Dict От Xcode до JSON до PHP до mySql

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

Код приведен ниже. Я могу создать json ok. Я могу подключиться нормально, я могу изменить переменные arent array variables &, которые не нужно отправлять через json, я могу сделать что угодно. Я не могу передать этот json и хранить его в mysql.

Да-им a noob.

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(); 


?> 

ответ

0

Чтобы ответить на ваш комментарий: //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(); 
+1

удивительным - спасибо за быстрый ответ - плохо попасть на него. –

1

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

<?php $handle = fopen('php://input','r'); 
       $jsonInput = fgets($handle); 
       // Decoding JSON into an Array 
       $decoded = json_decode($jsonInput,true); 
?>