2012-03-17 66 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