Как сохранить в checkbox два значения true и false

Выводим на сайте HTML форму checkbox и записываем в неё с помощью PHP значения истина или ложь. Проверяем пуст ли этот чекбокс и ставим галочку включенной или отключённой. Записывать данные будем в произвольное поле WordPress.

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

Пример формы на сайте, которую мы можем создать:

В примере она будет упрощена до одного чекбокса и кнопки отправить. Другие данные на скрине приведены лишь в качестве примера и в данной статье не нужны.

Для того чтобы записывать пустые значения в checkbox нужно выводить перед основной формой input почти точно такой же input, но скрытый и пустым значением value:

<input type="hidden" name="first_checkbox" value="" />
<input type="checkbox" name="first_checkbox" value="Yes" />

Если этого не сделать, то пустые значения (когда вы сняли галочку) обновляться не будут. Более того, в примере ниже, после очередного обновления страницы будет затираться значение истина.

Обычно в подобных примерах показывают, что form action="" содержит ссылку на файл, который будет обрабатывать нашу форму. Часто же это не пригождается. Вместо ссылки на файл оставляем пустое значение, а код для работы этой формы пишем следом за формой HTML.

Код для вывода формы HTML:

<form action="" method="post">

    <input type="hidden" name="first_checkbox" value="" />
    <input type="checkbox" name="first_checkbox" value="Yes" <?php
    if (cf('first_checkbox')) {
    echo 'checked';
    } ?> /> Принудительно обновить данные

    <br><br><input type="submit" name="submit" value="Применить" /><br><br>
</form>

Следующий за ним код будет обрабатывать нашу форму:

<?php

$post_id = $GLOBALS['post']->ID; // Нужна для работы переменной post_id

// Файл с данными
if(isset($_POST['first_checkbox']) &&
   $_POST['first_checkbox'] == 'Yes') {
    update_post_meta($post_id, 'first_checkbox', 1 );
}
else if(isset($_POST['first_checkbox']) &&
   $_POST['first_checkbox'] == '') {
    delete_post_meta($post_id, 'first_checkbox');
}

// Обновление страницы
if(isset($_POST['submit'])) {
    echo "<meta http-equiv='refresh' content='0'>";
}

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

Разбор кода подробнее

В форме HTML можно увидеть следующее:

<?php
    if (cf('first_checkbox')) {
    echo 'checked';
    } ?>

Это проверка на значение произвольного поля в WordPress. У меня для этого сделана отдельная функция. Этот участок кода вам нужно заменить самостоятельно, я оставил его для себя, чтобы сохранить оригинал кода. Без этой функции этот участок должен выглядеть так (меняете на него):

<?php if (get_post_meta($post->ID, 'first_checkbox', true))  {
    echo 'checked';
} ?>

Этим мы проверяем есть ли данные в произвольном поле first_checkbox. Если они там имеются мы ставим в HTML форму значение checked. Тем самым даём понять браузеру, чтобы он показал там галочку. Если данные пустые, то галочка стоять не будет.

Как проверить значения Checkbox

if(isset($_POST['first_checkbox']) &&
   $_POST['first_checkbox'] == 'Yes') {
    update_post_meta($post_id, 'first_checkbox', 1 );
}

Здесь мы проверяем Checkbox на Checked. Если галочка выставлена, то в нужное значение произвольного поля (в примере это first_checkbox) ставим цифру 1.

Как удалить значение в checkbox

else if(isset($_POST['first_checkbox']) &&
   $_POST['first_checkbox'] == '') {
    delete_post_meta($post_id, 'first_checkbox');
}

Наоборот, если галочки нет, то удаляем произвольное поле first_checkbox.

Очень важно в структуре else указать else if и конкретно значение произвольного поля, то что оно пустое.

Если этого не сделать, а сделать просто else без уточнения, то при обновлении страницы значение произвольного поля будут удаляться само по себе. Обработчик формы будет полагать, что вы поставили пустое значение в неё и обновили страницу. Когда на самом деле вы ничего такого не делали.

Как обновить страницу form action

В конце участка видим такой PHP:

// Обновление страницы
if(isset($_POST['submit'])) {
    echo "<meta http-equiv='refresh' content='0'>";
}

С помощью isset($_POST[‘submit’]) мы проверяем была ли нажата кнопка submit. Если да, то обновляем страницу.

Таким образом страница будет обновлена 2 раза. Первый раз когда мы отправим данные. Они запишутся в произвольные поля. Сразу после этого страница почти мгновенно обновится ещё раз и мы увидем, что на нужном свойстве установлена галочка checked.

English Query (запросы по теме на английском языке)

How to read if a checkbox is checked in PHP

Check if checkbox is checked based on value using PHP

How to refresh a php page on form submit

Checking to see if a checkbox is checked

How to automatically refresh the page after submitting a form

Привет. Ты находишься на моём сайте. Я разработчик. Здесь я делюсь своими наработками и знаниями. Спрашивай в комментариях, если тебе что-то не понятно или пиши, если есть что добавить.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи: "Как сохранить в checkbox два значения true и false".

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Если вам нужно добавить участок кода ставьте его между тегами <code></code>