发送String [] b httprequest并获取php b $ _GET

时间:2014-03-24 13:45:45

标签: java php json httprequest

我希望通过HTTP请求发送String[]并使用$_GET方法获取PHP中的值。
String[]中的值总数是可变的 到目前为止我已尝试过:

List<NameValuePair> params = new ArrayList<NameValuePair>();
String[] dropdowns = {"1st item","2nd item","3rd item","4th item"};
for (int i = 0; i < dropdowns.length; i++) {
params.add(new BasicNameValuePair("pid", dropdowns[i]));
}

在PHP中,我想基于它们获取所有值和查询。

$pid = $_GET['pid'];

并使用它们:

$result = mysql_query("SELECT *FROM Apps WHERE pid[0] = $pid" AND pid[1] = $pid" 
AND ...);

但我知道这种方式是错误的。 我怎么能这样做?

4 个答案:

答案 0 :(得分:0)

您无法通过HTTP请求发送数组,除非您有一组输入,例如:

<input type='text' name='manyOfThese[]' />

要发送数组,您有两个选择。一种是使用serialize()和unserialize()将数组转换为字符串。另一种是使用会话变量:

$_SESSION['pid'] = $pid;

然后在下一个脚本

$pid = $_SESSION['pid'];
unset($_SESSION['pid']);
 foreach($pid as $element){
    echo $element //or do whatever you need to do to that variable
}

同样在脚本的开头,您需要包括:     在session_start();

然后当你的php应用程序退出时(例如在注销时):     session_destroy();

答案 1 :(得分:0)

$result = mysql_query("SELECT *FROM Apps WHERE pid[0] = $pid" AND pid[1] = $pid" AND ...); 

非常错误且不安全。 (列错误的语法,SQL注入,错误的引用,错误的SQL语法,...)

必须是

之类的东西
$result = mysql_query("
            SELECT * FROM Apps WHERE pid
            IN(" . implode(',', mysql_real_escape_string($pid)) . ")
          ");

答案 2 :(得分:0)

您可以在网址中创建要发送的值的序列化表示。它有一些限制,例如网址的最大长度。

'http://domain.com/data_handler.php?data=' . urlencode(serialize($array1));

取回你的阵列:

$array1 = unserialize($_GET['data']);

创建帖子请求并使用以下语法更好:

pid[]=1 
pid[]=2

http://www.php.net/manual/en/faq.html.php

答案 3 :(得分:0)

这有两个部分,都涉及循环。首先,当您发送数据时,将括号放在名称中以将其作为数组发送:

for (int i = 0; i < dropdowns.length; i++) {
    params.add(new BasicNameValuePair("pid[]", dropdowns[i]));
}

其次,在php端,这个数组存储在$_GET['pid']$_POST['pid']中,具体取决于你发送它的方式,因此你将遍历数组并将项添加到你的sql查询中。只需创建一个单独的变量来存储sql语句,以便添加它:

$x = 0;
foreach($_GET['pid'] as $value) {
    $yourSQLString .= " AND pid[". $x ."] = '" . $value . "'";
    $x++;
}

显然你应该用实际值做其他事情来避免sql注入。