Как получить все переменные флажка, даже если не проверены с HTML на PHP? - PullRequest
24 голосов
/ 22 декабря 2009

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

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

Ответы [ 5 ]

60 голосов
/ 22 декабря 2009

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

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

Если checkbox не отмечен, вы получите:

$_REQUEST[ 'foo' ] == ""

Если отмечен checkbox, вы получите:

$_REQUEST[ 'foo' ] == "bar"
2 голосов
/ 22 декабря 2009

Это не то, что можно сделать чисто в PHP.

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

1 голос
/ 25 июня 2010

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

0 голосов
/ 22 декабря 2009

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

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

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

Althouth Питер Ковач решение, которое будет работать, я не думаю, что это практично, так как вы уже можете проверить свои переменные, используя isset.

0 голосов
/ 22 декабря 2009

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

...