2012-04-02 5 views
1

J'ai une application Android qui envoie une chaîne JSON à mon serveur et il est formaté comme suit:Ayant du mal à l'analyse syntaxique JSON avec PHP

{"drink_name":"testing","phone_number":"5555555555"} 

Lorsque j'utilise la commande: SELECT * FROM commandes, il montre que les entrées vides ont été insérées dans la table.

Je pense que mon problème provient de mon script PHP (principalement parce que je suis nouveau sur PHP). Suis-je pars correctement le json? Voici le script que j'ai écrit.

<?php 
$handle = mysql_connect('localhost',USERNAME,PASSWORD); 
if($handle==false) 
{ 
die('No database connection'); 
} 

$db=mysql_select_db('r2bar2'); 


$json = file_get_contents('php://input'); 
$obj = json_decode($json); 


mysql_query("INSERT INTO orders (phone_number, drink_name) 
VALUES ('".$obj->{'phone_number'}."', '".$obj->{'drink_name'}."')"); 
mysql_close($handle); 
?> 

EDIT: Voici mon code Android si elle est une aide.

protected void sendJson(final String phnNmbr, final String drink) { 
    Thread t = new Thread(){ 
     public void run() { 
      Looper.prepare(); //For Preparing Message Pool for the child Thread 
      HttpClient client = new DefaultHttpClient(); 
      HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit 
      HttpResponse response; 
      JSONObject json = new JSONObject(); 
      try{ 
       HttpPost post = new HttpPost("http://kubie.dyndns-home.com/R2Bar2/sendOrder.php"); 
       json.put("phone_number", phnNmbr); 
       json.put("drink_name", drink); 
       StringEntity se = new StringEntity("orders: " + json.toString()); 
       se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
       post.setEntity(se); 
       response = client.execute(post); 
       /*Checking response */ 
       Toast.makeText(getApplicationContext(), json.toString(), Toast.LENGTH_LONG).show(); 
       if(response!=null){ 
        InputStream in = response.getEntity().getContent(); //Get the data in the entity 
       } 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
       //createDialog("Error", "Cannot Estabilish Connection"); 
      } 
      Looper.loop(); //Loop in the message queue 
     } 
    }; 
    t.start();  
} 
+0

Eh bien, qu'est-ce que 'var_dump ($ obj)' vous donne? – deceze

+0

De même, comment l'application Android envoie-t-elle les données? La requête est-elle un POST ou GET? –

+0

essayez d'activer le rapport d'erreurs/la consignation des erreurs et de vérifier à nouveau la sortie. –

Répondre

1

J'ai compris ce que je faisais mal. Il semble que je transmettais un type de données brutes. Afin d'analyser la chaîne, j'ai utilisé ce qui suit:

$obj = json_decode(file_get_contents("php://input")); 

mysql_query("INSERT INTO orders (phone_number, drink_name) 
VALUES ('".$obj->{'phone_number'}."', '".$obj->{'drink_name'}."')"); 

Merci à tous pour vos suggestions.

0

Vous avez établir une connexion à la DB follws, vous avez manqué la poignée de $ pour établir une connexion

$handle = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$handle) { 
    die('Not connected : ' . mysql_error()); 
} 

// make r2bar2 the current db 
$db=mysql_select_db('r2bar2',$handle); 
if (!$db) { 
    die ('Can\'t use r2bar2 : ' . mysql_error()); 
} 
+0

D'accord, j'ai essayé, mais le var_export montre toujours que je passe la valeur NULL à la base de données. – kubiej21

+0

vérifier ce code ci-dessus pour votre connexion à la base de données ....... si le succès, vous obtiendrez la sortie comme prévu .. –

1

j'avais utilisé la même méthode, sauf la façon dont vous essayez d'accéder données json sur le serveur.

J'avais utilisé le tableau $ _POST pour y accéder et cela a bien fonctionné pour moi. Essayez d'utiliser,

$json = $_POST['orders']; 
$obj = json_decode($json); 

Cela a fonctionné parfaitement bien pour moi. Tout le meilleur :) (Je ne pense pas qu'il y ait un problème avec $ handle puisque quelque chose est inséré dans la table)

+0

Merci pour la suggestion. Je suis d'accord avec vous que $ handle n'est pas le problème car dans un script différent, j'ai été capable d'analyser un tableau json dans une table en utilisant $ _POST. Je ne sais pas pourquoi cela ne fonctionne pas pour moi maintenant si ...:/ – kubiej21

+0

Vous voulez dire que même POST tableau ne fonctionne pas maintenant ...? – Kishan

Questions connexes