В случае, когда на 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