Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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_Php_Mysql_Checkbox - Fatal编程技术网

复选框无法取消选中php

复选框无法取消选中php,php,mysql,checkbox,Php,Mysql,Checkbox,我已经编写了一个代码来将复选框的复选值保存到数据库中 检查条件工作正常,因为在提交时检查的值保存到数据库中,并且在提交和刷新时保持检查状态 但当取消选中并提交然后刷新页面时,复选框仍保持选中状态。它不会保存未选中的状态 我包含了一个与此问题相关的区块代码。如果有人能得到这个问题,那就太好了 echo "<form action='' class='' method='post'><tr>"; $sql_stamp = "SELECT check_list FROM

我已经编写了一个代码来将复选框的复选值保存到数据库中

检查条件工作正常,因为在提交时检查的值保存到数据库中,并且在提交和刷新时保持检查状态

但当取消选中并提交然后刷新页面时,复选框仍保持选中状态。它不会保存未选中的状态

我包含了一个与此问题相关的区块代码。如果有人能得到这个问题,那就太好了

echo "<form action='' class='' method='post'><tr>";
   $sql_stamp = "SELECT check_list FROM time_stamps WHERE nJobNumber=".$nJobNumber;
                $query_stamp = $conn->prepare($sql_stamp);
                $query_stamp->execute();
                $numRows = $query_stamp->rowCount(); 
                if($numRows > 0){
                    $row_stamp = $query_stamp->fetch(PDO::FETCH_ASSOC);
                    $checkboxes = explode(',',$row_stamp['check_list']);
                    echo ' <td><center> <input type="checkbox" name="check_list[]" value="shop_drawing" '.(in_array( "shop_drawing",$checkboxes) ? "checked=checked" : "").'></td>';
                    echo ' <td><center><input type="checkbox" name="check_list[]" value="site_measure" '.(in_array( "site_measure",$checkboxes) ? "checked=checked" : "").'></td>';
                    echo ' <td><center><input type="checkbox" name="check_list[]" value="shop_drawings_approved" '.(in_array( "shop_drawings_approved",$checkboxes) ? "checked =checked" : "").'></td>';
                    echo '<td><center> <input type="checkbox" name="check_list[]" id="check" value="batch" '.(in_array( "batch",$checkboxes) ? "checked=checked" : "").'></td>';
                    echo '<td><center> <input type="text" name="batch_no"><br>  </td>';
                    echo ' <td><center> <input type="submit" name="submit" value="Submit"/> </td>';
                    echo '<td><input type="hidden" name="job_number[result]" value="'."true".'"</td>'; 
                    echo '<td><input type="hidden" name="job_number[number]" value="'.$nJobNumber.'"</td>';
                }else{
                    echo '<td><center><input type="checkbox" name="check_list[]" id="check" value="shop_drawing"></td>';
                    echo '<td><center><input type="checkbox" name="check_list[]" id="check" value="site_measure"></td>';
                    echo '<td><center><input type="checkbox" name="check_list[]" id="check" value="shop_drawings_approved"> </td>';
                    echo '<td><center> <input type="checkbox" name="check_list[]" id="check" value="batch"></td>';
                    echo '<td><center> <input type="text" name="batch_no"><br>  </td>';
                    echo "<td><center> <input type='submit' name='submit' value='submit'></td>";
                    echo '<td><input type="hidden" name="job_number[result]" value="'."false".'"</td>'; 
                    echo '<td><input type="hidden" name="job_number[number]" value="'.$nJobNumber.'"</td>'; 
                }


                echo "</tr> </form>";
            }
        echo "</tbody> </table>";

      ?>

基本上,我的要求是当用户取消选中“已选中”复选框时,在提交表单时(刷新后)应取消选中该复选框。但在我的情况下,它一直处于检查状态。

我想我看到了一些问题。我看到这一行:

$job_number = $_POST["job_number"];
但我看到你用了这个:

if($job_number["result"] == "true"){
我问,$job_number是数组还是字符串/值


此外,未选中的复选框不会提交值。而且,由于您测试的是一个非空的$\u POST['check\u list']值,因此您的更新将永远不会运行。拆下!字符。

如果用户提交表单时未选中复选框,则两个查询都不会执行。虽然这对于您的
INSERT
查询来说是可以的,但它不允许更新
检查列表
字段。因此,您需要更改以下更新的代码:

if(!empty($_POST['check_list'])) {
    $checkboxes = implode(",",$_POST['check_list']);
    $stmt = $link->prepare('UPDATE time_stamps SET time_date=?,username=?, batch_no=?,check_list=? WHERE nJobNumber=?');
    $stmt->bind_param('ssssi',$date_time,$username,$batch_no,$checkboxes,$job_number["number"]);
    $stmt->execute();
}
为此:

$checkboxes = empty($_POST['check_list']) ? '' : implode(",",$_POST['check_list']);
$stmt = $link->prepare('UPDATE time_stamps SET time_date=?,username=?, batch_no=?,check_list=? WHERE nJobNumber=?');
$stmt->bind_param('ssssi',$date_time,$username,$batch_no,$checkboxes,$job_number["number"]);
$stmt->execute();
如果要插入记录,即使用户未选中任何复选框,也可能需要以相同的方式更改插入代码


感谢@Phil的输入。

您的更新和/或插入失败,您应该使用正确的错误处理来检查原因。您似乎没有任何位置的
标记,并且
不是
的有效子项(您的子项似乎基于
)。如果希望提交值,则需要使用该元素触发
submit
按钮(或使用一些AJAX)。未选中的复选框不会提交表单负载中的任何数据。如果您不选中任何复选框,
$\u POST['check\u list']
将为空,您的
插入
更新
查询都不会执行。@Nick我认为这是正确的,但OP需要确保传递给
内爆()
的任何内容都是正确的array@Phil你完全正确。。。该行应该重写
$checkbox=空($\u POST['check\u list'])?“”:内爆(“,,$”POST[“检查列表])
$job\u number
是从
name=“job\u number[result]”和
name=“job\u number[number]”删除的数组!字符表示查询不会运行,因为用户没有检查任何复选框。空测试是需要取消的。如果没有选中复选框,数组将为空。Hello@Nick当我如您所述更改代码时,复选框“checked”条件不起作用。现在取消选中的条件工作正常。我更新了问题,你介意看一下吗?嗨,马特,你也需要更改
$复选框的赋值。你这样做了吗?不用担心。很高兴你把它整理好了。
$checkboxes = empty($_POST['check_list']) ? '' : implode(",",$_POST['check_list']);
$stmt = $link->prepare('UPDATE time_stamps SET time_date=?,username=?, batch_no=?,check_list=? WHERE nJobNumber=?');
$stmt->bind_param('ssssi',$date_time,$username,$batch_no,$checkboxes,$job_number["number"]);
$stmt->execute();