Предполагая, что в веб-форме имеется 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, чтобы убедиться, что порядок поддерживается.