Avatar billede eDesigner Nybegynder
27. april 2011 - 14:59 Der er 5 kommentarer og
1 løsning

Slette flere records med checkbox

Hej eksperter!

Jeg har forsøgt mig at lave et script som skulle gøre sådan at jeg kan slette flere records i databasen ad gangen ved hjælp at checkboxe.

Men jeg er gået istå og kan ikke rigtig hitte ud af hvad der er fejl med min kode:



include('includes/connect.php');
$sql = "SELECT * FROM p_portfolio";
$sqlQuery = mysqli_query($connect, $sql) or die (mysqli_error($connect));



<form name="form1" method="post" action="<?php echo $qString; ?>">
<table>

<?php
while($dbFetch = mysqli_fetch_array($sqlQuery)){
  echo '<tr class="table_border">
        <td align="center"><input name="checkbox[]" type="checkbox" id="checkbox" value="'.$dbFetch['id'].'"></td>
        <td>'.$dbFetch['p_overskrift'].'</td>
        <td>'.$dbFetch['p_kategori'].'</td>
        <td>'.$dbFetch['p_dato'].'</td>
        <td align="center">'; ?> <?php if($dbFetch['p_online'] == 1) { echo '<img src="images/online.gif"';}else{ echo '<img src="images/offline.png"';} ?>
<?php echo '</td></tr>';
}
?>

<input name="delete" type="submit" id="delete" value=" " class="slet_knap">
</table>   

<?php


if (isset($_POST['delete'])){
  if (isset($_POST['checkbox'])){
      $checkbox = $_POST['checkbox'];
      if (is_array($checkbox)) {
          foreach ($checkbox as $key => $dbFetch['id']){
              $sql = "DELETE FROM p_portfolio WHERE id=".$dbFetch['id'];
              $sqlQuery = mysqli_query($connect, $sql);
               
      }
      }
  }
}

mysqli_close($connect);

?>




Håber det giver mening?!

Når jeg forsøger at slette 1 eller flere, sker der intet.. ingen fejl eller noget og dataerne er stadig i databasen.
Avatar billede phillips Nybegynder
27. april 2011 - 15:06 #1
Umiddelbart:

foreach ($checkbox as $key => $value ){
  $sql = "DELETE FROM p_portfolio WHERE id=".$value;
  $sqlQuery = mysqli_query($connect, $sql);
}


...hvis du altså skal bruge $key til noget - ellers er den overflødig. Og jeg ville måske også sætte noget validering på og escape value, hvis det er noget, brugerne har adgang til.
Avatar billede eDesigner Nybegynder
27. april 2011 - 15:12 #2
Det er ikke noget brugerne har adgang til.

Har lige prøvet det du har skrevet, men uden held.

Skal ikke bruge $key til noget, der er måske en simplere måde at skrive det?

Får stadig ingen fejl btw..
Avatar billede eDesigner Nybegynder
27. april 2011 - 15:42 #3
Jeg har fundet ud af det nu :)

Det var mig der havde klokket i det.. istedet for $dbFetch['id'] var det $dbFetch['p_id'].

Du skal ellers have mange tak for hjælpen.. hvis du smider et svar kvittere jeg med nogle point ;)
Avatar billede phillips Nybegynder
27. april 2011 - 15:47 #4
Ja, det var jo ikke muligt at spotte :-)

Men du skal stadig ændre din foreach-løkke - ellers vil den kun slette den sidste entry, der er hentet i din første query.
Avatar billede eDesigner Nybegynder
27. april 2011 - 16:40 #5
kan du uddybe det med min foreach løkke?
Avatar billede zynzz Praktikant
27. april 2011 - 22:49 #6
Men hvorfor lave en løkke, du burde kunne lave følgende:


$sql = "DELETE FROM mytable WHERE id IN (."implode(",", $_POST['checkbox'])".)";
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester