24

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

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

4

5 に答える 5

63

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

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

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

$_REQUEST[ 'foo' ] == ""

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

$_REQUEST[ 'foo' ] == "bar"
于 2009-12-22T03:48:47.547 に答える
2

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

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

于 2009-12-22T03:40:44.227 に答える
1

私は自分でこの問題に出くわし、データベース内のすべての値を未チェックに更新してソートし、POST データにある値のみを再チェックしました。

于 2010-06-25T10:46:00.657 に答える
0

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

于 2009-12-22T03:40:38.297 に答える
0

チェックしたい 3 つのチェックボックスがあり、update_settings は、チェックボックス名を最初の引数として、bool 値を 2 番目の引数 (有効にするかどうか) とする関数の名前であるとします。

次のスニペットを見てください。

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

Peter Kovacsのソリューションは機能しますが、 isset を使用して変数を既に確認できるため、実用的ではないと思います。

于 2009-12-22T04:06:52.037 に答える