2010-12-10 5 views
2

Cela me rend fou. Cela semble si simple, et il me manque probablement quelque chose d'évident - et je pense fortement que c'est parce que mes compétences PHP/mysql font défaut, mais je n'arrive pas à le faire fonctionner. J'ai cherché ailleurs (et volé) un certain nombre d'extraits de code de StackOverflow en essayant de résoudre le problème, mais je ne suis toujours pas convaincu que je l'ai fait fonctionner. De Xcode J'essaye de coder un objet NSDictionary dans JSON (en utilisant le framework JSON) pour pouvoir stocker dynamiquement le tableau dans mysql (idéalement comme un seul objet aplati - je sais, je le sais) en utilisant la méthode PHP POST .Array/Dict De Xcode à JSON à PHP à mySql

Le code est ci-dessous. Je peux créer le json ok. Je peux me connecter ok, je peux changer les variables qui ne sont pas des variables de tableau & qui n'ont pas besoin d'être envoyé via json, je peux faire à peu près tout. Je ne peux pas sembler passer ce json et le stocker dans mysql.

Oui- im a noob.

Thx ...

J'ai jusqu'ici:

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


?> 

Répondre

0

Pour répondre à votre commentaire: //do i even need to decode if i want to store a flattened json object in mysql?

Non, vous ne devriez pas json_decode() les données; au lieu de sauvegarder le $rawJsonData à MySQL. Vous devriez cependant y échapper en utilisant mysql_real_escape_string(). Voici un exemple:

$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

génial - merci pour une réponse rapide - mal obtenir sur elle. –

1

Si votre envoyez votre JSON dans la méthode POST, il peut être reçu en PHP avec le code ci-dessous

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