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>

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

于 2012-11-24T16:15:16.303 回答
0

您可以使用以下函数完全在 PHP 中执行此检查:

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

像这样使用它

$_POST["blocked"] = cbToBool($_POST["blocked"]);
于 2020-09-17T12:37:28.663 回答