Я заметил, что PHP, кажется, возвращает только значения проверенных флажков. Я хотел бы видеть список флажков, не только значения проверенных флажков. Существует ли способ обнаружить переменные снятых флажков?
Я спросил, потому что я хочу быть в состоянии к настройкам обновления. Например, у меня есть несколько опций, которые уже проверяются, но если пользователь решает снять флажок с опцией, я должен знать, что неконтролируемое значение, таким образом, я могу обновить опцию, которая будет отключена.
Я только что сам столкнулся с этой проблемой. Я решил ее, добавив дубликат - скрытое
поле с тем же именем. Когда браузер посылает эту информацию, второе поле перекрывает первое (так что убедитесь, что поле hidden
идет первым).
<input type="hidden" name="foo" value="">
<input type="checkbox" name="foo" value="bar">
Если не установлен флажок -
$_REQUEST[ 'foo' ] == ""
Если установлен флажок -
-
$_REQUEST[ 'foo' ] == "bar"
Это не то, что может быть сделано только в PHP.
Браузеры посылают информацию о флажках только в том случае, если они отмечены, если вы также хотите посылать информацию о не отмеченных флажках, вам придется добавить скрытые поля в форму и использовать javascript для управления ими.[11455]
Чистая реализация PHP не кажется возможной, но можно попробовать использовать jQuery/AJAX.
.Предположим, что у вас есть 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.
.Я сам наткнулся на эту проблему и отсортировал ее, обновив все значения в базе данных до снятых флажков, а затем повторно проверив только те, которые есть в данных POST, это отлично работает для меня, но может быть чашкой чая не для всех.