我想通过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注入。