发送字符串[]b httprequest和get在php b $_GET


send String[] b httprequest and get in php b $_GET

我想通过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 ...);

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

This

$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)) . ")
          ");

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

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

返回数组:

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

创建post请求并使用以下语法就更好了:

pid[]=1 
pid[]=2
http://www.php.net/manual/en/faq.html.php

你不能通过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 ();

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

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