webForumDet fria alternativet

Ta bort flera poster i databas med hjälp av checkboxar

PHP

6 svar · 597 visningar · startad av Rocket

Medlem sedan feb. 2000372 inlägg
Frågan#1

Först loopar jag fram ett gäng poster ur en databas och alla får varsin checkbox. Sedan kryssar man i de checkboxar vars poster man vill ta bort och klickar på submit. Hur ska jag sedan skriva för att just de förkryssade posterna ska bort? Jag vet inte innan hur många poster som visas eller vilka det är. Alla poster har ett unikt id.

Det största problemet är att jag inte vet hur många post det handlar om.

Jag använder mySQL, om det kan vara till någon hjälp.

Medlem sedan aug. 20002 975 inlägg
#2

Du borde kunnna göra så här.

Först när du loopar ut formuläret:

while ($row = mysql_fetch_array($result)){
   echo "<input type=\"checkbox\" name=\"del[]\" value=\"{$row['id']}\">";
}

Och sedan i skriptet som tar emot:

foreach($_POST['del'] as $id){
   mysql_query("DELETE FROM tabell WHERE id=$id");
}
Medlem sedan feb. 2000372 inlägg
#3

Ok, ska testa.

Vad betyder det när man skriver name=\"del[]\" och value=\"{$row['id']}\"?

Medlem sedan aug. 20002 975 inlägg
#4

Rocket skrev:

Vad betyder det när man skriver name=\"del[]\" och value=\"{$row['id']}\"?

Vilken del eller allt?

Citationstecken betecknar början och slutet på en sträng. Citationstecken som ska finnas inne i strängen måste "escapas". Detta gör man med backslash före.

del[] betyder att man samlar värden i en array.

{$row['id']}. När man lägger in ett array-värde i en sträng brukar det gärna strula till sig. Sätt klamrar runtomkring så exekveras den delen separat.

Försöker m.a.o. att med PHP skriva ut:

<input type="checkbox" name="del[]" value="1">

där value hämtas från databasen.

Medlem sedan feb. 2000372 inlägg
#5

Ok det var främst vad som menades med del[] , men nu vet jag det.

Nu funkar allt bra, tack för hjälpen.

Medlem sedan feb. 20012 412 inlägg
#6

Hej!

Ett annat sätt att lösa det på är att undvika loopen.

<input type=\"checkbox\" name=\"Id[]\" value=\"{$row['id']}\">

$splittedId = implode ( ",", $Id );
mysql_query ( "DELETE FROM tabell WHERE Id IN ( $splittedId )" );
Medlem sedan jan. 200336 inlägg
#7

Hej!

Jag undrar hur man gör om man vill kunna klicka i alla checkboxar med en knapp typ "markera alla",
och sedan ha en knapp som man kan rensa alla checkboxar "rensa"
och en knapp som man sedan trycker på "radera"?

Så här ser min kod ut, men jag vet inte hur man ska koppla knapparna.

<?php 
include "conn.php"; // Databasanslutningen 

$result = mysql_query("SELECT * FROM anmalan ORDER BY id DESC");

while ($row = mysql_fetch_array($result))
{
?>

<TABLE border="1" WIDTH="80%" align="center">
<form action="delete2.php" method="post"> 
<TR><TD>
<b>ID: <? echo $row['id']; ?></b><input type="hidden" name="id" value="<? echo $row['id']; ?>"> 
</TD><TD>
<b><? echo $row['namn']; ?></b>
</TD><TD>
<b><? echo $row['klubb']; ?></b>
</TD><TD>
<b><? echo $row['meddelande']; ?></b>
</TD><TD align="right">
<? echo "<input type=\"checkbox\" name=\"del[]\" value=\"{$row['id']}\">"; ?>
</TD></TR>
</form>
</TABLE>

<? } ?>

<TABLE width="183">
<TR><TD align="center" width="175">
<table border="0" width="100%">
  <tr>
    <td width="33%">&nbsp;</td>
    <td width="33%">&nbsp;</td>
    <td width="34%">&nbsp;</td>
  </tr>
  <tr>
    <td width="33%"><input type="submit" value="Radera" name="B1"></td>
    <td width="33%"><input type="button" value="Markera alla" name="B3"></td>
    <td width="34%"><input type="reset" value="Rensa" name="B2"></td>
  </tr>
</table>
263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)