Обработка чекбоксов в PHP

В этой статье мы расскажем о input type checkbox HTML, и том, как они обрабатываются в PHP.

Одиночный чекбокс

Создадим простую форму с одним чекбоксом:

<form action="checkbox-form.php" method="post">
    Do you need wheelchair access?
    <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

if(isset($_POST['formWheelchair']) && 
   $_POST['formWheelchair'] == 'Yes') 
{
    echo "Need wheelchair access.";
}
else
{
    echo "Do not Need wheelchair access.";
}

?>

Для $_POST[‘formSubmit’] было установлено значение “Yes”, так как это значение задано в атрибуте чекбокса value:

<input type="checkbox" name="formWheelchair" value="Yes" />

Вместо “Yes” вы можете установить значение "1" или "on". Убедитесь, что код проверки в скрипте PHP также обновлен.

Группа че-боксов

Иногда нужно вывести в форме группу связанных PHP input type checkbox. Преимущество группы чекбоксов заключается в том, что пользователь может выбрать несколько вариантов. В отличие от радиокнопки, где из группы может быть выбран только один вариант.

Возьмем приведенный выше пример и на его основе предоставим пользователю список зданий:

<form action="checkbox-form.php" method="post">

Which buildings do you want access to?<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>

Обратите внимание, что input type checkbox имеют одно и то же имя (formDoor[]). И что каждое имя оканчивается на []. Используя одно имя, мы указываем на то, что чекбоксы связаны. С помощью [] мы указываем, что выбранные значения будут доступны для PHP скрипта в виде массива. То есть, $_POST[‘formDoor’] возвращает не одну строку, как в приведенном выше примере; вместо этого возвращается массив, состоящий из всех значений чекбоксов, которые были выбраны.

Например, если я выбрал все варианты, $_POST['formDoor'] будет представлять собой массив, состоящий из: {A, B, C, D, E}. Ниже приводится пример, как вывести значение массива:

<?php
  $aDoor = $_POST['formDoor'];
  if(empty($aDoor)) 
  {
    echo("Вы не выбрали ни одного здания.");
  } 
  else
  {
    $N = count($aDoor);

    echo("Вы выбрали $N здание(й): ");
    for($i=0; $i < $N; $i++)
    {
      echo($aDoor[$i] . " ");
    }
  }
?>

Если ни один из вариантов не выбран, $_POST['formDoor'] не будет задан, поэтому для проверки этого случая используйте "пустую" функцию. Если значение задано, то мы перебираем массив через цикл с помощью функции count(), которая возвращает размер массива и выводит здания, которые были выбраны.

Если флажок установлен для варианта "Acorn Building", то массив будет содержать значение 'A'. Аналогично, если выбран "Carnegie Complex", массив будет содержать C.

Проверка, выбран ли конкретный вариант

Часто требуется проверить, выбран ли какой-либо конкретный вариант из всех доступных элементов в группе HTML input type checkbox. Вот функция, которая осуществляет такую проверку:

function IsChecked($chkname,$value)
    {
        if(!empty($_POST[$chkname]))
        {
            foreach($_POST[$chkname] as $chkval)
            {
                if($chkval == $value)
                {
                    return true;
                }
            }
        }
        return false;
    }

Чтобы использовать ее, просто вызовите IsChecked (имя_чекбокса, значение). Например:

if(IsChecked('formDoor','A'))
{
//сделать что-то ...
}
//или использовать в расчете ...

$price += IsChecked('formDoor','A') ? 10 : 0;
$price += IsChecked('formDoor','B') ? 20 : 0;

Скачать пример кода

Скачать PHP код примера формы с PHP input type checkbox.

Комментарии

Оставьте свой комментарий
Михаил А.

function IsChecked($chkname, $value) {
if (isset($_POST[$chkname])) {
return (in_array($value, $_POST[$chkname])) ? true : false;
}
return false;
}

МШ
Михаил Ш.

Спасибо большое за статью. Маленькое замечание, скорее для читателей. Мне кажется, первый пример с одиночным чекбоксом не совсем корректно разбирает ситуацию. Если POST не получен, то даже, если чекбокс отмечен, будет выведено сообщение, как если бы чекбокс не был отмечен, а POST корректно дошел. В примере для понимания сути дела это неважно. В реальной программе надо, наверное, использовать два условных оператора.

V
Vlad

Спасибо за статью, помогла очень. Но хочу сделать одно замечание по поводу вашей адаптивной верстки. На старом смартфоне (у меня Nokia N73 с разрешением 320х240) примеры кода не отображаются корректно, они обрезаются. Текст самой статьи влазит в экран целиком, а коды - нет. Очень не приятно такое видеть, особенно когда что-то долго искал и наконец нашел, а тут такой облом.

Михей В.
Vlad

Купите себе телефон.