Как я могу получить все флажки, даже если они не проверены с 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.