Die Kommandos

Die Datei index.php soll die Anfragen an die einzelnen Kommandos weiterleiten. Ist kein Kommando angegeben, so soll eine Weiterleitung an das Read-Kommando durchgeführt werden. Unser Front-Controller wird an der oben markierten Stelle wie folgt erweitert.

Es wird zunächst ein Array angelegt, in welchem alle gültigen Kommandos mit der Datei, die aufgrund dieses Kommandos geladen wird, verzeichnet sind. Dann wird, wenn das Kommando gefunden wird, die entsprechende .php-Datei eingefügt. Es wird ein Array mit allen Kommandos genutzt und nicht direkt die Datei eingebunden, um einem Angreifer keine Möglichkeit zu geben, ein nicht-definiertes Kommando aufzurufen und damit fremden Code in unserem System auszuführen.

Hier der vollständige Einschub:

Da das Read-Kommando das Standardkommando ist, wird dieses zuerst entwickelt. Eine Datei read.php wird angelegt und mit folgendem Inhalt befüllt:

Die read.php blockt in der ersten Zeile wieder den direkten Zugriff, so dass das Read-Kommando immer über den Front-Controller aufgerufen werden muss. Ist alles okay, so wird eine HTML-Seite ausgegeben. Um eine schönere Tabelle zu erzeugen, beinhaltet diese HTML-Datei etwas CSS. Letztendlich stellt sie eine große Tabelle dar. Die Inhalte der Tabelle werden Zeile für Zeile mit Hilfe eines Iterieren über die Ergebnisse eines PDO-Statements generiert. Besonders wichtig ist hier die letzte Spalte der Tabelle. Hier befinden sich Links zu dem Aktualisieren- und Löschen-Kommando, die mit Hilfe dem Statement generiert werden. Unter der Tabelle befindet sich ein Link, welcher es ermöglicht, das Create-Kommando aufzurufen.

Die Datei create.php für das Create-Kommando sieht wie folgt aus:

In der ersten Zeile der Datei findet sich wieder die Sperre, dass die Datei nur über den Front-Controller aufgerufen werden darf. Was dann folgt ist eine If-Verzweigung zwischen zwei Möglichkeiten: Einmal die Anforderung der Seite mit einer GET-Anfrage und einmal das Schicken der neuen Werte mit einem POST-Request. Unterschieden wird zwischen beiden Möglichkeiten, indem geprüft wird, ob das $_POST-Array das Feld name enthält:

  • Wird die Seite mit einem GET aufgerufen, so wird ein Formular ausgegeben. Das Formular wird über ein POST abgeschickt, wobei über einen GET-Parameter noch angegeben wird, dass das Create-Kommando weiterhin genutzt werden soll.
  • Wird die Seite mit einem POST aufgerufen, werden zunächst die POST-Variablen mit der Funktion htmlspecialchars()} in Strings die HTML-sicher sind verwandelt, so dass kein Hacker fremden Code in die Seite einschleusen kann. Mittels eines PDO-Prepared-Statements werden diese Variablen dann in die Datenbank geschrieben. Die ID des Datensatzes wird vom Datenbankserver selbst erzeugt. Die letzte Zeile des Else-Zweiges leitet den Browser über den HTTP-Header auf die Hauptseite der Adressverwaltung um, wo der Nutzer daraufhin die neu eingegebene Adresse sehen wird.

Die beiden weiteren Kommandos sind Anpassungen der schon vorhandenen Kommandos. Das Aktualisieren-Kommando ließt zuvor die Daten aus der Datenbank, um die Formularfelder vorzubelegen. Weiterhin wird kein INSERT INTO-SQL-Statement verwendet, sondern ein UPDATE:

Das Löschen-Kommando ist an das Aktualisieren-Kommando angelehnt. Es stellt eine Sicherheitsfrage, ob der Datensatz gelöscht werden soll. Dazu werden seine Werte nochmals angezeigt:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert