Autore Topic: Invio dati tramite JSON in un db, problema PHP  (Letto 720 volte)

Offline jonsnow81

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Invio dati tramite JSON in un db, problema PHP
« il: 05 Luglio 2013, 12:07:57 CEST »
0
Ciao a tutti, sto provando a inviare dei dati in un db in localhost, sono dei test preliminari per inviare poi una mole di dati maggiore in un server remoto, ho preso spunto da un post di questa sezione (Invio dati JSON da app Android al server per INSERT nel db remoto - Android Developers Italia) ma ho comunque un problema in php....

Il punto è che il database in localhost viene popolato ma da stringhe vuote, come se i parametri non fossero presi ma il json è scritto correttamente....

Posto il codice php che è praticamente lo stesso della sezione citata sopra

Codice: [Seleziona]
<?php

$json_a = var_dump(json_decode(($_POST['pippo']),true));

echo($json_a);

$mail = $json_a['email'];
$pass = $json_a[1];
$utente = $decoded['nome_utente'];
$reale = $decoded['nome_reale'];



$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test',$conn);
if (!$conn) {
    die('Could not connect: ' . mysql_error());
}
$risultato = @mysql_query("INSERT INTO test(nick, pass, nome, mail) VALUES ('$utente', '$pass','$reale','$mail')") or die('Errore: ' .mysql_error());

?>

Usando lo stesso codice della sezione riportata prima non funziona, anzi mi da errore sull'echo dicendo "<b>Catchable fatal error</b>:  Object of class stdClass could not be converted to string json", allora girando un po' per la rete ho visto che era il caso di trasformare l'oggetto in un array, ma in ogni caso facendo una prova come si vede da codice cambiando l'associazione del parametro mail o pass non mi stampa comunque nulla nel db, solo campi vuoti....

Il problema mio è che sono abbastanza scarso in php e quindi sono sicuro che non manipolo bene il dato in php, qualche anima pia potrebbe aiutarmi a capire dove sbaglio?
 :-(



Post unito: 05 Luglio 2013, 16:09:17 CEST
Non sono nemmeno più sicuro che arrivi il file json al file php a questo punto, perchè scrivendo un file php di pure test come il seguente:
Codice: [Seleziona]
$obj = '{"email":"test1","password":"test2","nome_utente":"test3","nome_reale":"test4"}';
$json_a = var_dump(json_decode($obj));

//echo($json_a);



$obj5 = json_decode($obj);
$mail= $obj5->{'email'};
$pass= $obj5->{'password'};
$utente= $obj5->{'nome_utente'};
$reale= $obj5->{'nome_reale'};

//echo($mail);
echo($obj5->{'password'});
echo($obj5->{'nome_utente'});
echo($obj5->{'nome_reale'});

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test',$conn);
if (!$conn) {
    die('Could not connect: ' . mysql_error());
}
$risultato = @mysql_query("INSERT INTO test(nick, pass, nome, mail) VALUES ('$utente', '$pass','$reale','$mail')") or die('Errore: ' .mysql_error());

?>

il db viene popolato,
ma utilizzando questo script che dovrebbe prendere i dati dalle classi java non succede nulla, mi stampa sempre le stringhe vuote....
Posto qui il file php modificato che dovrebbe prendere dati in input ma a quanto pare non lo fa....
Codice: [Seleziona]
<?php

$json_a = var_dump(json_decode(($_POST['pippo']),true));


echo($json_a);


$mail= $json_a->{'email'};
$pass = $json_a->{'password'};
$utente = $json_a->{'nome_utente'};
$reale = $json_a->{'nome_reale'};

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test',$conn);
if (!$conn) {
    die('Could not connect: ' . mysql_error());
}
$risultato = @mysql_query("INSERT INTO test(nick, pass, nome, mail) VALUES ('$utente', '$pass','$reale','$mail')") or die('Errore: ' .mysql_error());

?>

Per quanto riguarda le classi java che fanno il lavoro sono praticamente le stesse dell'esempio che ho preso come spunto ma posto comunque il codice in caso qualcuno volesse provarlo
Codice (Java): [Seleziona]
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.app.Activity;
import android.widget.Toast;

public class SendDataToServer extends Activity {

         String temp;
     String jsonText;
     public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
           
             JSONObject j = new JSONObject();
           
             try {
                     j.put("nome_utente", "test");
                     j.put("password", "test");
                     j.put("nome_reale", "test");
                     j.put("email", "test@test.it");
                                                                                   
             }catch(JSONException e){
                     e.printStackTrace();
             }
             try {
                     String url = "http://10.0.2.2/test3.php";
                     Map<String, String> kvPairs = new HashMap<String, String>();
                     kvPairs.put("pippo", j.toString());
                     HttpResponse re = HTTPPoster.doPost(url, kvPairs);
                     temp = EntityUtils.toString(re.getEntity());
             } catch(ClientProtocolException e){
                     e.printStackTrace();
             }
             catch(IOException e){
                     e.printStackTrace();
             }      

             if (temp.compareTo("SUCCESS")== 0) {
                     Toast.makeText(SendDataToServer.this, "Sending complete!", Toast.LENGTH_LONG).show();
             }else{
                     Toast.makeText(SendDataToServer.this, "Sending incomplete!", Toast.LENGTH_LONG).show();
             }
           
     }

}

Codice (Java): [Seleziona]
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class HTTPPoster {
        public static HttpResponse doPost(String url, Map<String, String> kvPairs)throws ClientProtocolException, IOException {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);
                if (kvPairs != null && kvPairs.isEmpty() == false) {
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size());
                        String k, v;
                        Iterator<String> itKeys = kvPairs.keySet().iterator();
                        while (itKeys.hasNext()) {
                                k = itKeys.next();
                                v = kvPairs.get(k);
                                nameValuePairs.add(new BasicNameValuePair(k, v));
                        }
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                }
                HttpResponse response;
                response = httpclient.execute(httppost);
                return response;
        }
}

Non so più davvero che pesci prendere.......  :-\
« Ultima modifica: 05 Luglio 2013, 16:09:22 CEST da jonsnow81, Reason: Merged DoublePost »