web-dev-qa-db-ja.com

HTMLからPHPにチェックされていない場合でも、すべてのチェックボックス変数を取得するにはどうすればよいですか?

PHPは、チェックされたチェックボックスの値のみを返すようです。チェックされたチェックボックスの値だけでなく、チェックボックスのリストを表示したいのですが、チェックされていないボックスの変数を検出する方法はありますか?

設定を更新できるようにしたいので聞いてみました。たとえば、すでにチェックされているオプションがいくつかありますが、ユーザーがオプションのチェックを外すことを決定した場合、オプションを無効に更新できるように、チェックされていない値を知る必要があります。

24
netrox

私は自分でこの問題に遭遇しました。同じ名前の重複するhiddenフィールドを追加することで解決しました。ブラウザがこの情報を送信すると、2番目のフィールドが最初のフィールドを上書きします(したがって、hiddenフィールドが最初に来るようにしてください)。

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

checkboxがチェックされていない場合、次のようになります。

$_REQUEST[ 'foo' ] == ""

checkboxをチェックすると、次のようになります。

$_REQUEST[ 'foo' ] == "bar"
60
Peter Kovacs

これは、純粋にPHPで実行できるものではありません。

ブラウザは、チェックボックスがオンになっている場合にのみチェックボックスに関する情報を送信します。チェックボックスがオフになっている場合も情報を送信する場合は、フォームに非表示フィールドを追加し、JavaScriptを使用してそれらを管理する必要があります。

2
Ben S

私は自分でこの問題に遭遇し、データベース内のすべての値をオフに更新してから、POSTデータにあるものだけを再チェックすることでソートしました。これは私にとっては問題なく機能しますが、みんなのお茶ではありません。

1
R Brill

チェックするチェックボックスが3つあり、update_settingsが、チェックボックス名を最初の引数として、ブール値を2番目の引数(アクティブ化するかどうか)として取る関数の名前であるとします。

次のスニペットを取ります。

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

Althouth Peter Kovacs 解決策は機能しますが、issetを使用して変数を既に確認できるため、実用的ではないと思います。

0
GmonC

純粋なPHPの実装は不可能のようですが、jQuery/AJAXを使用してみることができます。

0
Alix Axel