checkbox无法取消选中php

ef1yzkbh  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(485)

我已经编写了一个代码,将复选框的复选值保存到数据库中。
检查条件工作正常,因为检查值在提交时保存到数据库,并且在提交和刷新时保持检查状态。
但是当它取消选中并提交然后刷新页面时,复选框仍然保持选中状态。它不会保存未选中的状态。
我包含了一个与此问题相关的块代码。如果有人能得到这个问题那就太好了。

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

      ?>

将值插入数据库:

if(isset($_POST['submit']))
    {
        $checkbox = $_POST["check_list"];
        $job_number = $_POST["job_number"];
        $batch_no = $_POST["batch_no"];
        date_default_timezone_set('Australia');
        $date_time = date("Y-m-d h:i:sa");
        //$username = "$SESSION[userid]";
        if($job_number["result"] == "true"){

 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();
                    }
        }

    else{

        if(!empty($_POST['check_list'])) 

        {
                        $checkboxes = implode(",",$_POST['check_list']);
                        $stmt = $link->prepare('INSERT INTO time_stamps (nJobNumber,time_date,username,batch_no,check_list) VALUES (?,?,?,?,?)');
                        $stmt->bind_param('issss',$job_number["number"],$date_time,$username,$batch_no,$checkboxes);
                        $stmt->execute();
                    }
                }

            }

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

pnwntuvh

pnwntuvh1#

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

$job_number = $_POST["job_number"];

但我看到你用这个:

if($job_number["result"] == "true"){

所以我问,$job\u number是数组还是字符串/值?
此外,未选中的复选框不会提交值。而且,由于您测试了一个非空的$\u post['check\u list']值,因此您的更新将永远不会运行。拆下!性格。

35g0bw71

35g0bw712#

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

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的支持。

相关问题