在HTML表单中提交的数组的预期顺序是什么?

时间:2010-09-14 20:09:14

标签: php javascript html forms

我想知道我将在服务器端看到POST变量的顺序是否有任何保证。

我的用例是我有一个表单,用户将填写该表单以输入姓名和电子邮件列表。我正在使用表行,每个表都有两个输入:

<table>
<tr>
<td><input type='text' name='name[]' /></td>
<td><input type='text' name='email[]' /></td>
</tr>
<tr>
<td><input type='text' name='name[]' /></td>
<td><input type='text' name='email[]' /></td>
</tr>
</table>

可以通过javascript克隆该行,以允许用户输入更多姓名和电子邮件,这样我就不会提前知道将提交多少个。

在服务器端,我看到$ _POST ['email']和$ _POST ['name']设置,但我想知道我是否可以安全地假设$ _POST ['email'] [0]将对应$ _POST ['name'] [0],$ _POST ['email'] [1]将对应$ _POST ['name'] [1],依此类推。一些基本测试似乎表明是,但我想知道是否有保证或我是否只是幸运。

4 个答案:

答案 0 :(得分:13)

为什么不添加分组键,如:

<td><input type='text' name='user[0][name]' /></td>
<td><input type='text' name='user[0][email]' /></td>
</tr>
<tr>
<td><input type='text' name='user[1][name]' /></td>
<td><input type='text' name='user[1][email]' /></td>

然后在基于当前数字克隆时手动设置user索引。这样一切都已经整理好了。

答案 1 :(得分:9)

  

数组的预期顺序是什么   以HTML格式提交?

根据HTML规范:

  

控件名称/值列在   它们出现在文件中的顺序

http://www.w3.org/TR/html401/interact/forms.html#form-content-type

然而,如prodigitals的回答所示,使用索引数组方法是更好的编码实践。

答案 2 :(得分:2)

数据将以与表单相同的顺序显示。因此第一行有键0,第二行 - 1。

答案 3 :(得分:0)

正如Vaidas Zilionis所说,数据的显示顺序与表单中显示的顺序完全相同,请参阅W3C的HTML 4.01 Specification

  

<强>应用程序/ x-WWW窗体-urlencoded
   [...]   2.控件名称/值按照它们在文档中出现的顺序列出

     

<强>的multipart / form-data的
   [...]   “multipart / form-data”消息包含一系列部分,每个部分代表一个成功的控件。部件将按照相应控件在文档流中显示的顺序发送到处理代理