如何使用PHP获取组中复选框的值?

时间:2011-11-17 20:41:16

标签: php html

我有一个表单,我在其中添加了一组复选框,如下所示:

<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 [...]

我看到生成没有[]的网址的网站仍然设法将所有值都考虑在内。他们是如何做到的?

谢谢!

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" 
}