PHP Lektionen – Lektion 3.4 – Arbeiten mit der MySQL-Datenbank. DELETE-Abfragen.
In der letzten Lektion haben wir gelernt, wie man neue Methoden zu unserer Steuerungsklasse simpleCMS hinzufügt. Jetzt fügen wir eine weitere Methode zum Löschen von Einträgen hinzu: delete()
.
Die Methode fügen wir wie gewohnt hinzu:
public function delete($mid){ }
Wie Sie sehen, übergeben wir den Parameter $mid
– die ID unseres Eintrags. Wenn Sie sich an die letzte Lektion erinnern, haben wir beschlossen, den Parameter direkt über den GET-Request zu übergeben. Jetzt versuchen wir eine andere Methode der Parameterübergabe.
Nachdem wir die Methode definiert haben, schreiben wir nun die Pfadverarbeitung in der Datei index.php
:
switch ($_GET['admin']){ case 'add': print $obj->display_admin(); // Wenn der Wert 1 ist, wird das Formular zum Hinzufügen angezeigt break; case 'update': print $obj->display_update(); // Wenn der Wert "update" ist, wird das Formular zur Änderung angezeigt break; case 'delete': if($_GET['mid']){ // Wenn der Wert "delete" ist, prüfen wir ob mid gesetzt ist $obj->delete($_GET['mid']); // Methode zum Löschen des Eintrags aufrufen print $obj->display_public(); // Wenn mid nicht gesetzt ist, werden die Einträge angezeigt }else{ print '<p>Kein mid ausgewählt!</p>'; print $obj->display_public(); // Liste der Einträge anzeigen } break; default: print $obj->display_public(); // Wenn kein Parameter gesetzt ist, werden die Einträge angezeigt }
Damit alles korrekt funktioniert und der Eintrag gelöscht wird, muss die URL wie folgt aussehen:
http://test/index.php?admin=delete&mid=7
Dann wird der Eintrag mit mid=7
gelöscht. Schreiben wir also die Implementierung unserer Methode delete()
:
public function delete($mid){ mysql_query('DELETE FROM Messages WHERE mid='.$mid) or die(mysql_error()); }
Schauen wir uns die Struktur der MySQL-DELETE-Anweisung an: Zuerst kommt das Wort DELETE, danach der Operator FROM. Nach FROM geben wir die Tabelle an, aus der Einträge gelöscht werden sollen (VORSICHT! Wenn keine Bedingung angegeben wird, werden alle Einträge gelöscht!). Danach definieren wir die Löschbedingung. Uns interessiert der Eintrag mit der mid
, dessen Wert wir als Parameter übergeben. Am Ende prüfen wir, ob die Abfrage erfolgreich war.
Wie bereits erwähnt, wird unsere Methode aufgerufen, wenn in der URL zwei Parameter gesetzt sind: admin=delete&mid=7
. Um dies zu ermöglichen, fügen wir unter jedem Eintrag Links hinzu, indem wir die Methode display_public()
anpassen:
public function display_public() { // Methode zum Anzeigen der Einträge $content = ''; $sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // Auswahl-Abfrage $result = mysql_query($sql) or die(mysql_error()); // Ergebnis der Auswahl speichern wir in einer Variable while($row = mysql_fetch_array($result)){ // Ergebnis-Variable muss mit mysql_fetch_array() verarbeitet werden $content .= '<div class="post" id="mid-' . $row['mid'] . '">'; // div umschließt den Eintrag $content .= '<span class="time">#' . $row['mid'] . ' vom ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; // Ausgabe von Zeit und Titel $content .= '<p>' . $row['bodytext'] . '</p>'; // Nachrichtentext ausgeben $content .= '<p>'; $content .= '<a href="/index.php?admin=update&mid=' . $row['mid'] . '">Nachricht bearbeiten</a>'; // Link zur Bearbeitung $content .= '<a href="/index.php?admin=delete&mid=' . $row['mid'] . '">Nachricht löschen</a>'; // Link zum Löschen $content .= '</p>'; $content .= '</div>'; // Ende des umschließenden div } $content .= '<p><a href="/index.php?admin=add">Nachricht hinzufügen</a></p>'; return $content; }
Wenn wir jetzt auf den Link zum Löschen klicken, wird die Nachricht wie geplant gelöscht. So können wir unerwünschte Nachrichten schnell direkt auf der Seite entfernen, ohne phpMyAdmin zu verwenden.
Zum Schluss machen wir noch einen kleinen Abstand zwischen den Links zum Bearbeiten und Löschen:
.post a{ padding-right: 5px; }
Ich denke, damit ist diese Lektion beendet. In der nächsten Lektion werden wir einen weiteren wichtigen Operator für die Auswahl aus mehreren Tabellen besprechen: JOIN.