FORM和POST数组中Checkbox的顺序是否相同?

时间:2009-09-05 10:03:20

标签: php html forms checkbox

我有几个复选框,我试图采用一种懒惰的方式将它们插入数据库。

所以我想知道,POST超级数组中复选框数组(checkboxes [])的顺序是否与它们在我的html页面中的顺序相同?

如果没有,那么我将不再是一个懒惰的开发者!

感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

是的,请参阅17.13.4 Form content types of the HTML 4 specification。对于application/x-www-form-urlencoded

  

控件名称/值按它们在文档中出现的顺序列出。该名称与值=分隔开来,名称/值对由&分隔开来。

对于multipart/form-data

  

部件以相同的顺序发送到处理代理程序,相应的控件显示在文档流中。

PHP手册说明了相同的内容(见How do I create arrays in a HTML <form>?):

  

在HTML中指定数组键是可选的。如果未指定键,则按照元素在表单中显示的顺序填充数组。

答案 1 :(得分:0)

虽然从技术上来说答案是“是”,但它仍然取决于它是如何被访问的,真的(以及你如何懒惰它!)。

例如,如果未勾选复选框,则它不包含在POST中。这是因为它不是由浏览器发送的。是的,其他人仍在秩序中,但你必须在“懒惰”中解释这一点。

还要记住,如果您使用“复选框[1]”,“复选框[2]”等表单字段名称来执行此操作,那么这些也可能不符合您期望的顺序取决于你在PHP中访问它的方式。

执行“while $ i&lt; $ number_of_known_checkboxes”,然后查看“$ checkbox [$ i]”就可以了。但是,使用“while $ i&lt; count($ checkbox)”将失败(因为复选框仅填充了选中的复选框),foreach循环也可能会向您显示问题。

答案 2 :(得分:0)

有一点需要警惕。无论HTML 4规范如何说,它们都按照它们在 DOM 中出现的顺序提交。

看看这个(无效的)HTML。

<html>
<head>
    <title>Test Page</title>
</head>
<body>
    <form name="f1" method="get" action="fostered.htm">
        <label>A <input type="checkbox" name="a" checked="checked" /></label>
        <table>
            <tbody>
                <tr>
                    <td>
                        <label>B <input type="checkbox" name="b" checked="checked" /></label>
                    </td>
                </tr>
                <tr>
                    <label>C <input type="checkbox" name="c" checked="checked" /></label>
                </tr>
            </tbody>
        </table>
        <input type="submit" />
    </form>
</body>
</html>

在这种情况下,提交的顺序是A,C,B,因为在解析过程中,C复选框是“foster parented”,它位于表格的开头之前,因为它不在表格单元格内。

当然,这通常会显示在渲染页面上,但CSS可能会掩盖它。

麻烦地验证HTML的另一个好理由。

值得注意的是,“隐藏”输入字段不是寄养父母,所以如果C是隐藏字段,提交顺序将是A,B,C。