Posted on Leave a comment

Gästebuch: Teil 2 – PHP und MySQL

Gästebuch: Teil 2 – PHP und MySQL

Im ersten Teil dieser Blogserie entstand die Struktur für ein Gästebuch-Formular, in das die Benutzer ihren Namen, ihre E-Mail Adresse und einen Kommentar eintragen konnten. Dieses HTML-Formular wurde mit CSS formatiert.

Erstellen einer Datenbank zum Speichern der Einträge

Die Einträge aus dem Gästebuch müssen nun jedoch noch gespeichert werden. Dabei findet MySQL Anwendung.

Bei MySQL handelt es sich um ein Datenbankmanagementsystem (DBMS), das in der Lage ist Informationen in tabellarischer Form in Datenbanken zu speichern und über die Datenbanksprache SQL (Structured Query Language) gesteuert werden kann.

Für die Benutzung dieses Systems ist zunächst das Programmpaket XAMPP notwendig. Hierbei handelt es sich um eine kostenlose Software, die das Installieren und Konfigurieren eines Apache Webservers mit einem Datenbanksystem und PHP-Skripten ermöglicht. XAMPP kann hier heruntergeladen werden: https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/5.5.28/Nach der erfolgreichen Installation des Programms müssen zunächst die Server gestartet werden, damit die volle Funktion zur Verfügung steht. Dies geschieht, indem das Programm geöffnet wird und der Button Start im Reiter General geklickt wird.

Alternativ lassen sich auch im Reiter Services genau die Server auswählen, die gestartet werden sollen. Für das Gästebuch werden der Apache Server und MySQL benötigt.

Wenn die Server gestartet und aktiv sind, lässt sich im Browser durch die Eingabe des Wortes localhost in die Adresszeile der lokale Server öffnen.

XAMPP enthält auch ein Tool namens phpMyAdmin, um MySQL komfortabel über eine grafische Oberfläche zu verwalten. Dieses lässt dieses sich unter folgendem Link aufrufen: http://localhost:8888/phpMyAdmin/index.php.

In phpMyAdmin werden nun eine neue Datenbank und eine neue Tabelle zum Speichern der Einträge aus dem Gästebuch generiert. Hierzu muss zunächst in das Feld “Database name” der Name der Datenbank, zum Beispiel gastebuch eingetragen werden.

Diese Datenbank wird dann mit einem Klick auf “Create” erzeugt. Im Reiter SQL befindet sich ein Textfeld, in das der folgende Code eingegeben wird.

CREATE TABLE `guestbook` (

`id` int(3) NOT NULL auto_increment,

`name` varchar(65) NOT NULL default ”,

`email` varchar(65) NOT NULL default ”,

`comment` longtext NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

 AUTO_INCREMENT=1 ;

Dieser Code ist in der Datenbanksprache SQL verfasst und dient der Erstellung einer Tabelle, in der die Einträge des Gästebuchs gespeichert werden.

Der Befehl CREATE TABLE erzeuget eine Tabelle mit dem Namen `guestbook`. `id` int(3) NOT NULL auto_increment definiert das Feld, mit dem die Reihen beschriftet werden. Es darf NOT NULL sein. Das bedeutet, dass es immer einen spezifischen Wert enthalten muss. Ein neuer Eintrag in die Tabelle darf also nicht durchgeführt werden, wenn dieses Feld keinen Eintrag enthält. Der Befehl auto_increment sorgt dafür, dass jeder neue Eintrag für ID genau um eins höher ist als der vorherige Wert, man muss sich also nicht selbst um die Nummerierung der Reihen kümmern.

Daraufhin werden Felder für den Namen, die E-Mail und den Eintrag festgelegt und benannt. PRIMARY KEY (`id`) definiert das Feld ID, also die Nummerierung der Reihen, als den Primary Key, einen Schlüssel, der zur eindeutigen Identifizierung der Einträge verwendet wird. Der Primary Key muss für jeden Eintrag einen anderen Wert besitzen, wie es in bei dem Gästebuch durch die Nummerierung der Fall ist. Dadurch sind zwei identische Einträge vom selben Autor mit der gleichen E-Mailadresse trotzdem eindeutig voneinander unterscheidbar.

Die letzte Zeile legt die Standardkonfigurationen wie Speichersubsysteme (Engine) fest. MySQL bietet verschiedene Speichersubsysteme an, die für unterschiedliche Einsatzzwecke geeignet sind. Das hier ausgewählt System InnoDB hat sich aufgrund einer Vielzahl von Vorteilen als moderner Standard etabliert.  Außerdem definiert die letzte Zeile den Zeichensatz und legt fest, dass bei AUTO_INCREMENT der Wert immer um 1 erhöht wird, was für die Nummerierung des Schlüssels relevant ist.

In phpMyAdminlässt sich außerdem im Reiter “User Accounts” mit dem Befehl “add user account” ein neuer Benutzer hinzufügen. Für diesen müssen ein Benutzername und ein Passwort festgelegt werden, hier im Beispiel “gb” und “gb”.

Damit sind eine Datenbank und eine Tabelle zum Speichern der Einträge aus dem Gästebuch erfolgreich erstellt.

Erstellen eines PHP-Skripts zum Speichern der Einträge

Im letzten Teil der Blogserie wurde ein Formular erstellt, dass beim Klick auf einen bestimmten Button ein PHP-Skript aufruft.

PHP ist eine Skriptsprache, die für dynamische Anwendungen geeignet ist. Dies umfasst alle Ereignisse, in denen die Website aktiv auf Anforderungen, wie zum Beispiel Eingaben des Benutzers reagiert. Da das Gästebuch auf den Eintrag des Besuchers reagieren soll, verwendet es PHP.

Dieses PHP-Skript muss also vorhanden sein, damit ein erfolgreicher Aufruf möglich ist. Das folgende Skript ist für das Herstellen der Verbindung zur im ersten Schritt erzeugten Datenbank und das Speichern der Einträge in der Tabelle verantwortlich.

<table width=”400″ border=”0″ align=”center” cellpadding=”3″ cellspacing=”0″>

<tr>

<td><strong><a href=  “viewgaestebuch.php”>G&auml;stebuch ansehen</a>  

| <a href=”gastebuch.htm”>G&auml;stebuch unterschreiben</a> </strong></td>

</tr>

</table>

<br>

<?php

$username = “gb”;

$password = “gb”;

$database = “gastebuch”;

$mysqli = new mysqli(“localhost”, $username,

 $password, $database);

$field1 = $mysqli->real_escape_string($_POST[‘gbName’]);

$field2 = $mysqli->real_escape_string($_POST[‘gbEmail’]);

$field3 = $mysqli->real_escape_string($_POST[‘gbEintrag’]);

$query = “INSERT INTO guestbook (name, email,  comment )VALUES (‘{$field1}’,'{$field2}’,'{$field3}’)”;

$mysqli->query($query);

$mysqli->close();

?>

Zu Beginn des Skripts befindet sich ein kurzer HTML-Code. Dieser legt mit dem Befehl <table> eine Tabelle mit einer Breite von 400 px (width=“400”) und ohne einen Tabellenrand (border=“0”) fest. Die Tabelle soll sich in der Mitte der Seite befinden (align=“center”). Cellspacing legt den Abstand der Tabellenzellen zueinander fest, cellpadding den Abstand zwischen den Zellen der Tabelle und deren Rand.

In den Zellen der Tabelle, die mit <td> beginnen und mit </td> geschlossen werden befinden sich die Optionen “Gästebuch ansehen” und “Gästebuch unterschreiben”. Beide sind als Links markiert. Bei “Gästebuch unterschreiben” beginnt der Link mit dem Tag <a href=“gastebuch.htm”> und endet mit </a>. Die Verlinkung führt also zurück zu dem Formular aus dem ersten Teil dieser Blogserie. Der Link zu “Gästebuch ansehen” geschieht über das Tag <a href=“viewgaestebuch.php”>, das ebenfalls mit einem passenden </a> beendet wird und führt zu einem zweiten PHP-Skript, das im Folgenden erstellt wird und die Gästebucheinträge ausgibt.

Außerdem wird der Tabelleninhalt von dem Tag <strong> umfasst, das mit </strong> beendet wird und dafür sorgt, dass sämtlicher Text fett gedruckt wird.

Die spitze Klammer signalisiert nun zunächst den Beginn des PHP-Skripts. Dann wird festgelegt, welche Werte dem Host, dem Benutzername, dem Passwort sowie dem Name der Datenbank und der Tabelle entsprechen.

Der Name der Datenbank und der Tabelle wurden bei deren Erstellung festgelegt. Auch das Passwort und der Benutzername wurden im vorherigen Schritt kreiert. Anschließend wird ein Objekt der Klasse mysqli erzeugt, welches die Verbindung zur Datenbank herstellt.

Der Befehl $mysqli->real_escape_string($_POST[‘gbName’]); sorgt dafür, dass der String mit den Inhalten eine geeignet Form für die Verwendung in einer SQL Anweisung besitzt. Hierbei handelt es sich um eine Sicherheitsvorkehrung, bei der bestimmte Zeichen im String durch einen Schrägstrich maskiert werden, um zu verhindern, dass Anwender durch die Eingabe von SQL Befehlen Daten manipulieren, auslesen oder löschen.

Die entsprechenden Einträge werden dann als die Variablen $field1, $field2 und $field3 gespeichert.

Im nächsten Schritt stellt das Skript eine Verbindung zur Datenbank mit dem festgelegten Benutzer her und wählt dann die passende Tabelle aus. In diesem Fall handelt es sich um die Tabelle guestbook. Dies geschieht mit dem Befehl:

$query = “INSERT INTO guestbook (name, email, comment) VALUES (‘{$field1}’,'{$field2}’,'{$field3}’)”;

Dieser legt fest, dass der Name, die E-Mail und der Eintrag in das Gästebuch eingetragen werden sollen.

Anschließend führt der Befehl $mysqli->query($query) die oben festgelegte Eintragung durch, speichert also den Eintrag in der Tabelle.

Die Verbindung zur Datenbank wird im letzten Schritt beendet. Das Tag ?> signalisiert dann das Ende des php-Codes.

Das Skript kann nun einfach unter dem Namen gastebuch.php gespeichert werden. Hierbei ist es wichtig, dass der Name, unter dem gespeichert wird, genau dem Namen des Skripts entspricht, dass im HTML-Code im ersten Teil dieser Serie aufgerufen wurde. Sonst wird das Skript nicht gefunden und kann nicht ausgeführt werden. Alle HTML, CSS und PHP Dateien müssen im htdocs Ordner von XAMPP gespeichert werden, damit sie im Webbrowser über localhost/name.dateiendung aufgerufen werden können, so ist sichergestellt, dass der PHP Code ausgeführt wird und nicht nur als bloßer Text ausgegeben wird.

Erstellen eines PHP-Skripts zum Anzeigen der Einträge

Damit die Gäste die Einträge im Gästebuch auch lesen können, ist das Anzeigen des Gästebuchs notwendig. Hierzu wird ebenfalls ein php-Skript verwendet, das jedoch zu Beginn HTML-Code benutzt.

<table width=”400″ border=”0″ align=”center”

 cellpadding=”3″ cellspacing=”0″>

<tr>

<td><strong>G&auml;stebuch ansehen |

<a href=”gastebuch.htm”>G&auml;stebuch

 unterschreiben</a> </strong></td>

</tr>

</table>

<br>

<?php

$username = “gb”;

$password = “gb”;

$database = “gastebuch”;

$mysqli = new mysqli(“localhost”, $username,

 $password, $database);

$query = “SELECT * FROM guestbook ORDER BY id”;


echo ‘<table border=”2″ cellspacing=”2″

 cellpadding=”4″>

      <tr>

          <td> <font face=”Arial”>Nummer</font> </td>

          <td> <font face=”Arial”>Name</font> </td>

          <td> <font face=”Arial”>E-Mail</font> </td>

          <td> <font face=”Arial”>Eintrag</font> </td>

      </tr>’;

if ($result = $mysqli->query($query)) {

    while ($row = $result->fetch_assoc()) {

        $field1name = $row[“id”];

        $field2name = $row[“name”];

        $field3name = $row[“email”];

        $field4name = $row[“comment”];

        echo ‘<tr>

                  <td>’.$field1name.'</td>

                  <td>’.$field2name.'</td>

                  <td>’.$field3name.'</td>

                  <td>’.$field4name.'</td>

              </tr>’;

    }

    $result->free();

}

?>

Bei den ersten Zeilen dieses Codes handelt es sich um den gleichen HTML-Code wie in dem letzten Skript, der eine Tabelle mit zwei Spalten erzeugt. Diese bieten dem Besucher die Möglichkeit das Gästebuch anzusehen oder zurück zum Formular zu wechseln, um dieses zu unterschreiben oder einen neuen Eintrag zu verfassen.

Die Tabelle ist identisch zu der Tabelle, die auch nach dem Verfassen eines Eintrags angezeigt wird. Die Option “Gästebuch ansehen” ist allerdings nicht verlinkt, da das Gästebuch und seine Einträge bereits sichtbar sind.

Daraufhin beginnt der php-Code mit dem Tag <?php.  Er ermöglicht das Auslesen der verfassten Einträge aus der Datenbank und deren Ausgabe in einer Tabelle. Dazu wird zunächst mit Hilfe des Benutzernamens, des Passworts und des Namens der Datenbank eine Verbindung zu dieser hergestellt.

Im nächsten Schritt legt der Befehl $query = “SELECT * FROM guestbook”; fest, dass alle Daten aus der Tabelle guestbook ausgelesen werden, die in phpMyAdmin erstellt wurde und mit Hilfe des Formulars und des vorherigen Skripts gefüllt wurde.

Mit den bereits aus dem ersten Artikel dieser Serie bekannten Befehlen entsteht eine Tabelle, um die Einträge anzuzeigen. echo ist hierbei ein Befehl, der bei PHP eine Ausgabe anzeigt. <table> markiert den Beginn der Tabelle. Diese besitzt einen Rand mit der Dicke 2 (border=“2”). Cellspacing legt den Abstand der Tabellenzellen zueinander fest, cellpadding den Abstand zwischen den Zellen der Tabelle und deren Rand.

Mit dem Befehl <tr> beginnt die erste Zeile der Tabelle. Diese enthält vier Spalten, die mit <td> gekennzeichnet werden und als Beschriftung für die Inhalte des Gästebuchs dienen.

Darauf folgt eine if-Abfrage. Diese überprüft, ob die Bedingung, $result = $mysqli->query($query) erfüllt ist. Dies ist der Fall, wenn die Abfrage erfolgreich war und ein Ergebnis von der Datenbank liefert. Wenn diese erfüllt ist, wird eine while-Schleife ausgeführt.

Die while-Schleife in der nächsten Reihe, sorgt dafür, dass die folgende Befehle ausgeführt werden sollen, so lange die Bedingung der while-Schleife erfüllt ist. Diese befindet sich in runden Klammern direkt hinter dem while. Im Fall des Gästebuchs ist die Bedingung ($row = $result->fetch_assoc()). Die Schleife wird also ausgeführt, so lange die abgefragte Tabelle noch weitere Reihen enthält.

Innerhalb der while-Schleife werden folgende Befehle ausgeführt:

      $field1name = $row[“id”];

        $field2name = $row[“name”];

        $field3name = $row[“email”];

        $field4name = $row[“comment”];

        echo ‘<tr>

                  <td>’.$field1name.'</td>

                  <td>’.$field2name.'</td>

                  <td>’.$field3name.'</td>

                  <td>’.$field4name.'</td>

              </tr>’;

Zunächst werden die Inhalte der Tabelle reihenweise als Variablen gespeichert. Als erstes wird der erste gespeicherte Gästebucheintrag ausgelesen. Dessen ID, in diesem Fall eins, wird als   $field1name gespeichert. Gleichermaßen wird mit dem Namen den Benutzers, dessen E-Mail und seinem Eintrag verfahren. Deren Inhalte werden als $field2name, $field3name und $field4name gespeichert.

Der Befehl echo signalisiert dann eine Ausgabe, die sich zwischen den Anführungszeichen ‘ und ‘ befindet. Die Ausgabe ist Teil der Tabelle, die vor dem Beginn der Schleife angelegt wurde. Sie erzeugt mit <tr> eine neue Reihe der Tabelle, in deren Felder, die mit <td> erzeugt werden, jeweils die Variablen $field1name-$field4name geschrieben werden.

Der gesamte erste Eintrag des Gästebuchs wird dadurch nebeneinander unter den mit Nummer, Name, E-Mail und Eintrag gekennzeichneten Feldern ausgegeben.

Nachdem alle Befehle ausgeführt wurden, werden die Befehle innerhalb der while-Schleife wiederholt, wenn deren Bedingung noch erfüllt ist. Dies ist dann der Fall, wenn das Gästebuch einen zweiten Eintrag besitzt. Die Schleife wird so lange wiederholt, bis alle Einträge ausgelesen sind und angezeigt werden.

Die Zeile $result->free(); gibt anschließend den für das Ergebnis der SQL-Abfrage belegten Speicher wieder frei.

Das Tag ?> beendet den php-Code. Der Code wird dann als Datei viewgaestebuch.php gespeichert. Der Aufruf dieser Seite führt zu einer Anzeige aller ins Gästebuch vorgenommener Einträge.

Die Benutzer können sich nun also auf der HTML-Seite gastebuch.htm in das Formular eintragen. Durch das Skript gastebuch.php, welches das Formular aufruft, werden die Einträge gespeichert und auf der Seite viewgaestebuch.php reihenweise angezeigt.

Schreibe einen Kommentar

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