В случае, когда на HTML-форме, требуется вывести несколько checkbox-ов, которые должны предоставлять пользователю несколько вариантов выбора, либо комбинации значений, возникает проблема обработки этих значений в дальнейшем на PHP.
Пример формы:
Иванов | |
Петров | |
Сидоров | |
Семенов |
Тут возможно следующее решение: дать каждому checkbox-у разные имена, а затем обрабатывать эти имена. Например: check_a, check_b, check_c.
<INPUT TYPE="checkbox" NAME="check_a"> <INPUT TYPE="checkbox" NAME="check_b"> <INPUT TYPE="checkbox" NAME="check_c"> |
Затем обрабатывать их следующим образом:
import_request_variables("gP", "in_"); if($in_check_a == 'on'){ .. некие действия } if($in_check_b == 'on'){ .. некие действия } if($in_check_c == 'on'){ .. некие действия } |
Недостатками этого подхода является:
- Ограниченная область использования;
- Код обработки получается большим и трудноподдерживаемым.
Преимущество:
- Быстрая реализация.
В случае, если у нас может быть неизвестное кол-во checkbox-ов зачастую применяют следующий вариант решения:
<INPUT TYPE="checkbox" NAME="check_1"> <INPUT TYPE="checkbox" NAME="check_2"> <INPUT TYPE="checkbox" NAME="check_3"> |
Затем обрабатывать их следующим образом:
for($i = 1; $i <= 3; $i++) { if(isset($_POST["check_".$i]) && $_POST["check_".$i] == 'on') { .. некие действия } } |
Более правильным и универсальным будет следующее решение:
<INPUT TYPE="checkbox" NAME="check[1]"> <INPUT TYPE="checkbox" NAME="check[2]"> <INPUT TYPE="checkbox" NAME="check[3]"> |
Затем обрабатывать их следующим образом:
import_request_variables("gP", "in_"); while(list($id,$value) = @each($in_check)){ if($id > 0 && $value == 'on'){ .. некие действия } } |
Что же касается SELECT – для выбора множества значений в SELECT-ах следует описать в форме SELECT так:
<select name="check[]" multiply> <option value="1">первый</option> <option value="2">второй</option> .... </select> |
Затем обрабатывать следующим образом:
import_request_variables("gP", "_in"); while(list($id,$value) = @each($in_check)){ if($id > 0){ .. в $value будет одно из выбранных значений в SELECT .. некие действия } } |
P.S. Спасибо Распопиной Надежде за обнаруженный недочет.
08.02.08 добавлена проверка isset после сообщения от Андрея (см. Гостевую)
Last modified: Thursday, 14 July 2011, 6:47 PM