Mikel Max
Mikel Max

Reputation: 185

multiple checkbox post form

The below code will only work with one checkbox and ignores the rest. Is there any way that I can have it to delete selected checkboxes? I have tried using implode but it gives me

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

?>

Upvotes: 0

Views: 771

Answers (1)

Barmar
Barmar

Reputation: 780869

Give the checkbox an array-style name:

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

This will cause $_POST['id'] to be an array of all the checked values. Then delete them in a loop:

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

You can't use a comma-separated list of IDs with =. You can use it with id in (...), but you can't do parameter substitution with this because the number of elements isn't known. So the loop is th best way to do it.

Upvotes: 3

Related Questions