我想知道我将在服务器端看到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],依此类推。一些基本测试似乎表明是,但我想知道是否有保证或我是否只是幸运。
答案 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”消息包含一系列部分,每个部分代表一个成功的控件。部件将按照相应控件在文档流中显示的顺序发送到处理代理。