ВСТАВИТЬ несколько записей из 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