Вы можете авторизоваться через ВКонтакте, Фейсбук и оставить комментарий


Как получить не отмеченные чекбоксы

Вступление

Отправляя данные HTML-формы на сервер, иногда необходимо знать какие чекбоксы были отмечены, а какие нет.

Всем верстальщикам известно — не отмеченные чекбоксы, не отправляются через форму. К примеру, незаполненное текстовое поле будет отправлено, просто значение будет пустым. Отмеченный чекбокс вернет значение "On", а если задан атрибут "value", то значение этого атрибута, не отмеченный чекбокс отправлен не будет.

Иногда встает задача знать, был чекбокс отмечен или нет.

Пример

в СУБД есть таблица — товары (goods), в которой есть поле пометить на удаление (markdelete), которое принимает 2 значения: 0 — если товар не помечен на удаление, 1 — если помечен.

Задача

Вывести список товаров с возможностью каждый товар пометить на удаление, а так же снять пометку.

Решение

Напротив каждой записи вывести чекбокс, в названии которого будет храниться идентификатор (id) записи таблицы товаров (например: goods_1, goods_2, goods_258 и т.д.), после вывода списка сделать кнопку при нажатии на которую, не отмеченные чекбоксы будут восприниматься как 0, а отмеченные как 1.

Форма

1
2
3
4
5
6
7
8
<form method="post" action="checkboxes.php">
<input type="checkbox" name="good_1"> Мобильный телефон<br>
<input type="checkbox" name="good_2"> Телевизор<br>
<input type="checkbox" name="good_3"> Ноутбук<br>
<input type="checkbox" name="good_4"> Музыкальный центр<br>
<input type="checkbox" name="good_5"> Монитор<br>
<input type="submit" value="Сохранить">
</form>
Мобильный телефон
Телевизор
Ноутбук
Музыкальный центр
Монитор

Это стандартный вариант, в запросе будут посланы только отмеченные чекбоксы, и если, например уже отмеченные чекбокс мы захотим снять, то, мы не узнаем отмечен он или нет. А раз мы не можем узнать значение не отмеченного чекбокса, нам нужно использовать дополнительное поле для каждого чекбокса, которое может отправлять любые значения, даже пустые. Нам подойдет поле типа hidden ().

Решение при помощи hidden-поле

Нам потребуется соответствующее hidden-поле для каждого чекбокса, уникальный идентификатор для каждого hidden-поля и включенный javascript на стороне клиента. У всех чекбоксов можно смело убирать все атрибуты, кроме конечно type="checkbox".

При нажатии на чекбокс данные будут передаваться в соответствующее hidden-поле и устанавливать в нем значения: 1 — если чекбокс отмечен и 2 — если не отмечен. У каждого чекбокса необходимо добавить событие onclick="document.getElementById(HIDDEN_INPUT_ID).value = this.checked ? 1 : 0;".

Форма

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form method="post" action="checkboxes.php">
<input type="checkbox" onClick="document.getElementById('goods_1').value = this.checked ? 1 : 0;">
<input type="hidden" name="goods_1" id="goods_1" value="0"> Мобильный телефон<br>

<input type="checkbox" onClick="document.getElementById('goods_2').value = this.checked ? 1 : 0;">
<input type="hidden" name="goods_2" id="goods_2" value="0"> Телевизор<br>

<input type="checkbox" onClick="document.getElementById('goods_3').value = this.checked ? 1 : 0;">
<input type="hidden" name="goods_3" id="goods_3" value="0"> Ноутбук<br>

<input type="checkbox" onClick="document.getElementById('goods_4').value = this.checked ? 1 : 0;">
<input type="hidden" name="goods_4" id="goods_4" value="0"> Музыкальный центр<br>

<input type="checkbox" onClick="document.getElementById('goods_5').value = this.checked ? 1 : 0;">
<input type="hidden" name="goods_5" id="goods_5" value="0"> Монитор<br>
<input type="submit" value="Сохранить">
</form>
Мобильный телефон
Телевизор
Ноутбук
Музыкальный центр
Монитор

Результат

Как видно, внешний вид формы не изменился, зато при отправке данных формы, можно узнать отмечен чекбокс или нет, благодаря hidden-полю.

После отправки данных, обработать их очень легко. Как говорится главное данные получить, остальное дело техники.

Пример обработки данных на PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    foreach (
$_POST as $post_key => $post_value)
    {
        if (
preg_match('/^(goods_)([0-9]+)$/'$post_key$matches))
        {
            
$id $matches[2];
            echo 
'id: '.$id.' &mdash; '.$post_value.'<br>';
        }
    }
    
    echo 
'<hr>';
}

?>

Заключение

Единственный недостаток данного метода, у пользователя должен быть включен javascript, но сейчас его очень редко кто отключает.

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

Пример обработки данных на PHP

Опубликовано: 21 марта 2011  ·  Автор: Артём Фёдоров  ·  4383 просмотра

Категория

ГлавнаяПрограммированиеJavaScriptКак получить не отмеченные чекбоксы

Чтобы оставить комментарий нужно авторизоваться на сайте
или войти через ВКонтакте или Фейсбук

Войти через ФейсбукВойти через Твиттер

Комментарии

JavaScript, Программирование

© 2010-2017 expange.ru
При полном или частичном копировании статей сайта, ссылка на источник обязательна.

Хотите узнать больше информации, пишите на: artem@expange.ru

Полезное онлайн  ·  Новости  ·  Изображения  ·  Статьи по датам

О проекте  ·  Правила пользования  ·  Представительства

Благодарности и пожелания