如何用php检测未选中的复选框?

时间:2012-11-24 16:04:22

标签: php checkbox

我的表单中有3个(我不知道有多少可以更改。只有3个例子)复选框,我希望在发布时检测未经检查的复选框。我怎么能这样做?

3 个答案:

答案 0 :(得分:8)

Only checked checkboxes are submitted.因此,未提交任何未提交的复选框。

答案 1 :(得分:5)

Gumbo is right。然而,有一个解决方法,具体如下:

<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>

...选中一个或两个复选框,然后点击提交按钮,看看会发生什么。

答案 2 :(得分:0)

您可以使用以下功能完全在PHP中进行此检查:

function cbToBool($cb = true) {
    if (isset($cb)) {
        return true;
    } else {
        return false;
    }
}

像这样使用它

$_POST["blocked"] = cbToBool($_POST["blocked"]);