将特定数量的值从php返回到Android

将特定数量的值从php返回到Android,php,android,mysql,json,Php,Android,Mysql,Json,我的android代码有问题。我正试图在Android中绘制一个图表。我想使用PHP脚本连接到MySQL库。我试图向脚本发送一些参数,但它始终返回null。 PHP代码: <? mysql_connect(...); mysql_select_db("temperature"); $Vreme = $_POST['Vreme']; $Datum = $_POST['Datum']; $q = mysql_query("SELECT * FROM temperature WHERE

我的android代码有问题。我正试图在Android中绘制一个图表。我想使用PHP脚本连接到MySQL库。我试图向脚本发送一些参数,但它始终返回null。 PHP代码:

<?

mysql_connect(...);
mysql_select_db("temperature");

$Vreme = $_POST['Vreme'];
$Datum = $_POST['Datum'];

$q = mysql_query("SELECT * FROM temperature WHERE 
           ((datum > $Datum) || (datum = $Datum)) && (vreme > $Vreme) ");
while($e = mysql_fetch_assoc($q))
    $output[] = $e;

print(json_encode($output));

mysql_close();
?>

和Android代码:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("Vreme",s1));
nameValuePairs.add(new BasicNameValuePair("Datum",s2));
InputStream is = null;
try {
    String adresa="http://senzori.open.telekom.rs/grafik.php";
    HttpPost httppost = new HttpPost(adresa);
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    is = entity.getContent();
}
catch(Exception e) {
    Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
    is.close();
    result = sb.toString();

}
catch(Exception e) {
    Log.e("log_tag", "Error converting result "+e.toString());
}
ArrayList nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“Vreme”,s1));
添加(新的BasicNameValuePair(“基准”,s2));
InputStream=null;
试一试{
字符串adresa=”http://senzori.open.telekom.rs/grafik.php";
HttpPost HttpPost=新的HttpPost(adresa);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpClient HttpClient=新的DefaultHttpClient();
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
is=entity.getContent();
}
捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
//将响应转换为字符串
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
}
捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}

您应该尝试单独调试各个部分

  • 尝试使用普通浏览器连接到php页面。如果它起作用,您就知道错误在java代码中。如果它不起作用,您可以暂时不使用java代码,集中精力使php页面工作
  • 硬编码Datum和Vreme的有效值,并查看将POST部分排除在等式之外时php代码是否有效
  • 在mysql中尝试您的查询,看看它在放入php之前是否达到了预期效果
  • 启用以查看php发送到mysql的内容

  • 通过这种方式,您将锁定错误。

    注释的组合:

    1:更改为mysqli或pdo(请参阅)

    2:防止sql注入(请参阅下半部分)

    此外,在查看代码时,不要在日期周围使用引号(如果不是数字,则使用vreme)。试一试


    如果不起作用,请在常规浏览器中测试您的页面,以确保PHP部分工作正常。您还可以添加一些
    var_dump()
    来检查值。

    尝试打印s1和s2值以检查空字段,以及尝试运行php脚本以查看是否在浏览器中获得值。尽管我不确定awnser,但您的代码是高度不安全的。不要使用
    mysql
    ,而是使用
    mysqli
    pdo
    并清理您的变量。您的PHP代码易受SQL注入攻击。能否
    打印($output)
    并检查是否有输出?同样正如雨果所提到的,你需要清理你使用过的POST变量?在运行脚本之前,我正在进行某种身份验证。mysql和mysqli之间有什么区别?还要检查是否有关于SQL注入的部分。不管怎么说,这本书读起来还是不错的。当我在base上运行我的查询时,它工作了;当我硬编码值以编写脚本并在浏览器中运行时,它不工作;当我只打印从Android获得的值时,它工作了。有什么想法吗?你需要从php页面添加调试输出,看看哪里失败了。打印查询字符串、参数等基本内容。还可以尝试更简单的查询,如“select now()from dual”,以查看您使用数据库的方式是否正确。您在查询的和处缺少一个“'),但我更改了它,现在一切正常。非常感谢。所以我想其他的建议也在考虑之中
    "SELECT * FROM temperature WHERE (datum>='$Datum' && vreme>'$Vreme')"