0

以下のコードは 1 つのチェックボックスでのみ機能し、残りは無視します。選択したチェックボックスを削除する方法はありますか? 私は使ってみ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();}

?>
4

1 に答える 1

3

チェックボックスに配列スタイルの名前を付けます。

<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 (...)が、要素数がわからないため、これではパラメーター置換を行うことができません。したがって、ループはそれを行うための最良の方法です。

于 2013-08-16T23:34:01.123 に答える