Обрабатываем флажки (checkbox) формы при помощи PHP
Это руководство познакомит вас с флажками (checkbox) HTML и научит обращаться с ними в PHP.
Форма из одного флажка
Давайте создадим простою форму с одним флажком (checkbox).
HTML
<form action="checkbox-form.php" method="post">
Вам нужен доступ в интернет?
<input type="checkbox" name="formWheelchair" value="Yes" />
<input type="submit" name="formSubmit" value="Submit" />
</form>
В PHP скрипте (файл checkbox-form.php) возможно прочитать значение поля посредством массива $_POST. Если $_POST['formWheelchair'] присвоено значение YES, то флажок в был выбран. Если флажок не выбран, то переменная $_POST['formWheelchair'] не установлена.
Вот пример обработки формы на PHP:
PHP
<?php
if(isset($_POST['formWheelchair']) &&
$_POST['formWheelchair'] == 'Yes')
{
echo "Требуется доступ.";
}
else
{
echo "Доступ не нужен.";
}
?>
Переменной $_POST['formWheelchair'] присвоено значение YES, так как значение атрибута value тега input равно «YES».
HTML
<form action="checkbox-form.php" method="post">
Атрибуту value вместо YES можно установить 1. Не забудьте ваш обновить ваш PHP код, соответственно установленным значениям.
Группа флажков
Нередко возникают ситуации, когда в форму необходимо вставить несколько флажков. Особенно в том случае, когда пользователю необходимо предоставить право выбора из нескольких вариантов. Это важно, так как, например, переключатель (radio) можно выбрать всего один.
Давайте составим форму, которая предоставит пользователю несколько вариантов выбора.
HTML
<form action="checkbox-form.php" method="post">
Выберите здания, которые необходимо посетить. <br />
<input type="checkbox" name="formDoor[]" value="A" />Acorn Building<br />
<input type="checkbox" name="formDoor[]" value="B" />Brown Hall<br />
<input type="checkbox" name="formDoor[]" value="C" />Carnegie Complex<br />
<input type="checkbox" name="formDoor[]" value="D" />Drake Commons<br />
<input type="checkbox" name="formDoor[]" value="E" />Elliot House
<input type="submit" name="formSubmit" value="Submit" />
</form>
Пожалуйста отметьте, что все флажки имеют одно имя (formDoor[ ]). Одно имя говорит о том, что все флажки связаны между собой. Квадратные скобки указывают на то, что все значения будут доступны из одного массива. То есть $_POST['formDoor'] не вернет строку, как в примере выше, вместо нее возвратится массив, содержащий значения флажков, которые были выбраны пользователем.
Например, если я отмечу все флажки, $_POST['formDoor'] вернет массив из {A,B,C,D,E}. В примере ниже мы получаем и отображаем все значения массива.
PHP
<?php
$aDoor = $_POST['formDoor'];
if(empty($aDoor))
{
echo("Вы ничего не выбрали.");
}
else
{
$N = count($aDoor);
echo("Вы выбрали $N здание(й): ");
for($i=0; $i < $N; $i++)
{
echo($aDoor[$i] . " ");
}
}
?>
Функция empty пригодится на тот случай, если пользователь ничего не выбрал. Если же массив не пустой, подсчитываем количество выбранных флажков при помощи функции count и выводим все значения при помощи цикла for.
Если выбран флажок 'Acorn Building', то массив будет содержать значение 'A'.
Проверяем, выбран ли конкретный флажок
Часто требуется проверить: выбран ли конкретный флажок. Для этого можно использовать следующую функцию:
PHP
function IsChecked($chkname,$value)
{
if(!empty($_POST[$chkname]))
{
foreach($_POST[$chkname] as $chkval)
{
if($chkval == $value)
{
return true;
}
}
}
return false;
}
Теперь достаточно просто вызвать функцию IsChecked (chkboxname,значение). Например:
PHP
if(IsChecked('formDoor','A'))
{
//do ...
}
Источник

Комментарии к статье
Спасибо, пригодилось ; )
Thancs! That's useful!
*Thanks )
Помогите разобраться, пожалуйста..
Есть код
<code>function search_pole() {
$tag_cloud = get_tags('exclude=12,15');
$html = ' <div class="post_tags">';
if ($tag_cloud) {
$tdo_tag = '?tdo_tag=';
echo ' <form action="'.$tdo_tag.'" class="form-horizontal form-search">
<fieldset>
<div class="control-group">';
foreach ($tag_cloud as $tag) {
?>
<label class="checkbox"> <input id="item-published" type="checkbox" name="tdo_tag" value=" <?php echo $tag->slug ?>" onchange="this.form.action=this.name[this.checkboxedIndex].value; "> <?php echo $tag->name ?> </label>
<?php
}
echo ' </div>
<div class="form-actions">
<input class="btn btn-primary" type="submit" value="Отправить" />
</div>
</fieldset>
</form>';
}
}</code>
Пробовала заменить name на tdo_tag[] и прописать metod=post как в вашем примере.. но у меня ничего не выдается в checkbox-form.php
а в идеале пытаюсь создать фильтры товара.. при выборе нескольких чекбоксов форма дает в адресной строке: адрес_сайта/?tdo_tag=akcia&tdo_tag=hit и выводит записи только по одной - последней - метке, а нужно: адрес_сайта/?tdo_tag=akcia<strong>+</strong>hit
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
<input type="checkbox" name="formWheelchair" value="Yes" /> работает только с одинарными ковычками)
Зачем городить огород с функцией IsChecked?
Разве нельзя воспользоваться встроенной функцией PHP in_array()?
in_array($value, $_POST[$chkname]);
а как сделать форму, чтобы результат сразу выдавался в виде диаграмм
а при чем здесь диаграммы?
Пожалуйства напечатайте код action.php которая распечатает текст если установлен флажок... Я новичок поэтому должен разобраться и суть понять! (((
Пожалуйства напечатайте код action.php которая распечатает текст если установлен флажок... Я новичок поэтому должен разобраться и суть понять! (((
Спасибо! Кратко, толково, с приммерами.
с примерами, опечатка вышла)
Благодарствую! Добрый человек! Краткость - вежливость программеров!
Всё бенч, спасибо!)
Дуже дякую, з вашою допомогою розібрався :)
Кто-нить подскажет? Почему при выводе массива в базу sql, он возвращает только первое значение?
Спасибо за статью. Сразу же "починил" свои флажки.
А как проверят, выбран ли конкретный флажок с помощью JavaScript ?
$('.myCheckbox').is(':checked');
Спасибо, все работает!
+
Привет.
Задумал сделать форму на сайте для отправки сообщения по нескольким адресатам, сделал чекбоксы для выбора электронной почты, но что-то пошло не так...
По задумке, пользователь должен выбрать один, два или все адреса и отправить сообщение выбранным.
file: index.html
-------
<form action="/sendemail.php" method="POST">
<label for="tema">Заголовок:</label>
<input maxlength="150" type="text" name="tema"/>
<label for="message">Текст:</label>
<input type="checkbox" name="emails[]" value="01"/> 01@email.ru
<input type="checkbox" name="emails[]" value="02"/> 02@email.ru
<input type="checkbox" name="emails[]" value="03"/> 03@email.ru
<textarea rows="15" cols="50" name="message"></textarea>
<button type="submit" class="input-btn">Отправить</button>
</form>
--------------------------
file: sendemail.php
-------
<?php
$tema = trim(strip_tags($_POST['tema']));
$message= htmlentities($_POST['message']);
if(isset($_POST['PERSONAL'])) ;
if(!empty($error)) echo '<b>'.$error.'</b>';
$subject = "$tema";
$to = implode(', ',$_POST['emails']);
$body = <<<HTML
<p>$tema</p>
<p>$message</p>
HTML;
$headers .= "Content-type: text/html\r\n";
$headers .= 'From: <info@site.ru>' . "\r\n";
mail($to, $subject, $body, $headers);
header('Location: /');
?>
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе
Спасибо. Хорошая статья)
Супер, помогло!
Здравствуйте. Скажите пожалуйста что будет если не прописать атрибут value для checkbox
ntcn