Консультация № 55410
14.09.2006, 12:01
0.00 руб.
0 7 5
Расскажите, плиз, как в пхп работать с чекбоксами. Интереснее всего знать, как проверять, помечены они или нет. Заранее спасибо за ответы.

Обсуждение

Неизвестный
14.09.2006, 12:13
общий
это ответ
Здравствуйте, Romooseek!
Просто в теге указываете имя чекбокса, а после, при обработке PHP днлаете проверку:

<?

// Допустим, имя чекбокса -- "vodka", а метод - POST

if ($HTTP_POST_VARS[‘vodka‘] == true) // Если помечен
{echo ‘Водка пить -- земля валяться!‘;}
else // Если не помечен
{echo ‘Трава курить -- орёл летать!‘;};

?>
Неизвестный
14.09.2006, 12:15
общий
это ответ
Здравствуйте, Romooseek!
1. Для удобства работы желательно использовать ассоциированные массивы.
2. Основная особенность работы чекбоксо‘ов состоит в том, что если он не выбран, то НИКАКИХ данных по этому чекбоксу не передается. Что бы этого не присходило необходимо применять поле HIDDEN.

Пример рабочего кода приведен в приложении.



Приложение:
<?php ## Гарантированный прием значений от флажков.if (@$_REQUEST[‘doGo‘]) { foreach (@$_REQUEST[‘known‘] as $k=>$v) { if($v) echo "Вы знаете язык $k!
"; else echo "Вы не знаете языка $k.
"; }}?><form action="<?=$_SERVER[‘SCRIPT_NAME‘]?>" method=post>Какие языки программирования вы знаете?
<input type=hidden name="known[PHP]" value="0"> <input type=checkbox name="known[PHP]" value="1">PHP
<input type=hidden name="known[Perl]" value="0"> <input type=checkbox name="known[Perl]" value="1">Perl
<input type=submit name="doGo" value="Go!"></form>
Неизвестный
14.09.2006, 12:21
общий
это ответ
Здравствуйте, Romooseek!

У каждого checkbox‘а есть имя (name=‘imya‘) и значение (value=‘znach‘). Если checkbox помечен, то при отправке данных на сервер будет отправлена строка imya=znach (POST или GET методом, если поле value не указано, считается что оно равно ‘on‘), а если не помечен - ничего не отправится.

Так что достаточно проверить просто факт существования переменной с именем imya:
if (isset($_REQUEST[‘imya‘])) {
...//checkbox помечен
}
Неизвестный
14.09.2006, 12:21
общий
это ответ
Здравствуйте, Romooseek!
Чекбокс - это то что Вы видите. на самом деле он такой же input как текстовое поле или radiobutton тоесть он имеет name="SomeName" и value="SomeValue" . Для PHP это значит что при отмеченом чекбоксе в отправленых данных будет установлена переменная $SomeName (в php3. в php4 и выше при настройке register_globals=On) или $_REQUEST["SomeName"] (в php4 и выше - всегда, независимо от register_globals). Значение этой переменной, естественно, будет SomeValue .
Если чекбоксов много и/или заранее неизвестно сколько, то их называют так: name="SomeName[]" и разные value. Тоесть PHP получит переменную-массив. Если нескольким чекбоксам дать одно имя, но не в виде массива (без []) то PHP получит только последнее значение.
Неизвестный
14.09.2006, 12:52
общий
воспользовался способом if (isset($_REQUEST[‘imya‘]))возникла проблема: имеется неограниченное число чекбоксов, а на перебор в цикле по $j пишет глюк:if (isset($_REQUEST[‘name$j‘])) {
Неизвестный
14.09.2006, 12:54
общий
что мне теперь делать?
Неизвестный
14.09.2006, 14:18
общий
это ответ
Здравствуйте, Romooseek!
Я бы предложил такой вариант.

Приложение:
<form><input type=checkbox name="check[0]" value="0"> 0
<input type=checkbox name="check[1]" value="1"> 1
<input type=checkbox name="check[2]" value="2"> 2
<input type=checkbox name="check[3]" value="3"> 3
<input type=submit></form><?phpif (is_array($_REQUEST[‘check‘])) foreach($_REQUEST[‘check‘] as $key => $value) echo "Checkbox[".$key."] == ".$value."
";?>
Форма ответа