2012-03-17 90 views
2

我正在處理將數據發送到服務器的程序。服務器正在接收我的數據,但只有最後一點。這是我的Android代碼:HTTPPOST Android到服務器

ArrayList<NameValuePair> j2 = new ArrayList<NameValuePair>(); 
j2.add("drink_name", "rootbeer") 
j2.add("drink_name", "pepsi") 

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("kubie.dyndns-home.com/R2Bar2/getingredients.php"); 
httppost.setEntity(new UrlEncodedFormEntity(j2)); 
HttpResponse response = httpclient.execute(httppost); 
responseText = EntityUtils.toString(response.getEntity()); 

但它只是將最後一項(百事可樂)添加到數據庫。 這裏是我的PHP:

<?php 
$handle = mysql_connect('localhost','root','xxxx'); 
if($handle==false) 
{ 
die('No database connection'); 
} 

$result = mysql_query("TRUNCATE TABLE 'available_ingredients'"); 

$db=mysql_select_db('r2bar2'); 
$query='INSERT INTO available_ingredients (drink_name) VALUES ("'.$_POST["drink_name"].'")'; 
$result=mysql_query($query); 
?> 
+0

'ArrayList '它叫做Name - > Value pair not Name - > Value * s * pair。一個名字,一個價值。 – hakre 2012-03-17 00:33:32

回答

3

試試這個

j2.add(new BasicNameValuePair("drink_name[]", "rootbeer")); 
j2.add(new BasicNameValuePair("drink_name[]", "pepsi")); 

你是在爲你的實體將是的NameValuePair的名單 - 讓你添加每一件事情應該是的NameValuePair,而BasicNameValuePair就是其中之一

在php

<?php 
foreach ($_POST["drink_name"] as $drink_name) { 
    $query=... 
    $result=... 
} 
?> 

但值得注意的問題 - 確保您撥打mysql_real_escape_string您輸入防範SQL注入攻擊。

+0

仍然只打印出pepsi – 2012-03-17 00:57:22

+0

對,php想在名稱中使用括號來創建一個數組 - 所以在你的服務器代碼中,確保你循環了drink_name []的數組元素 – dldnh 2012-03-17 01:00:27

1

嘗試將參數的名稱更改爲以下(從Android代碼):

j2.add( 「drink_name []」, 「rootbeer」); j2.add(「drink_name []」,「pepsi」);

而在你的PHP:

$ drink_names =陣列($ _ POST [ 'drink_name']);

希望這有助於...

0

您設置相同的鍵兩次,因此,當服務器收到您的申請只看到了drink_name的最後一個值,這是「百事」,因爲它會覆蓋「rootbeer」

+0

我如何改變我的PHP? – 2012-03-17 00:58:51

相關問題