Открыть меню    

Обрабатываем флажки (checkbox) формы при помощи PHP

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

Источник

Комментарии к статье

аватарка пользователя
2013-01-12
sht.

Спасибо, пригодилось ; )

аватарка пользователя
2013-03-02
Virtuoso

Thancs! That's useful!

аватарка пользователя
2013-03-02
Virtuoso

*Thanks )

аватарка пользователя
2013-03-13
VRS

Помогите разобраться, пожалуйста..
Есть код

<code>function search_pole() {

$tag_cloud = get_tags('exclude=12,15');
$html = ' &lt;div class="post_tags"&gt;';


if ($tag_cloud) {
$tdo_tag = '?tdo_tag=';
echo ' &lt;form action="'.$tdo_tag.'" class="form-horizontal form-search"&gt;
&lt;fieldset&gt;
&lt;div class="control-group"&gt;';

foreach ($tag_cloud as $tag) {

?&gt;


&lt;label class="checkbox"&gt; &lt;input id="item-published" type="checkbox" name="tdo_tag" value=" &lt;?php echo $tag-&gt;slug ?&gt;" onchange="this.form.action=this.name[this.checkboxedIndex].value; "&gt; &lt;?php echo $tag-&gt;name ?&gt; &lt;/label&gt;


&lt;?php
}
echo ' &lt;/div&gt;
&lt;div class="form-actions"&gt;
&lt;input class="btn btn-primary" type="submit" value="Отправить" /&gt;
&lt;/div&gt;
&lt;/fieldset&gt;
&lt;/form&gt;';


}



}</code>

Пробовала заменить name на tdo_tag[] и прописать metod=post как в вашем примере.. но у меня ничего не выдается в checkbox-form.php

а в идеале пытаюсь создать фильтры товара.. при выборе нескольких чекбоксов форма дает в адресной строке: адрес_сайта/?tdo_tag=akcia&amp;tdo_tag=hit и выводит записи только по одной - последней - метке, а нужно: адрес_сайта/?tdo_tag=akcia<strong>+</strong>hit

аватарка пользователя
2013-03-23
Гарик

<input type="checkbox" name="formWheelchair" value="Yes" /> работает только с одинарными ковычками)

аватарка пользователя
2013-05-12
Вячеслав

Зачем городить огород с функцией IsChecked?
Разве нельзя воспользоваться встроенной функцией PHP in_array()?

in_array($value, $_POST[$chkname]);

аватарка пользователя
2014-04-14
Ёжик

а как сделать форму, чтобы результат сразу выдавался в виде диаграмм

аватарка пользователя
2014-04-14
dnzl

а при чем здесь диаграммы?

аватарка пользователя
2014-04-23
macho

Пожалуйства напечатайте код action.php которая распечатает текст если установлен флажок... Я новичок поэтому должен разобраться и суть понять! (((

аватарка пользователя
2014-04-23
macho

Пожалуйства напечатайте код action.php которая распечатает текст если установлен флажок... Я новичок поэтому должен разобраться и суть понять! (((

аватарка пользователя
2014-05-03
Екатерина

Спасибо! Кратко, толково, с приммерами.

аватарка пользователя
2014-05-03
Екатерина

с примерами, опечатка вышла)

аватарка пользователя
2014-10-15
Чайник

Благодарствую! Добрый человек! Краткость - вежливость программеров!

аватарка пользователя
2015-03-19
KIKIMER

Всё бенч, спасибо!)

аватарка пользователя
2015-06-27
Верига Микола

Дуже дякую, з вашою допомогою розібрався :)

аватарка пользователя
2015-10-09
Виталий

Кто-нить подскажет? Почему при выводе массива в базу sql, он возвращает только первое значение?

аватарка пользователя
2015-11-08
Хуан

Спасибо за статью. Сразу же "починил" свои флажки.

аватарка пользователя
2017-01-27
Samson

А как проверят, выбран ли конкретный флажок с помощью JavaScript ?

аватарка пользователя
2017-01-27
dnzl



$('.myCheckbox').is(':checked');

аватарка пользователя
2017-06-24
Николай

Спасибо, все работает!

аватарка пользователя
2017-11-05
+

+

аватарка пользователя
2018-05-02
GoodShell (новичок)

Привет.
Задумал сделать форму на сайте для отправки сообщения по нескольким адресатам, сделал чекбоксы для выбора электронной почты, но что-то пошло не так...
По задумке, пользователь должен выбрать один, два или все адреса и отправить сообщение выбранным.

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: /');
?>

аватарка пользователя
2019-01-05
Сергей

Спасибо. Хорошая статья)

аватарка пользователя
2019-01-09
Руслан

Супер, помогло!

аватарка пользователя
2019-12-19
Anna

Здравствуйте. Скажите пожалуйста что будет если не прописать атрибут value для checkbox

аватарка пользователя
2020-08-26
1234

ntcn

адрес кракен в тор