在PHP中,对于数组输入,INPUTS的顺序是否有保证?

时间:2010-12-09 16:37:11

标签: php html html-form html-post

我有一个表单,用户输入无限数量的数据行。他们通过在屏幕上输入他们想要的任意数量的行来到达表单。

<?php
$numRows = $_GET['NUM_ROWS_REQUESTED'];

?>
<form method="post">
<?php
for($i = 0; $i < $numRows ;$i++) {
  $uuid = uniqid();
?>

  <input type="text" name="MYDATA[<?php print $uuid; ?>][FIRST_NAME]" />
  <input type="text" name="MYDATA[<?php print $uuid; ?>][LAST_NAME]" />
<?php
}
?>
</form>

我想知道,当表单发布并且我在$_POST['MYDATA']数组中收到这些记录时,如果可以保证它们的排序顺序与它们在屏幕上发布的顺序相同。或者它们是由随机生成的uniqid()订购的?

我使用唯一ID而不仅仅是更容易排序的整数的原因是用户可以删除行并使用该页面上的javascript添加其他行。检查碰撞是非常困难的。

2 个答案:

答案 0 :(得分:10)

W3 spec不包含有关表单值应该组合到数据集中的顺序的规则,因此从技术上讲,您无法确定。另一方面,我没有看到(多年来在众多操作系统上的众多浏览器中)没有以源列表顺序提供数据的情况。在更改默认(UI生成)tabindex值时,我还没有真正测试过。

您可以随时对数组(asort)进行排序,以确定您正在阅读的数据顺序。

答案 1 :(得分:7)

它有点HTML4.01保证(对于-urlencoded,但假设/ form-data相同),并且所有当前浏览器按照文档中列出的顺序提交表单字段。 / p>

所以是的,它们是按照它们的外观排序的,而不是随机的uuid。