1

I am trying to insert multiple (1-50) entries from an Android application to an external Mysql database. I perfectly got a PHP script to work for single INSERT queries. But I am failing so far to make this work for a whole array of entries, most likely due to my limited understanding of PHP.

Android code:

List<NameValuePair> upload_array = new ArrayList<NameValuePair>();
upload_array.add(new BasicNameValuePair("mFirstname[0]", "FirstName 1"));
upload_array.add(new BasicNameValuePair("mFirstname[1]", "FirstName 2"));
upload_array.add(new BasicNameValuePair("mLastname[0]", "LastName 1"));
upload_array.add(new BasicNameValuePair("mLastname[1]", "LastName 2"));
upload_array.add(new BasicNameValuePair("mNickname[0]", "NickName 1"));
upload_array.add(new BasicNameValuePair("mNickname[1]", "NickName 2"));

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://url/script.php");
HttpResponse response = null;
try {
    httppost.setEntity(new UrlEncodedFormEntity(upload_array));
    response = httpclient.execute(httppost);
} catch (Exception e) {
    e.printStackTrace();
}

And in PHP:

<?php

$connect = mysqli_connect("***","***","***", "***");

if(mysqli_connect_errno($connect))
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
    echo "success";
}

$query = mysqli_prepare("INSERT INTO `namelist` (`firstname`,`lastname`,`nickname`)
    VALUES(?,?,?)");

$mFirstname = $_POST['mFirstname'];
$mLastname = $_POST['mLastname'];
$mNickname = $_POST['mNickname'];

foreach($mFirstname as $key as $key => $value) {
    $query->bind_param('sss',$value["mFirstname"],$value["mLastname"],$value["mNickname"];
    $query->execute();
}

mysqli_close($connect);
?>

Is the mistake happening in the Android part of the code already or does this PHP script just not read the data I sent properly? Any insight would be very welcome.

1 Answer 1

1

Ok, I made this work using a JSON Array. In case anyone has use for it, here's how it goes:

Android, create JSON String:

//Create JSON string start
String json_string ="{\"upload_fishes\":[";

//Repeat and loop this until all objects are added (and add try+catch)
JSONObject obj_new = new JSONObject();
obj_new.put("fish_id", your_looped_string_1[i]);
obj_new.put("fish_lat", your_looped_string_2[i]);
obj_new.put("fish_lon", your_looped_string_3[i]);
json_string = json_string + obj_new.toString() + ",";

//Close JSON string
json_string = json_string.substring(0, json_string.length()-1);
json_string += "]}";

Android send data to PHP (add try+catch):

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);

String url = "http://yourserver.com/script.php";

HttpPost request = new HttpPost(url);
request.setEntity(new ByteArrayEntity(json_string.getBytes("UTF8")));
request.setHeader("json", json_string);
HttpResponse response = client.execute(request);

Log.d("FISHY", response.getStatusLine().toString());

PHP script:

<?php

//CONNECT TO THE DATABASE
 $DB_HOST = 'yourhost.com';
 $DB_USER = 'user';
 $DB_PASS = 'password';
 $DB_NAME = "db_name";

 $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

 if(mysqli_connect_errno())
{
//    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
//    echo "Connected to MySQL";
}


   $postdata = file_get_contents("php://input"); 
   $data = json_decode($postdata, true);

   if (is_array($data['upload_fishes'])) {
      foreach ($data['upload_fishes'] as $record) {
        $fid = $record['fish_id'];
        $flat = $record['fish_lat'];
    $flon = $record['fish_lon'];

        mysqli_query($mysqli,"INSERT INTO `fishes`(`fish_type_id`, `fish_lat`, `fish_lon`) VALUES ($fid, $flat, $flon)");
      }
   }


mysqli_close($mysqli);
?>
Sign up to request clarification or add additional context in comments.

2 Comments

yes, using json and the request body sounds better for complex data.
Hi! I have problem with JSON. I had tried your sample, with some adjustments and for the first time worked. But suddenly I get error like Malformed JSON. When I test and verify JSON code it passed but when sending from application to PHP script I get error. Seems that is something with encoding even is all set to UTF8.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.