我有一个表单,我在其中添加了一组复选框,如下所示:
<form action="next.php" method="get">
<input name="c1" value="1" type="checkbox">
<input name="c1" value="2" type="checkbox">
<input name="c1" value="3" type="checkbox">
<input name="c1" value="4" type="checkbox">
...
</form>
如果我选中第一个和第三个复选框,当我按下提交按钮时,URL看起来很好,例如
?c1=1&c1=3 [...]
但$ _GET数组只保存c1的最后一个值。我知道我可以使用[]
表示法来获取数组,但链接看起来像
?c1[]=1&c1[]=3 [...]
我看到生成没有[]
的网址的网站仍然设法将所有值都考虑在内。他们是如何做到的?
谢谢!
答案 0 :(得分:2)
如果要对多个不同的表单元素使用相同的字段名,PHP要求您使用伪数组表示法:
<input type="checkbox" name="c1[]" ... />
<input type="checkbox" name="c1[]" ... />
<input type="checkbox" name="c1[]" ... />
etc...
[]
告诉PHP将c1
视为数组,并保留所有提交的值。如果没有[]
,PHP将只使用新的c1值覆盖每个先前的c1值,直到表单完成处理。
不使用[]
表示法的网站会自行处理表单,从$_SERVER['QUERY_STRING']
检索查询字符串,然后自行解析。
答案 1 :(得分:0)
使用必须使用:
<input name="c1[]" value="1" type="checkbox">
<input name="c1[]" value="2" type="checkbox">
<input name="c1[]" value="3" type="checkbox">
<input name="c1[]" value="4" type="checkbox">
答案 2 :(得分:0)
您仍然可以访问整个查询字符串。您可以将查询字符串解析为如下部分:
$qs = explode("&",$_SERVER['QUERY_STRING']);
foreach ($qs as $part) {
if (strpos($part,"c1") !== false) {
$split = strpos($part,"=");
$values[] = substr($part, $split + 1);
}
}
var_dump($values);
如果您的查询字符串如下所示:?c1 = 1&amp; c1 = 3,上面的代码将为您留下如下结果:
array(2) {
[0]=> string(1) "1"
[1]=> string(1) "3"
}