对于 PHP 中的数组输入,POST 中 INPUT 的顺序是否得到保证?

2022-08-30 21:13:50

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

<?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删除行并添加其他行。检查碰撞太难了。


答案 1

W3 规范不包括有关表单的值应按什么顺序组合到数据集中的规则,因此从技术上讲,您无法确定。另一方面,我还没有看到过一个案例(多年来,来自许多操作系统上的许多浏览器),其中数据没有按源列表顺序提供。在更改默认(UI 生成)选项卡索引值时,我还没有真正测试过情况。

您始终可以在收到数组(asort)后对其进行排序,以确定读取值的顺序。


答案 2

HTML4.01(对于 -urlencoded,但假定 /form-data 是相同的),并且所有当前的浏览器都按照表单字段在文档中列出的顺序提交表单字段。

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


推荐