1
<input type="hidden" name="check_box_1" value="0" />
<input type="checkbox" name="check_box_1" value="1" />

これは正常に機能しますが、送信をクリックしてチェックボックスにチェックを入れると、非表示の値と元のチェックボックスの値の両方が php の $_POST 変数に渡されますが、これを回避できますか?

そこに非表示の値があるので、チェックされていないチェックボックスがチェックされているものと同様に $_POST 変数に渡されます。

4

6 に答える 6

2

より良いアプローチは、隠しフィールドを削除し、単純に PHP でチェックすることです。

if ($_POST['check_box_1']=='1') { /*Do something for ticked*/ }
else { /*Do something for unticked*/ }
于 2012-05-26T16:40:48.040 に答える
1

隠しフィールドは必要ありません。実際、最初に送信されたフォーム フィールドはどれも信頼すべきではありません。これが意味することは、送信されたフィールドを受け取り、それらが正しいデータを送信することを信頼するコードを作成できないということです(私はあなたが今そうしていると思います)。

あなたがしなければならないことは、取得することが期待されるすべてのフィールドを処理することです。そうすれば、チェックボックスの値を取得できない場合でも、チェックを外したかのように処理できます。次に、そもそも予期しないフォーム データを破棄するという追加の固有の機能も取得します。

于 2012-05-26T16:38:23.703 に答える
0

いいえ、それが何であれ、すべてのフォーム データを渡します。これを行う正しい方法は、隠しフィールドを介してチェックボックスを設定するのではなく、実際の状態をチェックボックスに設定することです!

つまり... なぜ隠しフィールドを追加するのですか?

あなたの PHP は check_box_1 という名前の 2 つのフィールドを受け取っています。最後に確認したとき、送信した順序とまったく同じ順序でパラメーターが REQUEST ハッシュに読み込まれることを保証する方法はありませんでした。最後に到着します(値が設定されるものです)。つまり...これは、ここで解決しようとしている問題に対する正しいアプローチではありません。

スタックへようこそ!回答が有用または役立つと思われる場合は、必ずそれらを正しいものとしてマークし、投票してください。

于 2012-05-26T16:37:48.587 に答える
0

それは正常です。

type="checkbox"1 つの値のみを渡すには、両方である必要があります。

いずれにせよ1つだけ取得したい場合は、次のことができます。

<input type="checkbox" style="display:none;" name="check_box_1" value="0">
于 2012-05-26T16:37:55.797 に答える
0

これまでのところ、コードはすべて正常に機能しています。

チェックボックスがチェックされていないときに0がサーバーに渡されるように、隠しフィールドを作成していると思います。問題は、チェックボックスをオンにすると両方とも合格になることです

死が言ったように、それを行うべき方法は、単一のチェックボックスを使用して、値がサーバーに送信されたかどうかを確認することです。それがチェックボックスの仕組みです。

デフォルトの設定が必要な場合は、チェックボックスの値に基づいて、サーバー側ですべてを処理する必要があります。

例えば:

$myValue = "";
if(isset($_POST['check_box_1']))
{
    $myValue=$_POST['check_box_1'];
}
else
{
    $myValue="0";
}
于 2012-05-26T20:53:06.903 に答える
0

最初の入力フィールドがチェックボックス型であることを確認してください。そうしないと、そのように動作しません。

<input type="checkbox" name="check_box_0" value="0" />
<input type="checkbox" name="check_box_1" value="1" />
于 2012-05-26T16:38:39.320 に答える