В случае, когда на 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'){
.. некие действия
}

Недостатками этого подхода является:
  1. Ограниченная область использования;
  2. Код обработки получается большим и трудноподдерживаемым.

Преимущество:
  1. Быстрая реализация.

В случае, если у нас может быть неизвестное кол-во 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
.. некие действия
}
}
© 2006
P.S. Спасибо Распопиной Надежде за обнаруженный недочет.
08.02.08 добавлена проверка isset после сообщения от Андрея (см. Гостевую)
Последнее изменение: Четверг, 14 Июль 2011, 18:47