Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果提交表单时未选中复选框,如何将布尔值更新为0_Php_Html_Mysql_Forms_Checkbox - Fatal编程技术网

Php 如果提交表单时未选中复选框,如何将布尔值更新为0

Php 如果提交表单时未选中复选框,如何将布尔值更新为0,php,html,mysql,forms,checkbox,Php,Html,Mysql,Forms,Checkbox,我有一个游戏,用户在游戏结束后每次完成调查时都会将信息插入数据库,因此我会在网站中以表格形式显示这些信息,下面有一个提交按钮,因此当单击时,它会检查复选框和未选中框,并更新数据库中布尔值,但目前我可以检查复选框,但提交时未选中的复选框不会在数据库中更新 这是我的代码,用于在提交时检查取消选中和复选框 <?php include_once("dcConnect.php"); if(!empty( $_POST['myCheckBox'] )){ $strAl

我有一个游戏,用户在游戏结束后每次完成调查时都会将信息插入数据库,因此我会在网站中以表格形式显示这些信息,下面有一个提交按钮,因此当单击时,它会检查复选框和未选中框,并更新数据库中布尔值,但目前我可以检查复选框,但提交时未选中的复选框不会在数据库中更新

这是我的代码,用于在提交时检查取消选中和复选框

 <?php

    include_once("dcConnect.php");


    if(!empty( $_POST['myCheckBox'] )){

    $strAllUsernameCombined = implode("','", $_POST['myCheckBox']);
    $sql = "UPDATE dcUsers SET dcChecked = 1 WHERE dcID IN ('{$strAllUsernameCombined}')";

    mysqli_query($link, $sql) or exit("result_message=Error");

    } else {

     $strAllUsernameCombined = implode("','", $_POST['myCheckBox']);
     $sql = "UPDATE dcUsers SET dcChecked = 0 WHERE dcID IN ('{$strAllUsernameCombined}')";

    mysqli_query($link, $sql) or exit("result_message=Error");
    }

    ?>

如果未选中提交后的HTML复选框,则该复选框将丢失值。您需要在该复选框之前添加一个隐藏的输入

<input type='hidden' name='myCheckBox[0]' value='0'>

<input type='checkbox' id='". $row["dcID"] ."' name='myCheckBox[]' value='". $row["dcID"] ."'".(($row["dcChecked"]) ? 'checked="checked"':"")." >

可以使用隐藏的同名输入来注册未选中的框。将它们放在复选框之前,如果选中,将覆盖隐藏字段中的空值。或者,您可以对比两个数组,一个来自提问数组,另一个来自回答数组,并获得差异。我认为
为空($\u POST['myCheckBox'))
会返回true,无论复选框是否选中。感谢您的回复,mysql语句有什么我应该更改的吗?嘿,我在尝试代码警告后出现了这个错误:implode():在/home/forsto5/public\u html/default3.php中传递的参数无效。当复选框未选中时,布尔值仍然不会更改为0((但选中时更改为1。我的答案已更新。您是否使用上面新更新的答案重试?是..以及隐藏复选框。)
<input type='hidden' name='myCheckBox[0]' value='0'>

<input type='checkbox' id='". $row["dcID"] ."' name='myCheckBox[]' value='". $row["dcID"] ."'".(($row["dcChecked"]) ? 'checked="checked"':"")." >
<input type='hidden' name='myCheckbox[". $row['dcID'] ."]' value='0'>       
<input type='checkbox' name='myCheckBox[". $row['dcID'] ."]' 
    value='1'". ($row['dcChecked'] ? ' checked' : '') .">
if (isset($_POST['myCheckBox'])) {
    $yes = $no = array();
    foreach ($_POST['myCheckBox'] as $dcID => $dcChecked) {
        if ($dcChecked) {
            $yes[] = $dcID;
        } else {
            $no[]  = $dcID;
        }
    }
    if (count($yes)) {
        $sql = 'UPDATE dcUsers SET dcChecked = 1 WHERE dcID IN ('. implode(',', $yes) .')';
        mysqli_query($link, $sql) or exit("result_message=Error");
    }
    if (count($no)) {
        $sql = 'UPDATE dcUsers SET dcChecked = 0 WHERE dcID IN ('. implode(',', $no) .')';
        echo $sql; //delete this line after debugging
        mysqli_query($link, $sql) or exit("result_message=Error");
    }
}