【问题标题】:Is the order of INPUTS in a POST guaranteed for array inputs in PHP?PHP 中的数组输入是否保证 POST 中的 INPUTS 顺序?
【发布时间】:2011-05-22 23:46:08
【问题描述】:

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

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

【问题讨论】:

  • @DampeS8N 我真的没有什么可以排序的。输入时屏幕上的输入顺序是所需的顺序。如果不执行 AJAX 来检索系统日期,那将是不可靠的,因为 javascript 使用他们 PC 的日期。我希望在创建新行时可以避免在 javascript 中分析现有行。
  • 您可以添加一个隐藏输入,其中 MYDATA[&lt;?php print $uuid; ?&gt;][SORT_ORDER] 作为名称,计数器作为值。您也可以只使用计数器作为 $uuid。如果您仍然需要 UUID,您可以让服务器生成它或使用与我的第一个示例相反的方法:以 MYDATA[&lt;?php print $counter; ?&gt;][UUID] 为名称和 $uuid 作为值的隐藏输入。
  • 链接到相关问题,我认为这是一个很好接受的答案。 stackoverflow.com/questions/3712481/…

标签: php html forms html-post


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2010-09-24
    • 2010-11-04
    • 2011-06-11
    • 2012-07-14
    • 2012-09-04
    相关资源
    最近更新 更多