Json übergeben an PHP und enpacken

Anojo

Mitglied
Hi an alle:(

hab über Android ein JsonObject erstellt das ich an PHP übergeben will und anschließend will ich wieder was zurück geben.

Das Json mach ich so...



Code:
private JSONObject postList = new JSONObject();

if(fertig || notFertig == 30){

	ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
		nameValuePairs.add(new BasicNameValuePair("postList", postList.toString()));


		try {
			Log.d(TAG, "Verbindung zur Datenbank wird hergestellt!");
			
			HttpClient httpclient = new DefaultHttpClient();
			HttpPost httppost = new HttpPost("https://localhost/test.php");
			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
			httppost.setHeader("Accept", "application/json");
			httppost.setHeader("Content-type", "application/json");
			HttpResponse response = httpclient.execute(httppost);
			HttpEntity entity = response.getEntity();
			is = entity.getContent(); 
		} catch (Exception e) {...
...
...
...
	} else {
			try {
				postList.put(""+ notFertig, id);
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			notFertig++;
			
		}

Ich vermute den Fehler aber eher hier...

PHP:
...
....

$list = $_REQUEST['postlist'];
$list = json_decode(utf8_encode($list));
$in = "";

for($i = 0; $i <= 30; $i++){

if($list[$i] != ""){
	if($in !=""){
		$in += ', ';
	}
}

$in += $list[$i];
}

$q=mysql_query( "SELECT * FROM daten WHERE `id` IN ($in)");
...
...

postList = {"19":74,"17":71,"18":73,"15":67,"16":68,"13":65,"14":66,"11":63,"12":64,"21":76,"20":75,"22":78,"23":79,"24":84,"25":103,"26":112,"27":113,"28":114,"29":118,"3":54,"2":53,"10":62,"1":34,"0":32,"7":58,"6":57,"5":56,"4":55,"9":60,"8":59}


Zurück bekomme ich ein false statt der erhofften Daten aus der Datenbank.
Was mach ich falsch? :confused: :confused:

Gruß Toni
 
Zuletzt bearbeitet:
hi,

also erstmal lass dir den mal Inhalt von $list nach dem decode ausgeben mit var_dump. dann siehst du ob es ein array ist und alles richtig ist, oder ob es schon vorher Probleme gibt.

dann lass dir den SQL Befehl ausgeben und teste ihn manuell.

wenn du dann Hilfe brauchst posze die beiden Ausgaben.

Gruß
htc
 
Das wirft einen Fehler. json_decode gibt ein Objekt zurück, kein Array. Es sei denn, du gibst als 2ten Parameter ein TRUE mit.
Gibt ein Objekt oder, wenn der optionale Parameter assoc auf TRUE gesetzt ist, stattdessen ein assoziatives Array zurück.

Was willst du eigentlich da machen Ich sehe es so. Du filterst auf den Key. Wenn dieser zwieschen 0 und 30 ist, dann setzte den Wert in ein Listenstring, ansonsten ignorieren.
Das geht auch relativ elegant mittels Arrays
PHP:
$json = '{"19":74,"17":71,"18":73,"15":67,"16":68,"13":65,"14":66,"11":63,"12":64,"21":76,"20":75,"22":78,"23 ":79,"24":84,"25":103,"26":112,"27":113,"28":114,"29":118,"3":54,"2":53,"10":62,"1":34,"0":32,"7":58 ,"6":57,"5":56,"4":55,"9":60,"8":59}';

//Json in einen Array wandeln
$array = json_decode($json, true);
//Range der gültigen Keys definieren
$range = range(0, 29);
//Nur die EInträge mit einem Key innerhalb des Ranges auswählen
$selected = array_intersect_key($array, $range);
//In einen Kommagetrennten String wandeln
$in = implode(',', $selected);

var_dump($in);
 
hi hi,

$list ist glaub leer, wenn ich es vor dem decode mach bekomm ich ein "" zurück :(

Habe echo $list; geschrieben und trotzdem nur false zurückbekommen.
 
Versuch es mal über $_POST oder $_GET (je nachdem wie du sendest) anstelle von $_REQUEST
 
Habe jetzt GET und POST auch versucht aber alle leer :confused:

Dann muss ich doch noch mal mein Java-Code anschauen...
Trotz dem mal danke!
 
Beide = NULL

PHP:
$list = var_dump ($_GET['postList']);
echo "$list ich bin eine Liste";
$list = json_decode(utf8_encode($list),true);
$in = "";

Das kam raus: NULLn ich bin eine Listefalsen
 
Ich meinte eigentlich
PHP:
echo var_dump($_POST);
echo var_dump($_GET);

wenn beide leer sind, dann hat du einen Fehler im Java code, ansonsten siehst ja den Fehler.
 
Achso :)

Ich habs nicht so mit PHP , bin da noch nicht so geübt drin, wie man bestimmt merkt.

Also hier der Code...

PHP:
$list = $_POST['postList'];
echo var_dump($_POST['postList']);
echo var_dump($_GET['postList']);

$list = json_decode(utf8_encode($list),true);
$in = "";

und hier das Ergebnis...

NULLnNULLnfalsen

Ich versuch es glaub mal über die GET zu senden.
Ist irgendwie komisch, im Javacode findet niemand einen fehler und hier kommt nichts an...

Habe den Javacod auch in ein Android-Forum rein gemacht, die Leute machen super mit aber finden auch kein Fehler.
Dir aber vielen Dank für deine mühe, ich melde mich falls es mit GET auch nicht geht...
 
Zuletzt bearbeitet:
Zurück