So fügen Sie einem PHP-Formular eine Schaltfläche zum Löschen hinzu, die eine Zeile aus einer MySQL-Tabelle löscht

Lesezeit: 3 Minuten

Benutzer-Avatar
Lucero79

Ich habe die Ergebnisse einer MySQL-Tabelle in eine HTML-Tabelle ausgegeben. In der letzten Spalte möchte ich eine Löschoption hinzufügen, die ein anderes Formular aufruft und den Benutzer aus der MySQL-Tabelle löscht. Ich bekomme es aber irgendwie nicht zum Laufen.

Dies ist mein Code für die Ergebnisseite:

<?php
                    
    $contacts = mysql_query("
        SELECT * FROM contacts ORDER BY ID ASC") or die( mysql_error() );
    
    // If results
    if( mysql_num_rows( $contacts ) > 0 )
    ?>
    
    <table id="contact-list">
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Telephone</th>
                <th>Address</th>
  <th>Delete</th>
            </tr>
        </thead>
        <tbody>
        
        <?php while( $contact = mysql_fetch_array( $contacts ) ) : ?>
        
        

            <tr>
                <td class="contact-name"><?php echo $contact['name']; ?></td>
                <td class="contact-email"><?php echo $contact['email']; ?></td>
                <td class="contact-telephone"><?php echo $contact['telephone']; ?></td>
                <td class="contact-address"><?php echo $contact['address']; ?></td>
                <td class="contact-delete"><form action='delete.php' method="post">
<input type="hidden" name="name" value="">
<input type="submit" name="submit" value="Delete">
</form></td>                
            </tr>
            
        <?php endwhile; ?>
        
        </tbody>
    </table>

und das ist mein delete.php-Skript

<?php

//Define the query
$query = "DELETE FROM contacts WHERE name={$_POST['name']} LIMIT 1";

//sends the query to delete the entry
mysql_query ($query);

if (mysql_affected_rows() == 1) { 
//if it updated
?>

            <strong>Contact Has Been Deleted</strong><br /><br />
    
<?php
 } else { 
//if it failed
?>
    
            <strong>Deletion Failed</strong><br /><br />
    

<?php
} 
?>

Ich kann mir nicht erklären, warum das nicht funktioniert.

<input type="hidden" name="name" value="">

Ihnen fehlt ein Wert, der von dieser Zeile in Ihrer Löschdatei aufgenommen wird.

$query = "DELETE FROM contacts WHERE name={$_POST['name']} LIMIT 1";

Im Moment empfängt es nichts, weshalb es nicht funktionieren wird.

Fügen Sie also einen Wert hinzu und es wird funktionieren. Beispiel:

<input type="hidden" name="name" value="<?php echo $contact['name']; ?>">

In dieser Zeile fehlt der Name:

<input type="hidden" name="name" value="">

Sie müssen etwas haben (<?php echo $contact['name']; ?>) in dem value Attribut.

Übrigens, verwenden Sie nicht veraltet mysql_* Funktionen, verwenden PDO oder mysqli_* stattdessen.

Benutzer-Avatar
TylerH

Erstens sollten Sie den Code nicht auf diese Weise schreiben; Der Code ist nicht gegen SQL-Injection geschützt.

1. Versuchen Sie, primäre IDs anstelle von a zu verwenden name (Was passiert, wenn 2 Personen den gleichen Namen haben?).

Sie können also ein verborgenes Feld erstellen, um zu wissen, mit welcher „Person“ Sie es zu tun haben.

<input type="hidden" name="contact_id" value="<?php $contact['contact_id']; ?>">

2. Bereinigen Sie Variablen, um Angriffe zu vermeiden:

<?php $contact_id = isset($_POST['contact_id'])?intval($_POST['contact_id']):0;

// proceed with the query
if($contact_id>0) { $query = "DELETE FROM contacts WHERE contact_id = '$contact_id'";

}

// redirect to the main table with header("location: main.php");

?>

1006050cookie-checkSo fügen Sie einem PHP-Formular eine Schaltfläche zum Löschen hinzu, die eine Zeile aus einer MySQL-Tabelle löscht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy