LINUX.ORG.RU

Порядок отправки полей формы


0

0

Нужно получить 3 массива значений от пользователя, форма примерно такая:

<input type="text" name="somename">
<input type="text" name="somename">
<input type="text" name="somename">
<input type="hidden" name="breaker" value="endlist">
<input type="text" name="somename">
<input type="text" name="somename">
<input type="text" name="somename">
<input type="hidden" name="breaker" value="endlist">
<input type="text" name="somename">
<input type="text" name="somename">

Количество полей в каждом списке произвольное, выбирается юзером на js. Все ли браузеры будут сохранять порядок полей, или лучше каждому элементу дать свое имя? Смогу ли я корректно разделить списки?

(пишу модуль для lighttpd)

Re: Порядок отправки полей формы

Общее имя -> массив. Порядок, думается, будет сохраняться, но пруфлинка пока нет. Как вариант - проверить.

Deleted ()
Ответ на: Re: Порядок отправки полей формы от Deleted

Re: Порядок отправки полей формы

Тут как раз прикол в том, что каждый массив состоит из идентичных имен. Я бы сам проверил, но зоопарк браузеров слишком большой

EmStudio ()

Re: Порядок отправки полей формы

<input type="text" name="somename[0]">
<input type="text" name="somename[1]">
...

так надежнее?

roller ★★★ ()
Ответ на: Re: Порядок отправки полей формы от roller

Re: Порядок отправки полей формы

Нет... Имя во всех элементах должно быть одно... Или несколько вроде:

<input name="somename"><input name="somevalue">
<input name="somename"><input name="somevalue">
<input name="somename"><input name="somevalue">
<input name="somename"><input name="somevalue">

Как вариант, можно добавить суффикс, как у тебя, но это опять не спасет от возможной сортировки/перемешивания полей.

Только если при получении запроса самому сортировать все...

EmStudio ()

Re: Порядок отправки полей формы

Поля в запросе кодируются в том порядке, в котором они появляются в форме. Это во всех браузерах.

<form method="GET" action="#">
<input type="text" name="n1" value="1"/>
<input type="text" name="n2" value="2"/>
<input type="text" name="n2" value="2"/>
<input type="text" name="n1" value="1"/>
<input type="submit"/>
</form>

Открой браузером и смотри что получается в адресной строке после отправки формы:

n1=1&n2=2&n2=2&n1=1

Другой вопрос состоит в том, как этот запрос разбирает сервер. Например, PHP из полученных данных формирует ассоциативные массивы, где ключом служит имя поля. Порядок ключей в ассоциативном массиве определяется порядком появления полей в запросе. Если запрос содержит несколько полей с одинаковым именем, то в результе будет лишь последнее значение <?php var_dump($_GET);?> :

array(2) { ["n1"]=> string(1) "1" ["n2"]=> string(1) "2" }

php умеет вытащить несколько значений для полей формы с одинаковыми именами, но для этого имена полей нужно сформировать специальным образом:

<form method="GET" action="#">
<input type="text" name="n1[]" value="1"/>
<input type="text" name="n2[]" value="2"/>
<input type="text" name="n2[]" value="2"/>
<input type="text" name="n1[]" value="1"/>
<input type="submit"/>
</form>

--- вывод var_dump($_GET); ---
array(2) {
["n1"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } ["n2"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "2" }
}

"Специальность" имен это чисто PHP'шная фича. Другие фреймворки могут использовать собственные правила. В конце-концов если не подходит парсинг, предсоставляемый фреймворком, всегда можно написать собственный парсер для QUERY_STRING (или тела запроса если данные приходят POST'ом). man cgi ;)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.