Diese Lektion gibt eine Schritt-für-Schritt-Anleitung darüber, wie Du Daten aus einer MySQL-Datenbank auslesen und den Inhalt anschließend mittels Tabellen visualisieren und via Formular editieren kannst. Dies bringt alle Schritte vorheriger Lektionen zusammen. Es ist auch das, was WordPress tut, um den vollständigen Zyklus einer Nutzer-Interaktion mit dem CMS abzubilden – von der Anfrage von Daten bis zur visuellen Ausgabe des angefragten Ergebnisses.
Als Beispiel wollen wir eine Comic-Verwaltung als Datenbank-Anwendung entwickeln, welche Daten wie folgt verwaltet:
Wenn ein Nutzer “Delete” anwählt, wird der Eintrag aus der Datenbank entfernt.
Klickt er auf “Edit” wird folgendes Formular ausgegeben:
Schließlich erhält ein Nutzer nach Klick auf “Create new comic” folgendes Formular angezeigt:
Diese Lektion wird alle für diese Mechanik erforderlichen Schritte technisch erläutern. Style-Angaben seien dabei außen vor.
Lass uns zunächst über die Datenbank-Tabellen sprechen, die wir benötigen.
Die Eigenschaften “ID” und “Comic_Name” sind direkte Attribute der Tabelle “Comic”. Der Verlag-Verweis “Publisher_ID” ist ein Fremdschlüssel einer weiteren Tabelle, genannt “Publisher”.
ID | Comic_Name | Publisher_ID |
---|---|---|
7 | The Incredible Hulk | 0 |
9 | Superman | 1 |
Die Tabelle “Publisher” wird wie folgt aussehen:
ID | Publisher_Name |
---|---|
0 | Marvel |
1 | D.C. |
Sprechen wir nun darüber, was mit diesen Tabellen geschehen soll.
Wie in diesem Tutorial bereits besprochen, verbinden wir zur Datenbank und verwenden nun den folgenden Code, um Daten aus MySQL zu lesen. Dabei nutzen wir eine WHILE-Schleife innerhalb einer Datei mit dem fiktiven Namen content-start.php, welche von Header und Footer umgeben ist, wie bereits erläutert:
<?php echo "<table>"; $stmt = mysql_query("SELECT ID, Comic_Name, Publisher_Name from COMIC, PUBLISHER where COMIC.Publisher_ID = PUBLISHER.ID order by COMIC.Title"); while ($row = mysql_fetch_row($stmt)) { echo "<tr>"; for ($j = 0; $j < 3; $j++) { // we're expecting three attributes echo "<td>".$row[$j]."</td>"; // gives the current item of the current attribute } echo " <td><a href="index.php?section=comic&function=edit&id=$row[0]">Edit</a></td>"; echo " <td><a href="index.php?section=comic&function=delete&id=$row[0]">Delete</a></td>"; echo "</tr>"; } echo "<table>"; echo "<a href="index.php?section=comic&function=new">Create new comic</a>"; ?> |
Es gibt hier jedoch einige Neuerungen:
Klickt ein Nutzer auf “Delete” müssen wir ein Delete-Statement an die Datenbank senden.
Der erste Schritt ist bereits getan. Schauen wir uns den Quellcode oben oben, sehen wir einen Link mit dem Ankertext “Delete”, der bereits die ID jedes Comics mitführt. Getan werden müssen noch folgende Schritte:
Da der Link lautet “index.php?section=comic&function=delete&id=$row[0]” müssen wir als erstes schauen wo wir sind. Wir gehen hier weiterhin vom Navigationsrahmen aus, wie vorher erläutert. Falls Du dessen Aufbau verstanden hast, ist das Problem der Nutzer-Umleitung bereits erledigt. Er wird hier beispielsweise zu einer Datei content-comic.php umgeleitet, die in den übergeordneten Rahmen eingebettet ist.
Innerhalb dieser Datei müssen wir einen zusätzlichen Parameter “function” auslesen, denn wir wollen unterscheiden zwischen Erzeugen, Ändern und Löschen von Comics. Auch müssen wir die übergebene ID abgreifen. Beides erledigen wir wie im Beitrag zu GET- und POST-Parametern beschrieben:
<?php $function = $_GET["function"]; $comic_id = $_GET["id"]; if ($function == "delete") { $sql = "delete from COMIC where ID = $comic_id"; mysql_query($sql); header('Location: index.php?section=comic'); } ?> |
Das war der einfache Teil.
Nun wird es etwas komplexer. Wir können zwar den selben Mechanismus wie oben beschrieben nutzen, um die Funktion “edit” abzugreifen, müssen allerdings etwas mehr tun, um dem Nutzer die Möglichkeit zu geben, die Informationen zu verändern.
Zunächst möchte ein Nutzer die gegenwärtige Information sehen, da dies eine Erleichterung darstellt, sie zu ändern. Deshalb wählen wir alle Informationen aus, die zur aktuellen Comic-ID gehören.
Anschließend geben wir diese Information über folgende Wege aus:
Zusätzlich ist die aktuelle Comic-ID in einem versteckten Feld enthalten, um sie per Formular übergeben zu können, wovon der Nutzer nichts mitbekommt.
Studiere nun bitte den folgenden Quellcode, der all dies erledigt:
<?php $function = $_GET["function"]; $comic_id = $_GET["id"]; if ($function == "edit") { echo "<form action='index.php?section=comic&function=edited' method='POST'>"; echo "<table>"; $stmt = mysql_query("select ID, Comic_Name, Publisher_ID, Publisher_Name from COMIC, PUBLISHER where COMIC.Publisher_ID = PUBLISHER.ID and COMIC.ID = $comid_id"); while ($row = mysql_fetch_row($stmt)) { echo "<tr>"; echo " <td>ID</td>"; echo " <td>".$row[0]."</td>"; // not changeable echo "</tr>"; echo "<tr>"; echo " <td>Title</td>"; echo " <td><input type='text' name='edited_comic_title' value='".$row[1]."'/></td>"; // changeable echo "</tr>"; echo "<tr>"; echo " <td>Publisher:</td>"; echo " <td><select name='edited_publisher_id' type='text' value=''/> <option value='$row[2]'>$row[3]</option>"; $sql = "select ID, Publisher_Name from PUBLISHER where ID not like $row[2] order by ID asc"; $stmt_inner = mysql_query($sql); $i = 0; while ($row_inner = mysql_fetch_row($stmt_inner)) { $j = 0; $ID_Publisher[$i] = $row[$j]; $j++; $Title_Publisher[$i] = $row[$j]; echo " <option value='$ID_Publisher[$i]'>$Title_Publisher[$i]</option>"; $i++; } echo " <td>"; echo "</tr>"; } echo "</table>"; echo "<input name='comic_id' value='$comic_id' type='hidden'/>"; echo "<input name='Save' value='Save' type='submit'/>"; echo "</form>"; } if ($function == "edited") { $edited_comic_title = $_POST["edited_comic_title"]; $edited_publisher_id = $_POST["edited_publisher_id"]; $comic_id = $_POST["comic_id"]; $sql = "update COMIC set Comic_Name = '$edited_comic_title', Publisher_ID = $edited_publisher_id where ID = $comic_id"; mysql_query($sql); header('Location: index.php?section=comic'); } ?> |
Du siehst, es findet hier ein Vergleich zwischen der Variable “function” und dem String “edited” statt. Die Variable function trägt diesen String wenn das Formular abgesendet wird, welches alle vorherigen Input-Felder enthielt. Alle POST-Parameter werden bezogen über ein SQL-Update-Statement, das zur Datenbank gesendet wird. Der Nutzer wird dann zu seinem Ausgangspunkt zurück geleitet.
Glücklicherweise kannst Du den selben Quellcode wie oben nutzen, um neue Comics in die Datenbank einzufügen. Behalte jedoch im Hinterkopf, dass es keine Vorauswahlen und keine aktuellen Werte in der Ausgabe gibt. Insbesondere wirst Du nicht die aktuelle ID des Comics ausgeben können, da noch keine existiert. Die neue ID wird generiert, sobald Du dein Insert-Statement an die Datenbank sendest:
<?php $function = $_GET["function"]; $comic_id = $_GET["id"]; if ($function == "new") { // see above ... } if ($function == "new_done") { $new_comic_title = $_POST["new_comic_title"]; $new_publisher_id = $_POST["new_publisher_id"]; $comic_id = $_POST["comic_id"]; $sql = "insert into COMIC values (null, '$new_comic_title', $new_publisher_id)"; mysql_query($sql); header('Location: index.php?section=comic'); } ?> |
In Ordnung. Das ist alles was eine Datenbank-Anwendung tun muss: lesen, löschen, aktualisieren und einfügen von Daten in eine Datenbank. Hierbei finden HTML und PHP Verwendung, um sowohl die Nutzereingaben zu verarbeiten, als auch Formular- und weitere visuelle Ausgaben zu formulieren, die ein Browser verstehen kann. Es ist tatsächlich relativ einfach, auch wenn deine WordPress-Themes und -Plugins diese Funktionalität komplex ausweiten. Doch die Grundstruktur ist wenig kompliziert.
WordPress ist eine große Datenbank-Anwendung. Geschrieben in PHP ist es in der Lage zu einer MySQL-Datenbank zu verbinden und mit ihr zu kommunizieren. Die erhaltenen Daten kann WordPress verarbeiten und dem Benutzer eine sauber aufbereitete HTML-Webseite zurück liefern, die ein Browser interpretieren und darstellen kann. WordPress kennt dabei zwei Typen von Nutzer: Fronten User und Backend User. Diese haben jeweils andere Rollen und Privilegien, doch der Mechanismus zur Handhabung von Datei-Eingaben, ihre Verarbeitung Auslieferung in Form einer HTML-basierten Antwort ist stets identisch.
Wir hoffen Du hast einen Einblick in die Funktionsweise deiner Blogging Software WordPress erhalten. Vielleicht möchtest Du künftig bestimmte Probleme deines Themes selbst lösen. Solltest Du darüber hinaus Hilfe mit deiner Installation benötigen, kannst Du dich gern melden.
Du hast es geschafft. Springe jetzt gern in jede Lektion direkt zurück, falls Du noch Verständnisprobleme hast. Auch kannst Du uns bei offenen Fragen gern kontaktieren.
Viel Erfolg! 🙂