Будет ли порядок данных в почтовой форме одинаковым для него в веб-форме?

Предполагая, что в веб-форме имеется 5 входов

<input name='the_same[]' value='different' /> <input name='the_same[]' value='different' /> <input name='the_same[]' value='different' /> <input name='the_same[]' value='different' /> <input name='the_same[]' value='different' /> 

Когда серверная сторона получает почтовые данные, я использую foreach для приема данных, например

 $the_same = new array(); foreach($_POST['the_same'] as $data) $the_same[] = $data; 

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

Ну, рекомментация W3C на HTML-формах говорит:

Названия / значения управления перечислены в том порядке, в котором они отображаются в документе.

Тем не менее, я бы счел немного рискованным, чтобы ваше приложение зависело от этой детали.

PHP уже обрабатывает преобразование переменных POSTed / GETed в массивы, когда вы кладете [] после имени. Сделайте это, вместо того, чтобы ошибаться.

Лучший способ сделать в html:

 <input name='the_same[]' value='different' /> 

Затем на сервере:

 $the_same = new array(); foreach($_POST['the_same'] as $data) // or $_GET if you prefer $the_same[] = $data; 

Таким образом, переменная не будет перезаписана.

если вы хотите иметь его в заказе, вы можете использовать динамические переменные или просто получить доступ к массиву явно

the_same1 the_same2 the_same3

так как вы знаете имена в любом случае, вы можете легко получить к ним доступ

 $the_same = array(); for($i=1; ; $i++){ $tmp =$_REQUEST["the_same".$i] if( empty($tmp) ){ // no more stuff break; } $the_same[] = $tmp; } 

Если вы измените имя своего ввода на the_same[]$_REQUEST['the_same'] он станет массивом этих значений, сначала в порядке элементов (все текущие браузеры, я считаю).

Вы также можете указать конкретный заказ, если вам нужно, или даже использовать строковые ключи. Например, <input name='the_same[apple][2]'/> станет $_REQUEST['the_same']['apple'][2]

Не используя [] в именах ввода, PHP будет видеть только последнее значение. Другие значения будут «перезаписаны» более поздним значением при создании массивов $_REQUEST / $_GET / $_POST .

Примером использования этого в ваших интересах может быть флажок, так как флажок HTML отправляет только значение при его проверке, вы можете отправить «не проверенное» значение somtime:

 <input type='hidden' name='check' value='not checked' /> <input type='checkbox' name='check' value='checked' /> 

Скорее всего, да, но вы не должны этого допускать. Это зависит от вашего браузера, как отправляются входы, и, кроме того, PHP не гарантирует, что цикл foreach итерации выполняется в том же порядке, что и элементы.

Это плохая практика, чтобы дать вашим входам одно и то же имя.

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