Как я могу получить все флажки, даже если они не проверены с HTML на PHP?

Я заметил, что PHP, похоже, возвращает только значения отмеченных флажков. Я хотел бы видеть список флажков, а не только значения отмеченных флажков. Есть ли способ обнаружить переменные непроверенных полей?

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

Ответ 1

Я сам столкнулся с этой проблемой. Я решил это, добавив дублирующее поле hidden с тем же именем. Когда браузер отправляет эту информацию, второе поле переопределяет первое (поэтому убедитесь, что сначала поле hidden).

<input type="hidden" name="foo" value="">
<input type="checkbox" name="foo" value="bar">

Если флажок checkbox не установлен, вы получаете:

$_REQUEST[ 'foo' ] == ""

Если флажок checkbox установлен, вы получаете:

$_REQUEST[ 'foo' ] == "bar"

Ответ 2

Это не то, что может быть сделано исключительно на PHP.

Браузеры только отправляют информацию о флажках, если они отмечены, если вы хотите также отправить информацию о снятых флажках, вам нужно будет добавить скрытые поля в форму и использовать javascript для управления ими.

Ответ 3

Я просто наткнулся на эту проблему самостоятельно, и я ее отсортировал, обновив все значения в базе данных, чтобы не проверять, а затем перепроверить только те, которые находятся в данных POST, это отлично работает для меня, но может быть, не все чашки чая.

Ответ 4

Чистая реализация PHP не представляется возможной, но вы можете попробовать использовать jQuery/AJAX.

Ответ 5

Предположим, у вас есть 3 флажка, которые вы хотите проверить, а update_settings - это имя ваших функций, которые принимают имя флажка в качестве первого аргумента, а значение bool - как второе (активировать или нет).

Возьмите следующий фрагмент:

$checkboxes = array("checkbox1", "checkbox2", "checkbox3");
foreach($checkboxes as $checkbox){
    $checked = isset($_POST[$checkbox]);
    update_settings($checkbox, $checked);
}

Althouth Решение Peter Kovacs будет работать, я не думаю, что это практично, так как вы уже можете проверить свои переменные с помощью isset.