www.PHP-Kurs.com

PHP lernen für Einsteiger
und Fortgeschrittene

PHP-Tutorial mit Videos

Sie befinden sich: Startseite » MySQL Tutorial - Datenbank unter PHP » Zusammenführung: Datenbankprogramm in PHP » Datensatz löschen durch User

Löschen von einzelnen Datensätzen

Wir können nun alle Datensätze anzeigen und neue Datensätze anlegen. Aber wie können wir über unser Programm einzelne Datensätze gezielt löschen?

Für die Benutzeraktion benötigen wir einen Link. Und in diesem Link muss die ID von dem zu löschenden Datensatz mitgegeben werden.

Also erweitern wir im ersten Schritt unserer Tabelle um eine weitere Spalte, in der wir die Nutzeraktionen als Link anbieten können.

Also eine weitere Überschrift:

<table>
    <thead>
        <tr>
            <th>Nutzeraktion</th>
            <th>ID</th>
            <th>Vorname</th>
            <th>Nachname</th>
            <th>Anmerkung</th>
            <th>erstellt</th>
        </tr>
    </thead>
    <tbody>

Und im Bereich mit den Ausgaben erstellen wir einen HTML-Link:

<tbody>
    <?php
    foreach ($daten as $inhalt) {
    ?>
        <tr>
            <td>
                <a href="?aktion=loeschen&id=<?php echo $inhalt->id; ?>">Löschen</a>
            </td>
            <td><?php echo $inhalt->id; ?></td>
            <td><?php echo bereinigen($inhalt->vorname); ?></td>
            <td><?php echo bereinigen($inhalt->nachname); ?></td>
            <td><?php echo bereinigen($inhalt->anmerkung); ?></td>
            <td><?php echo $inhalt->erstellt; ?></td>
        </tr>
    <?php
    }
    ?>
</tbody>

Wieder müssen wir nun auf die Nutzeraktion (klicken auf den Löschlink) vor der Ausgabe und dem Einlesen der Datenbank reagieren. Also wird am Anfang unser PHP-Programm erweitert:

if (isset($_GET['aktion']) and $_GET['aktion']=='loeschen') {
    // loeschen 
}

Und wieder brauchen wir unsere üblichen Schritte mit Vorbereiten und Ausführen der SQL-Anweisung. Allerdings sollten wir davor absichern, dass die übergebene ID auch „nur“ eine Zahl ist bzw. überhaupt vorhanden ist:

Hier überprüfen wir im ersten Schritt, ob diese gesetzt wurde! Dies erfolgt über $_GET. Im Unterschied zu einem Formular, in dem wir die Methode POST oder GET auswählen können, erfolgt bei einem Link immer die Übergabe über GET (was schön in der URL des Browsers zu sehen ist).

if (isset($_GET['aktion']) and $_GET['aktion']=='loeschen') {
    if (isset($_GET['id'])) {

Jetzt transformieren wird noch die Nutzereingabe auf eine Zahl – sprich auf eine ganze Zahl (Integer). Das geschieht über den folgenden Aufbau:

if (isset($_GET['aktion']) and $_GET['aktion']=='loeschen') {
    if (isset($_GET['id'])) {
        $id = (INT) $_GET['id'];

Und nun können wir das Löschen ausführen, wenn die Variable $id größer als 0 ist:

Hier der komplette Code, ohne dass eine Sicherheitsabfrage erfolgt. Der Datensatz wird sofort gelöscht!

if (isset($_GET['aktion']) and $_GET['aktion']=='loeschen') {
    if (isset($_GET['id'])) {
        $id = (INT) $_GET['id'];
        if ($id > 0)
        {
            $loeschen = $db->prepare("DELETE FROM kontakte WHERE id=(?) LIMIT 1");
            $loeschen->bind_param('i', $id);
            if ($loeschen->execute()) {
                echo "<p>Datensatz wurde gelöscht</p>";
            }
        }       
    }
}

Das ist der grundsätzliche Aufbau, um Datensätze zu löschen. Hier ist jetzt erst einmal keinerlei Sicherheit. Jeder Nutzer kann jeden Datensatz löschen! Wichtig ist hier nun der Punkt, wie die Vorgehensweise zum Ansprechen eines Datensatzes ist.

Das Prinzip für das Ändern von Datensätzen ist gleich.

Kompletter bisheriger Code

<?php
require 'inc/db.php';
if (isset($_GET['aktion']) and $_GET['aktion']=='loeschen') {
    if (isset($_GET['id'])) {
        $id = (INT) $_GET['id'];
        if ($id > 0)
        {
            $loeschen = $db->prepare("DELETE FROM kontakte WHERE id=(?) LIMIT 1");
            $loeschen->bind_param('i', $id);
            if ($loeschen->execute()) {
                echo "<p>Datensatz wurde gelöscht</p>";
            }
        }       
    }
}
if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {
    $vorname = "";
    if (isset($_POST['vorname'])) {
        $vorname = trim($_POST['vorname']);
    }
    $nachname = "";
    if (isset($_POST['nachname'])) {
        $nachname = trim($_POST['nachname']);
    }
    $anmerkung = "";
    if (isset($_POST['anmerkung'])) {
        $anmerkung = trim($_POST['anmerkung']);
    }
    $erstellt = date("Y-m-d H:i:s");
    if ( $vorname != '' or $nachname != '' or $anmerkung != '' )
    {
        // speichern
        $einfuegen = $db->prepare("
             INSERT INTO kontakte (vorname, nachname, anmerkung, erstellt) 
             VALUES (?, ?, ?, NOW())");
        $einfuegen->bind_param('sss', $vorname, $nachname, $anmerkung);
        if ($einfuegen->execute()) {
            header('Location: index.php?aktion=feedbackgespeichert');
            die();
            echo "<h1>gespeichert</h1>";
        }
    }   
}
if (isset($_GET['aktion']) and $_GET['aktion']=='feedbackgespeichert') {
    echo '<p class="feedbackerfolg">Datensatz wurde gespeichert</p>';
}
$daten = array();
if ($erg = $db->query("SELECT * FROM kontakte")) {
    if ($erg->num_rows) {
        while($datensatz = $erg->fetch_object()) {
            $daten[] = $datensatz;
        }
        $erg->free();
    }   
}
if (!count($daten)) {
    echo "<p>Es liegen keine Daten vor :(</p>";
} else {
?>
    <table>
        <thead>
            <tr>
                <th>Nutzeraktion</th>
                <th>ID</th>
                <th>Vorname</th>
                <th>Nachname</th>
                <th>Anmerkung</th>
                <th>erstellt</th>
            </tr>
        </thead>
        <tbody>
            <?php
            foreach ($daten as $inhalt) {
            ?>
                <tr>
                    <td>
                        <a href="?aktion=loeschen&id=<?php echo $inhalt->id; ?>">
                            Löschen</a>
                    </td>
                    <td><?php echo $inhalt->id; ?></td>
                    <td><?php echo bereinigen($inhalt->vorname); ?></td>
                    <td><?php echo bereinigen($inhalt->nachname); ?></td>
                    <td><?php echo bereinigen($inhalt->anmerkung); ?></td>
                    <td><?php echo $inhalt->erstellt; ?></td>
                </tr>
            <?php
            }
            ?>
        </tbody>
    </table>
<?php   
}
function bereinigen($inhalt='') {
    $inhalt = trim($inhalt);
    $inhalt = htmlentities($inhalt, ENT_QUOTES, "UTF-8");
    return($inhalt);
}
?>
<form action="" method="post">
    <label>Vorname: 
        <input type="text" name="vorname" id="vorname">
    </label>
    <label>Nachname: 
        <input type="text" name="nachname" id="nachname">
    </label>
    <label>Anmerkung: 
        <textarea name="anmerkung" id="anmerkung"></textarea>
    </label>
    <input type="hidden" name="aktion" value="speichern">
    <input type="submit" value="speichern">
</form>

Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).

Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button:



(kann angegeben werden)

Nach Absenden kommt hier Feedback! Bitte nicht doppelt absenden. Danke.

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

unsere Videos bestellen

Unsere Videos und eBooks bestellen.

Spenden

Sie können uns eine Spende über PayPal zukommen lassen.

Weiterempfehlungen

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Bücher über Amazon

Bestellen Sie Bücher über folgende Links bei Amazon:

Fehler melden

Vielen Dank für Ihre Hilfe