Использование php для передачи данных из Android в MySQL - PullRequest
0 голосов
/ 24 мая 2011

Я пытался отправить данные GPS из моего приложения для Android в базу данных MySQL, используя php, но я не уверен, что все настроено правильно, потому что я вижу через logcat, что данные отправляются с Android, но они просто не получаютпоглощается базой данных.

Помимо некоторых рекомендаций, есть ли в любом органе какие-либо учебные пособия, в которых бы конкретно указывался код php на сервер.

Также возможно просто отправлять данные прямо вбаза данных без чего-то вроде php?Я так не думаю, но я должен был спросить.

вот php, который я использую с адресами и прочее, взятое по понятным причинам.

<html>
<head>
<title>Send and Rec data to Android Device</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


</head>


<body>


<?php
//include("dbinfo.php");



///the stuff pointing to my db has been removed for obvious ///reasons ;)


mysql_connect($hostname,$username,$password) or die ("<html><script           
language='JavaScript'>alert('Unable to connect to database! Please try again later.'),history.go(-                
1)     </script></html>");


mysql_select_db($dbname);


// variables coming from Android  app on phone
$id = $_POST["id"];


$lat = $_POST["lat"]; // If data is in DB line 1 (public key), but the publicly displayed PHP is     
not showing data then we know that we aren't really talking to line 1

$lng = $_POST["lng"];


$alt = $_POST["alt"];


$spd = $_POST["spd"];


$acc = $_POST["acc"];


$last_gps = $_POST["lastgps"];


//filler will contain reference to graphic or audio upload directory
$filler = $_POST["filler"];


$lastid = mysql_query("select MAX(id) as maxid from samplemarks");
$row = mysql_fetch_array($lastid);


$nextid = $row[maxid] + 1;


echo "Inserting at next id = ".$nextid."<br />";


if ($lat == "") 

{
 echo "Invalid entry, latitude cannot be blank";

}

  else {
  $query2 = mysql_query("INSERT INTO samplemarks VALUES($nextid,'$lat',     
  $lng,'$alt','$spd','$acc','$last_gps','$filler')");

  mysql_query($query2);


mysql_close();


}
?>


</body>


</html>

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

У вас будут проблемы с запуском вашего кода или исправленного кода, потому что вы передаете результат от первого mysql_query () в качестве параметра во второй mysql_query (), который не будет работать. Первого mysql_query достаточно для выполнения SQL, взгляните на http://php.net/mysql_query для некоторых хороших примеров кода. Вам также не нужен параметр $ conn, если вы имеете дело только с одним подключением mysql_connect (), поскольку PHP будет предполагать, что вы хотите использовать последнее открытое подключение, если вы его не указали.

Кроме того, убедитесь, что вы провели хорошее исследование атак SQL-инъекций в PHP, особенно статью на сайте PHP по адресу http://php.net/manual/en/security.database.sql-injection.php - очень важно защищать ваши запросы SQL, когда они зависят от пользовательского ввода.

Если у вас возникли проблемы, вернитесь к основам. Используйте print_r ($ _ POST), чтобы увидеть, чем заполнено ваше тело POST, и попробуйте несколько простых операторов mysql_query (), чтобы убедиться, что ваше соединение с базой данных работает правильно.

1 голос
/ 24 мая 2011

В вашем mysql_query отсутствует параметр соединения. Когда вы делаете подключение, сохраняйте его в переменной, например

$conn =  mysql_connect($hostname,$username,$password) or die('Blah');

if ($conn) {

    mysql_select_db("mydatabasename", $conn);

   // extract your data
   if (isset($_POST["id"]) && isset($_POST['lat']) && isset($_POST['lng']) {

           $id = $_POST['id'];
           $lat = $_POST['lat'];
           $lng = $_POST['lng'];

           // add the rest of the POST fields so the query below works
           // unless you need a specific $nextid make the field auto increment in the
           // database and user '' instead of $nextid.  

   $query2 = "INSERT INTO samplemarks VALUES($nextid,'$lat',     
     '$lng','$alt','$spd','$acc','$last_gps','$filler')";

    if (mysql_query($query2, $conn))
        echo "data inserted';
    else
        echo "Oh dear ".  mysql_error() ;


       // etc
  }  // end the isset tests
}

Также $ lng не указан в вашем коде.

Я понимаю, что вы отправляете данные из своего приложения для Android на сервер php / db, но вы всегда должны проверять правильность данных из этого поста, в противном случае вы облегчаете кому-либо использование атак с использованием SQL-инъекций для взлома базы данных , Подумайте о защите вашего php с помощью ssl и имени пользователя / пароля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...