Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing JSONArray to PHP from Android

I have read through many other questions regarding PHP and JSONArray looping. I am sending in a JSONArray of values of different students with their class and studentId from my Android device. Using these values, I search the database for their names and return a JSONArray.

JSON Input: [{"studentId":"2","class":"2a","dbname":"testDb"}]
<?php

 $jsonString = $_POST['json'];  //see comment below

 $jArray = json_decode($jsonString, true);

 $conn = mysql_connect('localhost', 'user', 'pwd' );

mysql_select_db('dbname', $conn);

foreach( $jArray as $obj ){
    $className = $obj['class'];   //String
    $id= $obj['studentId'];       //int

    $result = mysql_query("SELECT name FROM student WHERE class='$className' AND id='$id'");

    $e=mysql_fetch_assoc($result);    //will only fetch 1 row of result
    $output[]=$e;


}

      echo (json_encode($output));

?>

Android

HttpClient client = new DefaultHttpClient();
HttpResponse response;
try{
 HttpPost post = new HttpPost("http://abc/getName.php");
 List<NameValuePair> nVP = new ArrayList<NameValuePair>(2);  
 nVP.add(new BasicNameValuePair("json", studentJson.toString()));  //studentJson is the JSON input

//student.Json.toString() produces the correct JSON [{"studentId":"2","class":"2a","dbname":"testDb"}]

 post.setEntity(new UrlEncodedFormEntity(nVP));
 response = client.execute(post);
if(response!=null){
//process data send from php
}  
}

SOLVED: See answer below

like image 957
ZXingIT Avatar asked Sep 21 '11 17:09

ZXingIT


2 Answers

SOLVED: Finally understood what was the problem. After posting from Android to PHP script, my JSONArray becomes [{\"studentId\":"2\",\"class\":\"2a\",\"dbname\":\"testDb\"}] To remove the "\", use PHP command stripslashes Spent 4 hours debugging!

Hope this will be a good guide for those that wants to send and retrieve data between Android and PHP

like image 174
ZXingIT Avatar answered Nov 13 '22 04:11

ZXingIT


Here's your problem:

print_r(json_decode('[{"regNo":"2","class":"2a","dbname":"TestData"}]',true));

returns Array ( [0] => Array ( [regNo] => 2 [class] => 2a [dbname] => TestData ) ) meaning your decoded json is put within an array

Use array_shift(json_decode($jsonString, true)); to remove the parent array.

like image 28
Korvin Szanto Avatar answered Nov 13 '22 05:11

Korvin Szanto