根据w3c,“表单中的多个复选框可以共享相同的控件名称。因此,例如,复选框允许用户为同一属性选择多个值。”但是如果这样做,PHP将只采用最后一个值。例如:
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />
</form>
如果您提交该表单,您将看到仅选中的最后一个复选框将被设置。浏览器会发送所有这些值,但它们会相互覆盖。因此,将同一名称设置为多个复选框可能会导致问题。一直都是这样吗?我似乎记得可以将所有值实际上发送为数组。
我知道您只需在名称末尾添加 [] 即可创建值的数组:
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet[]" value="dog" />Dog<br />
<input type="checkbox" name="pet[]" value="Cat" />Cat<br />
<input type="checkbox" name="pet[]" value="bird" />bird<br />
<input type="checkbox" name="pet[]" value="iguana" />iguana<br />
<input type="submit" />
</form>
但是w3c并没有规定这一点。老实说,我不记得我是否总是在名称末尾使用[],但出于某种原因,我认为曾经有过一段时间我没有用。过去有没有任何时候您可以在没有[]的情况下使其正常工作?
[]
,然后可以使用in_array
来确定哪些复选框已被选择。很烦人,但不是所有的表单都这样吗? - thatidiotguy