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“.


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.

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

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).

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.

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

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

Wir bekommen auch zu Gesicht, wie der direkte MySQL-Befehl aussieht.
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.

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

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 scrollen – dort sollten nun unsere Testeinträge auftauchen.

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".
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
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.
// 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, wie viele Einträge vorhanden sind, und diese Anzahl ausgeben.
// 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.
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.
while ($daten = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
// Ausgabe 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).
while ($daten = mysqli_fetch_array( $db_erg, MYSQLI_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.

Wir können nun die einzelnen Array-Daten ausgeben lassen mit:
echo $daten['name'];
also in unserem Gästebuch-Script: (jetzt noch ohne großartiges Design)
while ($daten = mysqli_fetch_array( $db_erg, MYSQLI_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:
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.
<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 Website:<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>

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.
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.
$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:
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":
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.
// 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:
echo '<p><a href="gaestebuch.php">Gästebuch anzeigen</a></p>';
exit;
Es funktioniert, ist aber gefährlich! - im nächsten Kapitel unbedingt weiterlesen!
Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).
Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button: