Vraag Verwijder meerdere rijen door selectievakjes te selecteren met PHP


Ik wil meerdere rijen uit de MYSQL-database verwijderen. Ik heb dit delete.php-bestand gemaakt om verschillende links te selecteren en deze te verwijderen met selectievakjes.

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

Dit lijkt geen enkele rij te verwijderen. Mijn gegevens worden ingevuld in de tabel. Ik denk dat het probleem zit in de PHP-code. Help me alsjeblieft hier.


13
2018-01-23 08:14


oorsprong


antwoorden:


Je zou het als een array als deze moeten behandelen,

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

Alleen dan kunt u de telling ervan opnemen en doorlopen voor verwijdering.

U moet ook de databaseverbinding doorgeven aan de query.

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

De jouwe omvatte het niet:

$result = mysqli_query($sql);

10
2018-01-23 08:17



Gebruik array-notatie zoals name="checkbox[]" in uw input element. Dit zal je geven $_POST['checkbox'] als array. In de query kunt u het gebruiken als

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

Dat is één enkele vraag om ze allemaal te verwijderen.

Notitie: Je moet ontsnappen aan de waarden die zijn doorgegeven $_POST['checkbox'] met mysql_real_escape_string of vergelijkbaar om te voorkomen SQL injectie.


12
2018-01-23 08:20



Meerdere selectievakjes verwijderen met PHP-code

<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
2018-05-19 22:36



<?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
2017-10-05 11:53



Iets dat soms opduikt waar je je misschien niet bewust van bent

Wordt niet altijd opgepikt door $ _POST ['delete'] wanneer IE wordt gebruikt. Firefox en chroom zouden echter prima moeten werken. Ik gebruik een afzonderlijke gehechtheid die het probleem voor IE oplost

Wat betreft het niet verwijderen van uw code hierboven lijkt het alsof u 2x sets van selectievakjes uitwisselt die allebei dezelfde gegevens bevatten? Is dit gewoon een kopieer- of plakfout of is dit eigenlijk hoe uw code is?

Als het de manier is waarop uw code is, is dat het probleem omdat de gebruiker een selectievakje array-item kan aanvinken, maar de andere zal worden uitgeschakeld, zodat de php-code voor verwijderen in de war raakt. Of het tweede selectievakje hernoemen of dat blok html verwijderen, je hoeft toch niet twee keer dezelfde lijst weer te geven?


1
2018-01-23 08:33



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

0
2018-01-01 12:08