PHP:使用每行的复选框值更新数据库

PHP: Update database with checkbox values for each row

我目前正在努力显示一个包含警报列表的 table,其中每一行都包含一个复选框,用于确定用户是否已查看该警报。这是 an image:

到目前为止,我设法 check/uncheck 给定复选框在数据库中的状态。我想做的,但不知道如何做,允许用户 check/uncheck 一个复选框并立即用这个新状态更新数据库,而无需按下提交按钮。我现在拥有的代码如下。

<div class="card-body table-responsive p-0">
  <form action=modules/alarms.php method="POST">
    <table class="table table-bordered table-hover">
      <thead>
        <tr>
          <th>ID</th>
          <th>Tipus</th>
          <th>Data</th>
          <th>Vista</th>
        </tr>
      </thead>
       <tbody> 
         <?php 
           foreach ($result->fetchAll() as $row){
             if ($row[4] == 1){
                 $status = "checked";
             }else{
                 $status = "";
             }
            echo 
             '<tr data-widget="expandable-table" aria-expanded="false">
                <td>'.$row[0].'</td> 
                <td>'.$row[1].'</td> 
                <td>'.$row[2].'</td>
                 <td><input type="checkbox" name="chk1[]" value="viewed" '.$status.'></td>
               </tr>
               <tr class="expandable-body">
                 <td colspan="5">
                    <p>
                      <video width="416" height="416" controls>
                       <!-- el 42 es la cabecera C:/... fins videos-->
                       <source src="'.substr($row[3], 42).'" type="video/mp4">
                       Your browser does not support the video tag.
                      </video>
                     </p>
                  </td>
                </tr>';
                      }                      
       ?>                                                                         
  </tbody>
</table>

还有我的 PHP 代码(我没有更新数据库值的代码,但我会弄清楚的。我想知道如何检索值每行的复选框及其 ID,以便我可以在数据库中更新它。

$ei = $_POST['chk1'];
if ($_POST["chk1"] == "chk1") {
    for ($i = 0; $i < sizeof($checkbox1); $i++) {
        print_r($checkboxl[$i]);
    }
}

为了解决这个问题,首先我必须在复选框输入中添加一些字段。通过这些更改,table 生成如下:

<tr data-widget="expandable-table" aria-expanded="false">
    <td>'.$row[0].'</td> 
    <td>'.$row[1].'</td> 
    <td>'.$row[2].'</td>
    <td><input type="checkbox" name="id" id="viewed" value="'.$row[0].'" '.$status.'></td>
</tr>

完成后,只需添加一个脚本,该脚本将从单击的复选框中检索值并将它们传递给必要的 PHP 函数:

$("input").change(function() {
if ($(this).is(':checked')){
  var viewed=1;
}else{
  var viewed = 0;
}
var id = $(this).val();

$.ajax({
         url:"modules/alarms.php",
         method:"POST",
         data:{viewed:viewed,id:id,},
         success: function(data){
        },
   });

请注意'url'字段是我们PHP函数实现的相对路径。

现在,只需使用复选框值(我正在使用 PDO 对象)更新数据库,如下所示:

    <?php 
  if(isset($_POST["viewed"])) {
    $id = $_POST["id"];
    $viewed = $_POST["viewed"];

    $sql="UPDATE `alarms` SET `viewed` = '$viewed' WHERE (`id` = '$id')";
    if($connection->query($sql) === TRUE){
      echo "Success";
      } else {
        echo "error" . $sql . "<br>".$connection->error;
      }}?>