通过Checkboxes PHP循环

Ale*_*tro -1 php checkbox loops

我想插入一个复选框是否正在选择MySQL,只需在与该值对应的列中添加1或0即可.我遇到了0的问题,详情如下.

以下是复选框的示例

<input type='checkbox' name='class[]' value='mathhl' id="mathhl">
Run Code Online (Sandbox Code Playgroud)

为简单起见,我加了这个

$classes = $_POST["class"];
Run Code Online (Sandbox Code Playgroud)

这是检查复选框值的foreach循环.

foreach($classes as $value) {
    if (!isset($value)) {
        $value = 0;
    }
    else {
        $value = 1;
    }
    echo $value;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它只返回1,但不返回0!我是PHP的新手,所以我想知道我到底哪里出错了,谢谢!

nic*_*ckb 5

只有选中的复选框才会发送到服务器.因此,如果数组中不存在该值,那是因为未选中该框.

您可以通过将值设置为数组中的键来简化逻辑:

<input type='checkbox' name='class[mathhl]' value='1' id="mathhl">
Run Code Online (Sandbox Code Playgroud)

现在,您不必循环$_POST['class'].相反,您可以获取所有键的数组(您应该已经知道):

$keys = array( 'mathh1', 'mathh2', 'mathh3');
Run Code Online (Sandbox Code Playgroud)

并使用默认值(比如0)形成一个数组:

$defaults = array_combine( $keys, array_fill( 0, count( $keys), 0));
Run Code Online (Sandbox Code Playgroud)

并将$_POST数组与默认数组合并:

$results = array_merge( $defaults, $_POST['class']);
Run Code Online (Sandbox Code Playgroud)

现在,$results将包含一个关联数组,其中键是列,值是1或0,具体取决于是否选中了复选框.要小心,因为有人可以发布他们想要的帖子和数据$_POST,所以它可能不只是1和0.