Данные закажут в форме сообщения, то же к нему в веб-форме?

Принятие там является 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;

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

6
задан Edward 2 April 2010 в 10:01
поделиться

6 ответов

Что ж, рекомендация W3C для форм HTML действительно говорит:

Имена / значения элементов управления перечислены в {{1} } порядок их появления в документе.

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

7
ответ дан 8 December 2019 в 17:20
поделиться

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

Вы также можете указать конкретный порядок, если вам нужно, или даже использовать строковые ключи. Например, станет $ _ 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' />
1
ответ дан 8 December 2019 в 17:20
поделиться

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

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;
}
1
ответ дан 8 December 2019 в 17:20
поделиться

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

Давать вашим входным материалам одно и то же имя - плохая практика.

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

0
ответ дан 8 December 2019 в 17:20
поделиться

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

4
ответ дан 8 December 2019 в 17:20
поделиться

Лучше сделать в 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;

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

1
ответ дан 8 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: