2013-01-23 16 views
12

Ich möchte mehrere Zeilen aus MYSQL-Datenbank löschen. Ich habe diese delete.php-Datei erstellt, um verschiedene Links auszuwählen und sie mithilfe von Kontrollkästchen zu löschen.Löschen Sie mehrere Zeilen durch Auswahl von Kontrollkästchen mit PHP

<html> 
<head> 

<title>Links Page</title> 

</head> 

<body> 

<h2>Choose and delete selected links.</h2> 

<?php 

$dbc = mysqli_connect('localhost','root','admin','sample') 
or die('Error connecting to MySQL server'); 

$query = "select * from links ORDER BY link_id"; 

$result = mysqli_query($dbc,$query) 
or die('Error querying database'); 

$count=mysqli_num_rows($result); 
?> 

<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td><form name="form1" method="post" action=""> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td bgcolor="#FFFFFF">&nbsp;</td> 
<td colspan="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td> 
</tr> 

<?php 

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

<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td> 
</tr> 

<?php 
} 
?> 

<tr> 
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td> 
</tr> 
<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td><form name="form1" method="post" action=""> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td bgcolor="#FFFFFF">&nbsp;</td> 
<td colspan="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td> 
</tr> 

<?php 

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

<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td> 
</tr> 

<?php 
} 
?> 

<tr> 
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td> 
</tr> 



<?php 

// Check if delete button active, start this 

if(isset($_POST['delete'])) 
{ 
    $checkbox = $_POST['checkbox']; 

for($i=0;$i<count($checkbox);$i++){ 

$del_id = $checkbox[$i]; 
$sql = "DELETE FROM links WHERE link_id='$del_id'"; 
$result = mysqli_query($sql); 
} 
// if successful redirect to delete_multiple.php 
if($result){ 
echo "<meta http-equiv=\"refresh\" content=\"0;URL=view_links.php\">"; 
} 
} 

mysqli_close($dbc); 

?> 

</table> 
</form> 
</td> 
</tr> 
</table> 

</body> 

</html> 

Dies scheint keine Zeile zu löschen. Meine Daten sind in der Tabelle enthalten. Ich denke, das Problem ist mit dem PHP-Code. Bitte helfen Sie mir hier draußen.

+0

ich bin ganz neu in die Programmierung in PHP. Kannst du mich bitte über ein kostenloses PHP-Debugging-Tool informieren? – spyder

+1

Fehlerberichte aktivieren und lernen, die Nachrichten zu lesen. – tradyblix

+0

Versuchen Sie auch, den letzten PHP-Teil (isset ($ _ POST ['delete'])) vor die HTML-Tags zu verschieben, um sicherzustellen, dass keine der Daten zurückgesetzt wird, wenn die Seite übergeben wird. Es kann auch helfen, Formular-Tags zu verwenden: '

' –

Antwort

9

Sie sollten es als ein Array so behandeln,

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

Nur dann können Sie seine Zählung und Schleife zum Löschen nehmen.

Sie müssen auch die Datenbankverbindung an die Abfrage übergeben.

$result = mysqli_query($dbc, $sql); 

Yours hat es nicht:

$result = mysqli_query($sql); 
+0

änderte es von name = " checkbox "to name =" checkbox [] ".... noch keine Daten löschen – spyder

+0

Setzen Sie echo für Ihre Löschabfrage, um zu sehen, ob die Daten $ del_id perfekt sind. Wenn der Wert von $ del_id perfekt ist, führen Sie die Abfrage in Ihrem mysql-Editor aus. Sie werden wissen, ob ein Fehler in der Datenbankseite –

+0

@spyder Der Grund, warum es nicht gelöscht wurde, nachdem Edwin seine Antwort gepostet hat, ist, dass Sie niemals db-Verbindung zu '$ result = mysqli_query ($ sql);'. Was hätte lesen sollen als '$ result = mysqli_query ($ dbc, $ sql); '. @ Edwin: Ich habe den Schnitt gemacht. –

12

Verwenden Array-Notation wie name="checkbox[]" in Ihrem input Element. Dies gibt Ihnen $_POST['checkbox'] als Array. In der Abfrage können Sie es als

$sql = "DELETE FROM links WHERE link_id in "; 
$sql.= "('".implode("','",array_values($_POST['checkbox']))."')"; 

Das ist eine einzige Abfrage, um sie alle zu löschen.

Hinweis: Sie müssen die Werte in $_POST['checkbox'] mit mysql_real_escape_string oder ähnlich bestanden entkommen SQL Injection zu verhindern.

1

Etwas, das manchmal taucht Sie/können durch von $ _POST Wird

bewusst

sein maynot nicht immer abgeholt werden [ ‚löschen‘], wenn IE verwenden. Firefox und Chrome sollten jedoch gut funktionieren. Ich benutze eine separate isntead, die das Problem für IE löst

Wie für Ihre nicht in Ihrem Code löschen oben scheinen Sie aus zwei Sätze von Kontrollkästchen, die beide ziehen die gleichen Daten? Ist das nur eine Kopie + Paste Fehler oder ist das tatsächlich, wie Ihr Code ist?

Wenn es wie Ihr Code ist, wird das Problem sein, da der Benutzer ein Kontrollkästchen Array-Element ankreuzen könnte, aber das andere wird deaktiviert sein, so dass der PHP-Code für das Löschen verwirrt wird. Entweder das zweite Kontrollkästchen umbenennen oder diesen HTML-Block löschen. Sicherlich müssen Sie die gleiche Liste nicht zweimal anzeigen.

+0

Ich möchte das Formular ID als eine separate Spalte anzeigen ... auch brauche ich die Kontrollkästchen, um den Primärschlüssel, der wiederum die Spalte link_id ist .. thus, die gleichen Daten für beide Spalten – spyder

+0

Erm warum nicht tun In einer einzigen Tabelle in einer einzigen Schleife ist es praktisch nicht notwendig, das gleiche Dataset zweimal zu wiederholen, da in beiden nach dem obigen Code identische Informationen angezeigt werden. – Dave

+0

Ich habe einen Datensatz/eine Spalte entfernt :) – spyder

3
<?php $sql = "SELECT * FROM guest_book"; 
          $res = mysql_query($sql); 
          if (mysql_num_rows($res)) { 
          $query = mysql_query("SELECT * FROM guest_book ORDER BY id"); 
          $i=1; 
          while($row = mysql_fetch_assoc($query)){ 
          ?> 


<input type="checkbox" name="checkboxstatus[<?php echo $i; ?>]" value="<?php echo $row['id']; ?>" /> 

<?php $i++; }} ?> 


<input type="submit" value="Delete" name="Delete" /> 

if($_REQUEST['Delete'] != '') 
{ 
    if(!empty($_REQUEST['checkboxstatus'])) { 
     $checked_values = $_REQUEST['checkboxstatus']; 
     foreach($checked_values as $val) { 
      $sqldel = "DELETE from guest_book WHERE id = '$val'"; 
      mysql_query($sqldel); 

     } 
    } 
} 
4

löschen Multiple Checkbox PHP-Code mit

<input type="checkbox" name="chkbox[] value=".$row[0]."/> 
<input type="submit" name="delete" value="delete"/> 
<?php 
if(isset($_POST['delete'])) 
{ 
$cnt=array(); 
$cnt=count($_POST['chkbox']); 
for($i=0;$i<$cnt;$i++) 
    { 
    $del_id=$_POST['chkbox'][$i]; 
    $query="delete from $tablename where Id=".$del_id; 
    mysql_query($query); 
    } 
} 
0
$deleted = $_POST['checkbox']; 
$sql = "DELETE FROM $tbl_name WHERE id IN (".implode(",", $deleted) . ")"; 
Verwandte Themen