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

Admin HTML, PHP, WordPress

Выводим на сайте 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"