3

フォームには3つのチェックボックスがあり(変更可能になるのは3つだけです。3つだけの例です)、投稿時にphpでチェックされていないチェックボックスを検出したいと思います。これどうやってするの?

4

3 に答える 3

12

チェックされたチェックボックスのみが送信されます。そのため、送信されていないチェックボックスはすべてオフになっています。

于 2012-11-24T16:07:46.543 に答える
11

ガンボは正しい。ただし、回避策があり、それは次のとおりです。

<form action="" method="post">
    <input type="hidden" name="checkbox" value="0">
    <input type="checkbox" name="checkbox" value="1">
    <input type="submit">
</form>

つまり、たとえば、チェックボックスと同じ名前の非表示フィールドと、チェックされていない状態を表す値を設定0します。ただし、隠しフィールドをフォームのチェックボックスの前に置くことが重要です。それ以外の場合、チェックボックスがチェックされている場合、隠しフィールドの値は、バックエンドに投稿されたときにチェックボックスの値を上書きします。

これを追跡する別の方法は、可能なチェックボックスのリストをバックエンドに用意することです (たとえば、バックエンドのフォームにそのリストを入力することもできます)。次のようなものがあなたにアイデアを与えるはずです:

<?php

$checkboxes = array(
    array( 'label' => 'checkbox 1 label', 'unchecked' => '0', 'checked' => '1' ),
    array( 'label' => 'checkbox 2 label', 'unchecked' => '0', 'checked' => '1' ),
    array( 'label' => 'checkbox 3 label', 'unchecked' => '0', 'checked' => '1' )
);

if( strtolower( $_SERVER[ 'REQUEST_METHOD' ] ) == 'post' )
{
    foreach( $checkboxes as $key => $checkbox )
    {
        if( isset( $_POST[ 'checkbox' ][ $key ] ) && $_POST[ 'checkbox' ][ $key ] == $checkbox[ 'checked' ] )
        {
            echo $checkbox[ 'label' ] . ' is checked, so we use value: ' . $checkbox[ 'checked' ] . '<br>';
        }
        else
        {
            echo $checkbox[ 'label' ] . ' is not checked, so we use value: ' . $checkbox[ 'unchecked' ] . '<br>';
        }
    }
}
?>
<html>
<body>
<form action="" method="post">
    <?php foreach( $checkboxes as $key => $checkbox ): ?>
    <label><input type="checkbox" name="checkbox[<?php echo $key; ?>]" value="<?php echo $checkbox[ 'checked' ]; ?>"><?php echo $checkbox[ 'label' ]; ?></label><br>
    <?php endforeach; ?>
    <input type="submit">
</form>
</body>
</html>

... 1 つまたは 2 つのチェックボックスをオンにしてから、送信ボタンをクリックして何が起こるかを確認します。

于 2012-11-24T16:15:16.303 に答える