【问题标题】:HTTPPOST Android to ServerHTTPPOST Android 到服务器
【发布时间】:2012-03-17 00:30:24
【问题描述】:

我正在开发一个将数据发送到服务器的程序。服务器正在接收我的数据,但只有最后一点。这是我的 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); 
?>

【问题讨论】:

  • ArrayList&lt;NameValuePair&gt; 称为名称 -> 值对而不是名称 -> 值s 对。一个名字,一个价值。

标签: php android database http-post


【解决方案1】:

试试这个

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 注入攻击。

【讨论】:

  • 对,php 需要名称中的方括号来组成一个数组——所以在你的服务器代码中,确保你遍历了drink_name[]的数组元素
【解决方案2】:

尝试将参数名称更改为以下(来自Android代码):

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

在你的 PHP 中:

$drink_names = array($_POST['drink_name']);

希望这会有所帮助...

【讨论】:

    【解决方案3】:

    您将相同的键设置了两次,因此当服务器收到您的请求时,它只会看到drink_name 的最后一个值,即“Pepsi”,因为它会覆盖“rootbeer”

    【讨论】:

    • 如何在我的 PHP 中更改它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2012-04-10
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多