Gästebuch programmieren mit MySQL als Datenbank

Im Folgenden werden wir nun in PHP ein Gästebuch programmieren, das die Einträge in einer Datenbank ablegt.

Wenn wir noch keine Datenbank haben, in der wir die Tabellen speichern können, erstellen wir im PHP eine Datenbank. Im folgenden Beispiel nenne ich diese "homepageanwendungen".

Datenbank anlegen mit phpMyAdmin mit MySQL-Befehl

Datenbank mit phpMyAdmin anlegen - CREATE DATABASE

CREATE DATABASE `homepageanwendungen`;

Als erstes benötigen wir eine Tabelle in unserer Datenbank. Diese nennen wir "gaestebuch". Diese soll 6 Felder bekommen. Wir wollen erfassen: Name des Schreibers, E-Mail-Adresse des Schreibers, WWW-Seite des Schreibers, Datum und Uhrzeit des Eintrags und natürlich den Eintrag selber.

Aufgabe: bestimmen Sie (bevor Sie weiterlesen) sinnvolle Namen und überlegen Sie sich die Feldtypen und die benötigten Feldlängen.

In phpMyAdmin Wahl der Datenbank auf der rechten Seite.

Auswahl einer bestehenden Datenbank in phpMyAdmin

Neue Tabelle mit dem Namen "gaestebuch" erstellen in phpMyAdmin.

Neue Tabelle erstellen in phpMyAdmin

Anzahl der Felder für einen Tabelle in phpMyAdmin bestimmen

Unser erstes Feld ist das ID-Feld, über das wir jeden Eintrag eindeutig ansprechen können. Diese ist eine Ganzzahl (INT) und kann bis zu 20 Stellen bekommen (wir wollen viele, viele Einträge).

Auswahl des Datentyps in phpMyAdmin

Zusätzlich soll bei diesem Feld automatisch eine fortlaufende Nummer zugeteilt werden, ohne dass wir uns darum kümmern müssen. Daher vergeben wir für das Feld unter Extra "auto_increment" und machen es zum Primärschlüssel.

Automatische Nummerierung in phpMyAdmin festlegen durch auto_increment

Aufgabe mit der Benennung der Felder von oben erledigt? Mein Vorschlag wäre:

name VARCHAR 150
email VARCHAR 255
url VARCHAR 255
datum datetime
eintrag blob

Feldnamen, Feldtyp und Länge in phpMyAdmin festlegen für das Gästebuch

Nach dem Klicken auf OK wird die Tabelle erstellt und taucht rechts auf.

Anzeige des SQL-Befehls für das Erstellen der Tabelle für das Gästebuch

Wir bekommen auch zu Gesicht, wie der direkte MySQL-Befehl aussieht.

MySQL-Anweisung: Struktur der Datenbank gaestebuch
CREATE TABLE `gaestebuch` (
  `id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 150 ) NULL ,
  `email` VARCHAR( 255 ) NULL ,
  `url` VARCHAR( 255 ) NULL ,
  `datum` DATETIME NOT NULL ,
  `eintrag` BLOB NULL
) ENGINE = MYISAM ;

Und jetzt können wir zum Testen 1-2 Einträge von Hand hinzufügen. Dies geschieht über Einfügen. Es werden nun Daten eingegeben ? das Feld ID und der Eintrag selber bleiben leer. ID wird automatisch vergeben und in das BLOB-Feld können wir mit phpMyAdmin nicht schreiben.

Eintrag von Hand in eine MySQL-Datenbank über phpMyAdmin

Nach Klicken von OK bekommen wir wieder zur Bestätigung den entsprechenden MySQL-Befehl:

SQL-Befehl INSERT INTO zum Eintag von Daten in Datenbank

MySQL-Anweisung: 2 Datensätze anlegen
INSERT INTO `gaestebuch`
    ( `id` , `name` ,
      `email` , `url` ,
      `datum` , `eintrag` )
VALUES
    ( NULL , 'Axel',
      NULL , 'www.php-kurs.com',
      '2008-01-15 12:07:24', NULL
    ),
    ( NULL , 'Simone Simdauther',
      'simona.sim@keine-mail-da.nope', NULL ,
      '2008-01-02 12:08:42', NULL
    );

Zum Überprüfen der Inhalte im Kopfbereich auf „Anzeigen“ klicken und nach unten srcollen ? dort sollten nun unsere Testeinträge auftauchen.

Anzeige der vorhandenen Daten über phpMyAdmin

Anwendung Gästebuch erstellen

Im ersten Schritt möchten wir die Einträge in unserem Gästebuch anzeigen. Dazu müssen wir eine Verbindung zu unserer Datenbank aufbauen. Wir hinterlegen als erstes die Zugangsdaten in Konstanten in der Datei "gaestebuch.php".

PHP-Quellcode
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'root' );
define ( 'MYSQL_KENNWORT', '' );
define ( 'MYSQL_DATENBANK', 'homepageanwendungen' );

Nun wird die eigentliche Verbindung zum MySQL-Server aufgebaut.

Wir sagen dem "Computer", dass er eine Verbindung aufbauen soll mit dem MYSQL_HOST (Sprich dem Server, auf dem die Datenbank liegt) und wir berechtigt sind (MYSQL_BENUTZER und MYSQL_KENNWORT). Zusätzlich sagen wir nun noch, welche Datenbank eigentlich genutzt werden soll (MYSQL_DATENBANK).

PHP-Quellcode
<?php

define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'root' );
define ( 'MYSQL_KENNWORT', '' );
define ( 'MYSQL_DATENBANK', 'homepageanwendungen' );

$db_link = mysqli_connect (MYSQL_HOST,
                           MYSQL_BENUTZER,
                           MYSQL_KENNWORT,
                           MYSQL_DATENBANK
                          );
if ( ! $db_link )
{
    // hier sollte dann später dem Programmierer eine
    // E-Mail mit dem Problem zukommen gelassen werden
    // die Fehlermeldung für den Programmierer sollte
    // das Problem ausgeben mit: mysql_error()
    die('keine Verbindung zur Zeit möglich - später probieren ');
}
?>

Nun werden über eine MySQL-Abfrage die Daten der Datenbank angefordert.

PHP-Quellcode

// SQL-Befehl für den Zugriff
$sql = "
    SELECT
        *
    FROM gaestebuch
    ORDER BY datum
";
 
// ausführen des mysql-Befehls
$db_erg = mysqli_query( $db_link, $sql );
if ( ! $db_erg )
{
    die('Ungültige Abfrage: ' . mysql_error());
}

Bisher gibt es noch keine Ausgaben auf dem Bildschirm. Wir möchten wissen, wieviele Einträge vorhanden sind, und diese Anzahl ausgeben.

PHP-Quellcode
// Anzeige der Anzahl der Einträge
$anzahl_eintraege = mysqli_num_rows($db_erg);
echo "<p>Anzahl der Gästebuch-Einträge: $anzahl_eintraege </p>";

Wenn wir uns nirgend vertippt haben und der Aufbau zu Datenbank klappt, erhalten wir nun die Anzahl der Einträge. Herzlichen Glückwunsch ? der erste erfolgreiche Zugriff auf die Datenbank über PHP und Nutzung der Daten.

erste Test mit Abfrage der Datenbank und Anzeige der Anzahl der Einträge

Anzahl der Gästebuch-Einträge: 2

Anzeige der Daten aus der MySQL-Datenbank mit PHP

Jetzt lassen wir uns alle Daten der Reihe nach anzeigen. Dazu durchlaufen wir eine Schleife.

PHP-Quellcode: Daten anzeigen
while ($daten = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
{
    // Aushabe der Daten
}

Der Befehl mysqli_fetch_array ($db_erg, MYSQL_ASSOC) bewirkt, dass das Ergebnis unserer Datenbankabfrage (Verweis ist in $db_erg gespeichert) als assoziiertes Array übergeben wird. Assoziiert bedeutet, dass auf unser Array direkt über die Namen der Tabellenfelder zugegriffen werden kann.

Innerhalb der Schleife können wir nun auf das Array zugreifen. Im ersten Test lassen wir uns (aus didaktischen Gründen) einfach den Inhalt des Array ($daten) komplett ausgeben mit print_r ($daten); - damit es sauber zu lesen ist, lassen wir noch <pre> ausgeben (alle Umbrüche werden angezeigt).

PHP-Quellcode: Inhalt Datenbank anzeigen
while ($daten = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
{
    // Aushabe der Daten
    echo "<pre>";
    print_r ($daten);
    echo "</pre>";
}

Wir sollten nun etwas in der Richtung erhalten (je nachdem, was in der Datenbank eingetragen wurde.

Ausgabe der MySQL-Datenbank per PHP

Wir können nun die einzelnen Array-Daten ausgeben lassen mit:

PHP-Quellcode: auf einzelnen Inhalt zugreifen
echo $daten['name'];

also in unserem Gästebuch-Script: (jetzt noch ohne großartiges Design)

PHP-Quellcode: Daten aus Datenbank anzeigen
while ($daten = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
{
    // Aushabe der Daten
    echo "ID: ";
    echo $daten['id'];
    echo "<br />";
 
    echo "Name: ";
    echo $daten['name'];
    echo "<br />";
 
    echo "E-Mail: ";
    echo $daten['email'];
    echo "<br />";
 
    echo "URL: ";
    echo $daten['url'];
    echo "<br />";
 
    echo "Datum: ";
    echo $daten['datum'];
    echo "<br />";
 
    echo "Gästebucheintrag: ";
    echo $daten['eintrag'];
    echo "<br />";
}

Und wenn wir fertig mit dem Zugriff auf die Datenbank sind, sollten wir die Ressourcen wieder freigeben:

PHP-Quellcode
mysqli_free_result( $db_erg );

neue Einträge in das Gästebuch (in die MySQLDatenbank)

Für den Eintrag ins Gästebuch erstellen wir eine neue Datei mit dem Namen "gaestebuch-eintrag.php". Wir zeigen ein Formular, in dem der Gästebucheintrag durch den Besucher gemacht werden kann. Dazu benötigen wir 4 Felder: Name, E-Mail, URL, Eintrag.

PHP-Quellcode: Formular erstellen
<form name="" action="<?php echo $_SERVER['PHP_SELF']; ?>"
 method="POST" >
<p>Ihr Name:<br />
<input type="text" name="name" value="" />
</p>
 
<p>Ihre E-Mail-Adresse:<br />
<input type="text" name="email" value="" />
</p>
 
<p>Ihre Homepage:<br />
<input type="text" name="url" value="" />
</p>
 
<p>Gästebucheintrag:<br />
<textarea name="eintrag" rows="10" cols="50"></textarea>
</p>
 
<input type="Submit" value="speichern" />
</form>

fertiges Forumlar für die Einträge in das Gästebuch

Der Inhalt des Formulars wird an sich selber gesendet. Jetzt benötigen wir am Anfang vor der Anzeige des Formulars noch eine Auswertung, ob das Formular ausgefüllt wurde, und können dann die Daten abspeichern.

Wir testen, ob ein Eintrag im Feld "Gästebucheintrag" gemacht wurde.

PHP-Quellcode: Test, ob Eingabe vorliegt
if ( $_POST['eintrag'] != "" )
{
    echo "<h2>Eintrag speichern</h2>";
    // hier kommt nun der entsprechende PHP-Code
    exit;
}

Im nächsten Schritt bauen wir nun den entsprechenden MySQL-Befehl zusammen, so dass diese Daten gespeichert werden. Wir bereiten den MySQL-Befehl in einer Variablen vor.

PHP-Quellcode: SQL-Anweisung zusammenbauen
$sql = " INSERT INTO gaestebuch ";
$sql .= " SET ";
$sql .= " name   ='". $_POST['name'] ."', ";
$sql .= " email  ='". $_POST['email'] ."', ";
$sql .= " url    ='". $_POST['url'] ."', ";
$sql .= " datum  ='". date("Y-m-d H:i:s") ."', ";
$sql .= " eintrag='". $_POST['eintrag'] ."' ";

Zur Erinnerung: Die Konstruktion " .= " bewirkt, dass der folgende Ausdruck an bestehende Inhalte der Variablen angehängt wird.

Zur Kontrolle lassen wir uns die fertige Konstruktion ausgeben:

PHP-Quellcode: Kontrolle der erstellten SQL-Anweisung
echo "<hr />SQL: $sql<hr />";

Nun müssen wir wieder (da ja neue Datei) die Verbindung zur Datenbank aufbauen, unsere Berechtigung (Benutzername und Kennwort) checken und die entsprechende Datenbank auswählen.

Diese Konstruktion kennen Sie aus der Datei "gaestebuch.php":

PHP-Quellcode
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'root' );
define ( 'MYSQL_KENNWORT', '' );
define ( 'MYSQL_DATENBANK', 'homepageanwendungen' );
 
$db_link = @mysqli_connect (MYSQL_HOST,
                           MYSQL_BENUTZER,
                           MYSQL_KENNWORT,
                           MYSQL_DATENBANK);
 
if ( ! $db_link )
{
  // hier sollte dann später dem Programmierer eine
  // E-Mail mit dem Problem zukommen gelassen werden
  // die Fehlermeldung für den Programmierer sollte
  // das Problem ausgeben mit: mysql_error()
  die('keine Verbindung zur Zeit möglich -
       später probieren ');
}

Jetzt kommt der eigentliche Part: Wir übergeben unseren zusammengebauten SQL-Befehl und lassen diesen ausführen mit mysql_query() - Das war es schon ? der Eintrag ist erfolgt.

PHP-Quellcode: SQL-Anweisung ausführen lassen
// ausführen des mysql-Befehls
$db_erg = mysqli_query( $db_link, $sql );
if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}

Zum Schluss bieten wir noch einen Link, um das Gästebuch aufzurufen, und brechen dann das Script mit exit ab:

PHP-Quellcode: Link zum Gästebuch zurück
echo '<p><a href="gaestebuch.php">Gästebuch anzeigen</a></p>';
exit;

Es funktioniert, ist aber gefährlich! - im nächsten Kapitel unbedingt weiterlesen!