ВМЪКНЕТЕ множество записи от Android -> PHP -> MYSQL

Опитвам се да вмъкна множество (1-50) записи от приложение за Android във външна база данни Mysql. Имам перфектно PHP скрипт, който да работи за единични INSERT заявки. Но досега не успявам да направя това да работи за цял набор от записи, най-вероятно поради ограниченото ми разбиране на PHP.

Android код:

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();
}

И в 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);
?>

Дали грешката вече се случва в частта на кода за Android или този PHP скрипт просто не чете данните, които изпратих правилно? Всяко прозрение би било много добре дошло.


person UncleIstvan    schedule 12.09.2013    source източник


Отговори (1)


Добре, направих това работа с помощта на JSON масив. В случай, че някой има полза от него, ето как става:

Android, създайте JSON низ:

//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 изпраща данни към PHP (добавете 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 скрипт:

<?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);
?>
person UncleIstvan    schedule 13.09.2013
comment
да, използването на json и тялото на заявката звучи по-добре за сложни данни. - person hek2mgl; 13.09.2013
comment
здрасти Имам проблем с JSON. Бях пробвал твоята проба, с някои корекции и за първи път проработи. Но изведнъж получавам грешка като Malformed JSON. Когато тествам и проверявам JSON кода, той премина, но когато изпращам от приложение към PHP скрипт, получавам грешка. Изглежда, че това е нещо с кодирането, дори всичко е настроено на UTF8. - person Josef; 22.05.2017