-1

我需要帮助将数据从 android 发送到 php。我有这个android的java代码;

public void sendToDb()
{
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("pLat",Double.toString(lat)));
    nameValuePairs.add(new BasicNameValuePair("pLng",Double.toString(lng)));

    try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new      
                HttpPost("http://123456.com/welcome.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        Log.i("postData", response.getStatusLine().toString());
    }

    catch(Exception e)
    {
        Log.e("log_tag", "Error in http connection "+e.toString());
    }           
}

我在我的 php 文件夹中有这个代码;

<?php
 $pLat = $_POST['pLat'];
 $pLng = $_POST['pLng'];

 $result = mysql_query("update Users set lat='$pLat',lon='$pLng' where username='ozi');      
 if (mysql_affected_rows()==0) 
   {
    $query = "INSERT INTO Users ";
    $query .= "(lat,lon) VALUES ('$pLat','$pLng')";
   }
 }
?>

当我从手机发送数据时没有问题,但是在我查看 mysql lat 和 lot 行之后不是空的而是空的。您是否在代码中看到了问题?

4

2 回答 2

0

乍一看,我已经可以看到这里有些疯狂。为什么要指定where username= { $_SESSION['username']}呼叫来自 android 设备的时间?有什么会议?此外,如果这失败了,您插入时没有用户名。但从不运行查询。

 if (mysql_affected_rows()==0) 
   {
    $query = "INSERT INTO Users ";
    $query .= "(username, lat,lon) VALUES ('ozi', '$pLat','$pLng')";
    mysql_query($query) or die(mysql_error()); // <---- this would need to be run
   }
 }

我建议您先解决这两个非常关键的观察结果,然后用更有针对性的问题更新您的问题。然后我可能会更新这个答案以使其更有用。

于 2012-11-28T21:19:47.410 回答
0

阅读您的评论后,您想要做的(我认为)是持久化数据。php 文件只运行您拥有的代码。只有在请求中传递 POST 变量时,它们才有效。请求来自 Android 应用程序以及 POST 变量,并且对 Android 应用程序的响应将具有正确的输出。

来自浏览器的请求是“GET”,不发送 pLat 或 pLng 变量,因此没有要输出的变量。

这是您必须掌握的 HTTP 的一个非常基本的概念。

您要做的是将数据保存在某处。PHP 可以通过将其保存到数据库(例如 MySQL)或简单地将 POST 变量输出到本地文件来做到这一点。一个快速的谷歌搜索可以告诉你如何保存文件和打开数据库。哎呀,您甚至可以将它们通过电子邮件发送给自己。

PHP 脚本只会在脚本的生命周期内保存这些变量,然后永远将它们从内存中释放出来。您可以使用 PHP 的强大功能将这些变量保存在其他地方。

于 2012-11-28T16:40:23.757 回答