多复选框张贴表单



下面的代码将只处理一个复选框,而忽略其余复选框。有什么方法可以让它删除选中的复选框吗?我试过使用implode,但它给了我

Warning: implode(): Invalid arguments passed

  <form action="" method="post">
 <input type="checkbox" name="id"  class="check" value = "<?php echo $row['id']; ?>">
 <?php echo $row['to_user'];?>
  <input type="submit" name="delete">
 </form>

    <?php
 if (isset($_POST['delete'])) {
 $id =  $_POST['id']; 
 $ids = implode( ',', $id );
 $mydb = new mysqli('localhost', 'root', '', 'database');
 $stmt = $mydb->prepare("update messages set deleted = 'yes' where from_user = ?  and id = ? ");
 $stmt->bind_param('ss', $user, $ids);
 $stmt->execute();
echo "Message succesfully deleted";
exit();}
?>

给复选框一个数组样式名称:

<input type="checkbox" name="id[]"  class="check" value = "<?php echo $row['id']; ?>">

这将导致$_POST['id']是所有检查值的数组。然后在循环中删除它们:

$mydb = new mysqli('localhost', 'root', '', 'database');
$stmt = $mydb->prepare("update messages set deleted = 'yes' where from_user = ? and id = ?");
$stmt->bind_param('ss', $user, $id);
foreach ($_POST['id'] as $id) {
    $stmt->execute();
}

不能将ID的逗号分隔列表与=一起使用。您可以将它与id in (...)一起使用,但不能使用它进行参数替换,因为元素的数量未知。所以循环是最好的方法。

最新更新