我希望通过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 ...);
但我知道这种方式是错误的。 我怎么能这样做?
答案 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
答案 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注入。