根据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没有具体说明。老实说,我不记得我是否总是使用名称末尾的[],但出于某种原因,我认为在某些时候我没有。过去有没有时间没有[]?
可以让它工作答案 0 :(得分:6)
如果没有[]
,那将永远不会有效,而不是PHP。
W3C没有指定有关如何在服务器端处理查询字符串的任何内容。 (忽略一个不相关的obsolete corner of the CGI spec,只与PHP有关,因为直到最近它才是安全漏洞。)
看起来这个模式是有效的标记,但由于你描述的原因而不常用。
类似的模式 用于单选按钮,其中一次只能选择一个。 (事实上,给无线电输入相同的名称是浏览器如何将它们视为一个组)。也许这就是你的想法。
答案 1 :(得分:2)
如果您真的想在PHP中使用它,请尝试以下方法:
<?php
if (count($_POST)) {
header("Content-type: text/plain");
$fp = fopen("php://input", "r");
fpassthru($fp);
fclose($fp);
exit;
}
?>
<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://input
信息流的更多信息,请参阅PHP documentation。