2012-12-27 48 views
2

我遇到了我的android代碼的麻煩。我正在嘗試在Android中繪製一個圖表。我想使用PHP腳本連接到MySQL基礎。我試圖發送一些參數給腳本,但它一直返回null。 PHP代碼:從PHP返回特定數量的值到Android

<? 

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

嘗試打印出s1和s2值以檢查空字段,並嘗試單獨運行php腳本以查看您是否在瀏覽器中獲得值 – kabuto178

+1

儘管我不確定awnser,但您的代碼是非常不安全的。不要使用'mysql',而是使用'mysqli'或'pdo',並且消毒你的變量。你的PHP代碼很容易被SQL注入。 –

+0

你可以'print_r($ output)'並檢查你是否得到任何輸出?同樣如雨果提到的,您需要清理您使用過的POST變量。 – GoodSp33d

回答

1

的意見綜合awnser:

1:變化的mysqli或PDO(見Advantages Of MySQLi over MySQL

2你不要在你的約會周圍使用引號(如果不是數字,則使用vreme)。嘗試

"SELECT * FROM temperature WHERE (datum>='$Datum' && vreme>'$Vreme')" 

如果它不工作在常規瀏覽器中測試您的頁面以確保PHP部分正常工作。您也可以添加一些var_dump()來檢查值。

+0

你錯過了')'和你的查詢,但我改變了它,現在一切正常。謝謝! – Brana

+0

所以我猜其他建議正在考慮之中? :) –

0

你應該嘗試逐個調試的各個部分。

  1. 嘗試使用普通瀏覽器連接到您的php頁面。如果它有效,你知道錯誤在你的java代碼中。如果它不起作用,你可以暫時離開java代碼,並專注於使php頁面工作。
  2. Datum和Vreme的硬代碼有效值,並查看在離開POST部分時,php代碼是否工作。
  3. 在mysql中查看你的查詢,看看它在放入php之前做了什麼。
  4. 啓用general query log查看php發送給mysql的內容。

這樣你就會指出錯誤。看你的代碼時,防止SQL注入(參見一半,https://stackoverflow.com/tags/php/info

另外:

+0

當我在基礎上運行我的查詢它的作品,當我硬編碼值腳本並在瀏覽器中運行它不起作用,何時我只打印了我從Android獲得的值。有任何想法嗎? – Brana

+0

您需要從php頁面添加調試輸出以查看失敗的位置。打印基本的東西,如查詢字符串,參數等。也可以嘗試更簡單的查詢,例如「從雙重選擇now()」以查看您是否正確使用數據庫。 –