it-swarm.com.de

Löschen Sie mehrere Zeilen, indem Sie die Kontrollkästchen mit auswählen PHP

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

<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 werden in die Tabelle eingetragen. Ich denke, das Problem liegt im PHP Code. Bitte hilf mir hier raus.

13
spyder

Sie sollten es wie ein Array behandeln,

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

Nur dann können Sie die Anzahl ermitteln und zum Löschen in einer Schleife durchlaufen.

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

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

Ihre haben es nicht aufgenommen:

$result = mysqli_query($sql);
10
Edwin Alex

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

$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.

Note: Sie müssen die in $_POST['checkbox'] übergebenen Werte mit mysql_real_escape_string oder einem ähnlichen Code schützen, um SQL Injection zu verhindern.

12
Shiplu Mokaddim

Mehrere Kontrollkästchen mit PHP Code löschen

<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);
  }
}
4
user3654452
<?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);

        }
    }
} 
3
user1900387

Etwas, das manchmal auftaucht, ist Ihnen vielleicht nicht bewusst

Wird bei Verwendung von IE nicht immer von $ _POST ['delete'] abgeholt. Firefox und Chrome sollten jedoch funktionieren. Ich verwende einen separaten isntead, der das Problem für IE löst

Wenn Sie nicht in Ihrem Code oben löschen, scheinen Sie zwei Sätze von Kontrollkästchen auszuprobieren, die beide die gleichen Daten ziehen. Ist dies nur ein Fehler beim Kopieren + Einfügen oder ist dies tatsächlich so, wie Ihr Code ist?

Wenn es so ist, wie Ihr Code ist, wird dies das Problem sein, da der Benutzer ein Kontrollkästchen-Arrayelement ankreuzen kann, das andere jedoch deaktiviert ist, sodass der PHP-Code zum Löschen verwirrt wird. Entweder das 2. Kontrollkästchen umbenennen oder den HTML-Block löschen. Sicherlich müssen Sie dieselbe Liste nicht zweimal anzeigen.

1
Dave
 $deleted = $_POST['checkbox'];
 $sql = "DELETE FROM $tbl_name WHERE id IN (".implode(",", $deleted ) . ")";
0