Обрабатываем флажки (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
<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