Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Очередной вопрос по PHP   Найти похожие ветки 

 
LexxX ©   (2006-05-31 20:08) [0]

Мне необходимо организовать в ПХП обработку множественного выбора на веб-форме.
Выбор организую при помощи тега <select multiply>.
Поиск в яндексе дал несколько битых ссылок. :((

Не подскажите как можно реализовать обработку множественного выбора на ПХП?


 
fedotawa   (2006-05-31 20:22) [1]

Цитата из учебника Котерова

Трансляция списков

Механизм трансляции полей формы в PHP работает приемлемо, когда среди них нет
полей с одинаковыми именами. Если же таковые встречаются, то в переменную, яс-
ное дело, записываются только данные последнего встретившегося поля. Это доволь-
но-таки неудобно при работе, например, со списком множественного выбора
<select multiple>:
<select name=Sel multiple>
<option>First
<option>Second
<option>Third
</select>
В таком списке вы можете выбрать (подсветить) не одну, а сразу несколько строчек,
используя клавишу <Ctrl> и щелкая по ним кнопкой мыши. Пусть мы выбрали First
и Third. Тогда после отправки формы сценарию придет строка параметров
Sel=First&Sel=Third, и в переменной $Sel окажется, конечно, только Third.
Значит ли это, что первый пункт потерялся и механизм трансляции в PHP работает
некорректно? Оказывается, нет, и для решения подобных проблем в PHP предусмот-
рена возможность давать имена полям формы в виде имени массива с индексами:
<select name="Sel[]" multiple>
<option>First
<option>Second
<option>Third
</select>
Теперь сценарию придет строка Sel[]=First&Sel[]=Third, интерпретатор обна-
ружит, что мы хотим создать "автомассив" (то есть массив, который не содержит
пропусков, и у которого индексация начинается с нуля), и, действительно, создаст
переменную $Sel типа массив, содержимое которого следующее:
array(0=>"First", 1=>"Third").


<offtop>
А как листинги оформлять? ^_^
</offtop>


 
palva ©   (2006-05-31 20:23) [2]

Может быть не multiply а multiple?


 
LexxX ©   (2006-05-31 20:30) [3]

Всё, нашел ответ на сайте http://www.onlinetools.org/tricks/using_multiple_select.php


HTML
<form action="<?=$_SERVER["PHP_SELF"]?>" method="post">
<select name="test[]" multiple="multiple">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
<option value="four">four</option>
<option value="five">five</option>
</select>
<input type="submit" value="Send" />
</form>



PHP
<?php
$test=$_POST["test"];
if ($test){
foreach ($test as $t){echo "You selected ",$t,"<br />";}
}
?>


 
LexxX ©   (2006-05-31 20:31) [4]

fedotawa   (31.05.06 20:22) [1]

Спасибо!


 
palva ©   (2006-05-31 20:38) [5]

fedotawa   (31.05.06 20:22) [1]
Фигасе люди пишут! Неужели такое может работать?


 
fedotawa   (2006-05-31 21:05) [6]

palva ©   (31.05.06 20:38) [5]

А что не так? )


 
palva ©   (2006-05-31 21:58) [7]

> А что не так? )
...и в переменной $Sel окажется, конечно, только Third.
Вот ЭТО вызвало у меня недоверие. Я полагал, что в переменной $Sel окажется массив из двух элементов. У меня нет возможности сейчас это проверить, но ответ найденный LexxX ©   (31.05.06 20:30) [3] основан именно на этой гипотезе. Но больше всего меня удивила возможность заполнение автомассива прямо из переменных формы. Сейчас я нашел это место у Котерова "и не могу, читаю до конца" (c) Высоцкий.

Век живи, век учись. (Дураком помрешь.)


 
McSimm ©   (2006-05-31 23:25) [8]


> Вот ЭТО вызвало у меня недоверие.

напрасно. Максимум к чему можно придраться - из спецификации не совсем ясно какое именно из значений окажется в переменной.


> ответ найденный LexxX © основан именно на этой гипотезе.

внимательнее если посмотреть:

> name="test[]"


 
vidiv ©   (2006-06-01 01:43) [9]


> Максимум к чему можно придраться - из спецификации не совсем
> ясно какое именно из значений окажется в переменной.

в смысле?


 
palva ©   (2006-06-01 09:01) [10]

>внимательнее если посмотреть:
>> name="test[]"

И в самом деле.


 
McSimm_   (2006-06-01 10:42) [11]


> в смысле?

Да, неважно. И смысла особого нет, это просто если уж вдруг захочется придраться. :)

Очередность обработки внешних данных и заполнения аутсайд-переменных в документации обойдена, полагаться на "очевидность" или контрольную проверку - привычка весьма чреватая, об эту привычку совсем недолго и обжечься, поэтому фразу
> ...и в переменной $Sel окажется, конечно, только Third.
строго говоря правильнее было бы заменить на
> ...и в переменной $Sel окажется, конечно, только одно из значений.



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1148115679
Freeon
2006-05-20 13:01
2006.06.25
Обратная матрица 4х4, Det=1 (определитель)


2-1149689900
AlexeyT
2006-06-07 18:18
2006.06.25
Сделать выделение прямоугольника мышью


4-1143489021
FunkyByte
2006-03-27 23:50
2006.06.25
Рихтер ошибся?


4-1143196595
Тфьу
2006-03-24 13:36
2006.06.25
Как запретить стандартную прокрутку от колеса мыши?


1-1147871820
Damager
2006-05-17 17:17
2006.06.25
MDI формы