Autore Topic: Inserimento record in mysql con JSON e php  (Letto 1576 volte)

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Inserimento record in mysql con JSON e php
« il: 17 Maggio 2012, 15:32:22 CEST »
0
Buongiorno a tutti,

Tempo fa ho chiesto aiuto in questo forum per un consiglio su come sincronizzare i dati tra server e database locale.

Sono riuscito a implementare il download dei dati ma ho qualche problema con l'inserimento di nuovi record in mysql (remoto).

Grazie a tutti.


gironzolando per la rete ho trovato vari spunti e tutorial per implementare l'inserimento e ho deciso di applicare questo tipo:


Codice (Java): [Seleziona]
JSONParser jsonParser = new JSONParser();

        // url to create new product
        private static String url_create_product = "sito/insertsql.php";

        // JSON Node names
        private static final String TAG_SUCCESS = "success";

        public void input(){
               
        // Building Parameters
        List<NameValuePair> params1 = new ArrayList<NameValuePair>();
 
        params1.add(new BasicNameValuePair("id","1111"));
        params1.add(new BasicNameValuePair("nome", "ddd")); // per la chiave name,l'informazine sul nome
        params1.add(new BasicNameValuePair("cognome", "sss"));// per la chiave surnaname, l'informazione sul cognome
        params1.add(new BasicNameValuePair("anni", "99"));
        params1.add(new BasicNameValuePair("resp", "dshhdf"));
        params1.add(new BasicNameValuePair("agg", "204412052012"));
        params1.add(new BasicNameValuePair("temp1", "p"));
        params1.add(new BasicNameValuePair("temp2", "p"));
        params1.add(new BasicNameValuePair("temp3", "p"));
       
       
        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_create_product,
                "POST", params1);
       
       
        // check log cat for response
        //Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // successfully created product
                Toast.makeText(getApplicationContext(), "OK Test",Toast.LENGTH_SHORT).show();
                // closing this screen
                finish();
            } else {
                // failed to create product
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
                return paramString;

        }


la classe JSONParser è questa:

Codice (Java): [Seleziona]
package ShuffleSoft.pubarena.sepsi;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.util.Log;
 
public class JSONParser {
 
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
 
    // constructor
    public JSONParser() {
 
    }
 
    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {
 
        // Making HTTP request
        try {
 
            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));
 
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
 
            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
 
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
                Log.e("Create Response", is.toString());
            }            
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
 
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
 
        // return JSON String
        return jObj;
 
    }
}

mentre il file php a cui mi faccio riferimento è:

Codice (XML): [Seleziona]
<?php
/*
* Following code will create a new product row
* All product details are read from HTTP Post Request
*/
 
// array for JSON response
$response = array();
 
// check for required fields
if (isset($_POST['id']) && isset($_POST['nome']) && isset($_POST['cognome']) && isset($_POST['anni']) && isset($_POST['resp']) && isset($_POST['agg'])&& isset($_POST['temp1']) && isset($_POST['temp2']) && isset($_POST['temp3'])) {
 
        $id = $_POST['id'];
   $nome = $_POST['nome'];
   $cognome = $_POST['cognome'];
   $anni = $_POST['anni'];
        $resp = $_POST['resp'];
        $agg = $_POST['agg'];
        $t1 = $_POST['temp1'];
        $t2 = $_POST['temp2'];
        $t3 = $_POST['temp3'];
 
 
   // include db connect class
   require_once __DIR__ . '/db_connect.php';
 
   // connecting to db
   $db = new DB_CONNECT();
 
   // mysql inserting a new row
   $result = mysql_query("INSERT INTO sepsi(id,nome,cognome,anni,resp,agg) VALUES('$id' , '$nome', '$cognome', '$anni', '$resp', '$agg', '$t1','$t2','$t3')");
 
   // check if row inserted or not
   if ($result) {
       // successfully inserted into database
       $response["success"] = 1;
       $response["message"] = "Product successfully created.";
 
       // echoing JSON response
       echo json_encode($response);
   } else {
       // failed to insert row
       $response["success"] = 0;
       $response["message"] = "Oops! An error occurred.";
 
       // echoing JSON response
       echo json_encode($response);
   }
} else {
   // required field is missing
   $response["success"] = 0;
   $response["message"] = "Required field(s) is missing";
        $response["campi"] = $_POST['id'];
        $response["campi1"] =   $_POST['nome'];
        $response["campi2"] =$_POST['cognome'];
        $response["campi3"] =$_POST['anni'];
        $response["campi4"] =$_POST['resp'];
        $response["campi5"] =$_POST['agg'];
        $response["campi6"] =$_POST['temp1'];
        $response["campi7"] =$_POST['temp2'];
        $response["campi8"] =$_POST['temp3'];
   // echoing JSON response
   echo json_encode($response);
}
?>

purtroppo il logcat non è molto chiaro, nel senso che mi restituisce solo l'errore da php che mi riferisce che i campi che ho inviato sono tutti vuoti

Dove potrei aver sbagliato? devo forse inserirlo in un Task async?

Grazie a tutti

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Inserimento record in mysql con JSON e php
« Risposta #1 il: 17 Maggio 2012, 16:50:47 CEST »
0
Non sto capendo se i dati glieli stai inviando come un semplice post oppure se devi inviare un json. Se è il secondo caso non credo che nel php tu li possa controllare in quel modo

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Inserimento record in mysql con JSON e php
« Risposta #2 il: 17 Maggio 2012, 18:41:36 CEST »
0
Grazie per la risposta.

cmq io ho cercato di seguire questo tutorial dove sembra andare tutto....
How to connect Android with PHP, MySQL

ora ho provato a risistemare tutto il codice ed effettivamente ora va...

ma con un problema...
non mi effettua l'inserimento se uso le variabili inviate.

mi spiego meglio, se io faccio partire la sincronizzazione invia tutto al file php, con echo verifico che le variabili contengono il valore giusto inviato ma così l'inserimento fallisce.

se invece modifico il file php e invece che le variabili ci metto dei valori fittizi, allora l'inserimento ha successo.

hai qualche idea? il file php è rimasto invariato (a parte qualche echo in più per controllare l'avanzamento)

grazie

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Inserimento record in mysql con JSON e php
« Risposta #3 il: 17 Maggio 2012, 18:43:34 CEST »
0
Se con gli echo visualizzi tutti i valori correttamente lato app non c'è niente da correggere. Dovresti farti stampare la query che lanci e vedere perchè va in errore

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Inserimento record in mysql con JSON e php
« Risposta #4 il: 17 Maggio 2012, 19:00:36 CEST »
0
effettivamente hai ragione, sono andato in tilt e mi facevo fregare dai warning in logcat.

ok ora funziona perfettamente, non metto ancora il topic su risolto perchè devo modificarlo un pò per adattarlo a tutto il database locale :)

Grazie mille