Гарантирован ли порядок ВХОДОВ в POST для входов массива в PHP? - PullRequest
19 голосов
/ 09 декабря 2010

У меня есть форма, в которой пользователи вводят неограниченное количество строк данных. Они приходят к форме, вводя любое количество строк на экране по своему усмотрению.

<?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(), который генерируется случайным образом?

Причина, по которой я использую уникальный идентификатор вместо просто целых чисел, которые было бы проще упорядочить, заключается в том, что пользователи могут удалять строки и добавлять дополнительные строки, используя JavaScript на этой странице. Было бы слишком сложно проверить наличие столкновений.

Ответы [ 2 ]

10 голосов
/ 09 декабря 2010

Спецификация W3 не содержит правил о том, в каком порядке значения формы должны быть собраны в набор данных, поэтому технически вы не можете быть в этом уверены.С другой стороны, я не видел ни одного случая (из многочисленных браузеров на многочисленных ОС за прошедшие годы), когда данные не предоставлялись в порядке следования источников.На самом деле я не проверял случаи, когда менялись значения tabindex по умолчанию (сгенерированные пользовательским интерфейсом).

Вы всегда можете отсортировать массив ( asort ) после того, как вы его получили, чтобы убедитьсяв каком порядке вы читаете значения.

7 голосов
/ 09 декабря 2010

Это гарантировано HTML4.01 (для -urlencoded, но предполагается, что оно идентично для / form-data), и все текущие браузеры отправляют поля формы в порядке, в котором они перечисленыдокумент.

Так что да, они упорядочены по внешнему виду, а не по случайному uuid.

...