Gästebuch

Das gute alte Gästebuch, ein Klassiker im Internet. Auch wenn es durch Facebook & Co. immer stärker verdrängt wird, dient es als gute Übung für euch ein Gästebuch in PHP zu programmieren. Daran lernt ihr verschiedene Konzepte, beispielsweise wie man Daten abfragt, überprüft, in eine Datenbank speichert und auch wieder ausgibt.

Datenbanklayout

Für unser Gästebuch nutzen wir MySQL und PDO. Die Tabelle könnt ihr entweder mittels phpMyAdmin erstellen oder untstehenden SQL-Code kopieren und ausführen. Unsere Datenbanktabelle wird dabei folgende Spalten beinhalten:

Hier der SQL-Code zur Erzeugung der Datenbanktabelle.

Die ersten vier Spalten sind hoffentlich selbst erklärend. Mit created_at speichern wir das Erstellungsdatum des Beitrags ab. Mittels der Spalte deleted_at realisieren wir einen sogenannten soft delete. Möchten wir später einen Beitrag im Gästebuch löschen, so muss dieser nicht tatsächlich und unwiederruflicht gelöscht werden aus der Datenbank, sondern wir werden das Lösch-Datum setzen. Das Gästebuch wird dann nur Einträge ausgeben, die kein Löschdatum haben. Dadurch kann ein fälschlich gelöschter Artikel im Gästebuch leicht wiederhergestellt werden, indem wir das Löschdatum entfernen.

Abspeicherung von Beiträgen

Unser Gästebuch hat 3 Funktionalitäten: Wir benötigen ein Formular zur Eingabe, ein Script zum Abspeichern der Daten in der Datenbank und ein Script zum Ausgeben aller existenten Einträge. Das Formular zur Eingabe und die Ausgabe der existenten Beiträge schreiben wir in die gleichen Datei, in die gaestebuch.php:

Die Ausgabe des Formulars befindet sich in den Zeilen 46 bis 61. Hier überprüfen wir zuerst ob das Formular überhaupt ausgegeben werden soll. Dies realisieren wir durch die Variable $show_form.

Dieses Formular wird an die selbe Seite abgeschickt und die Zeilen 14 bis 37 übernehmen die Abfrage der Daten und das Eintragen in die Datenbank. Zuerst werden alle Felder des Formulars abgefragt, danach werden diese Felder überprüft. Für das E-Mail-Feld wird mittels filter_var() überprüft, ob es eine gültige E-Mail-Adresse ist. Bei den anderen Feldern wird nur überprüft, dass diese nicht leer sind. Sollte ein Fehler auftreten, so wird eine Fehlermeldung in die Variable $error geschrieben. Sind alle Felder korrekt ausgefüllt, so wird in Zeile 27 - 28 ein INSERT in unsere Datenbank mittels prepared statement.

Die Ausgabe der Einträge und eine Blätterfunktion erfolgt ab Zeile 67. Zuerst wird die Anzahl der Einträge festgestellt und ausgegeben. Danach erfolgt der erste Teil unserer Blätterfunktion. Wir fragen die GET-Variable ab auf welcher Seite sich der Besucher befindet und berechnen dann die Information ab welchen Eintrag wir unsere Datenbank abfragen müssen. Die Formel dafür ist ($seite-1)*$beitraege_pro_seite.

Danach folgt der nächste Prepared Statement. Im SQL-Query schließen wir zuerst die Einträge aus, die ein Löschdatum besitzen (deleted_at IS NULL). Danach sortieren wir die Einträge so das wir den neuesten zuerst erhalten und für die Blätterfunktion bauen wir noch ein LIMIT ein (weitere Infos zu LIMIT und Prepared Statements).

Danach läuft das Script durch alle Einträge. Um Cross-Site-Scripting zu verhindern werden die Benutzereingaben mittels htmlentities() maskiert. Das Datum wandeln wir um in ein etwas leichter lesbares Format mittels DateFormat.

Zum Abschluss noch die Blätterfunktion. Um nicht eine endlos lange Seite mit tausenden von Einträgen im Gästebuch auszugeben, werden im obigen Script immer 20 Einträge pro Seite ausgeben. In Zeile 108 wird zuerst die Anzahl der benötigten Seiten berechnet. Danach folgt eine kleine for-Schleife, die entsprechende Links zu den einzelnen Seiten ausgibt. Einzige Ausnahme ist die Seite auf der sich der Besucher gerade findet, dort wird kein Link ausgeben.

 

 

Autor: