Як отримати не зазначені чекбокси

вступ

Відправляючи дані HTML-форми на сервер, іноді необхідно знати які чекбокси були відзначені, а які ні.

Всім верстальщикам відомо - не зазначені чекбокси, не надсилаються через форму. Наприклад, незаповнений текстове поле буде відправлено, просто значення буде порожнім. Зазначений чекбокс поверне значення "On", а якщо заданий атрибут "value", то значення цього атрибута, що не зазначений чекбокс відправлений не буде.

Іноді постає завдання знати, був чекбокс відзначений чи ні.

в СУБД є таблиця - товари (goods), в якій є поле помітити на видалення (markdelete), яке приймає 2 значення: 0 - якщо товар не позначений на видалення, 1 - якщо позначений.

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

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

Це стандартний варіант, в запиті будуть послані тільки відмічені чекбокси, і якщо, наприклад вже відмічені чекбокс ми захочемо зняти, то, ми не дізнаємося відзначений він чи ні. А раз ми не можемо дізнатися значення не зазначені чекбокса, нам потрібно використовувати додаткове поле для кожного чекбокса, яке може відправляти будь-які значення, навіть порожні. Нам підійде поле типу hidden ().

Рішення за допомогою hidden-поле

При натисканні на чекбокс дані будуть передаватися до відповідного hidden-поле і встановлювати в ньому значення: 1 - якщо чекбокс відзначений і 2 - якщо не зазначено. У кожного чекбокса необхідно додати подію.


телевізор


ноутбук


Музичний центр


монітор


Як видно, зовнішній вигляд форми не змінився, зате при відправці даних форми, можна дізнатися відзначений чекбокс чи ні, завдяки hidden-поля.

Після відправки даних, обробити їх дуже легко. Як то кажуть головне дані отримати, інша справа техніки.

Приклад обробки даних на 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. ' — '. $ Post_value. '
';
>
>

висновок

завантажити приклад