In diesem Tutorial geht es um das Erstellen eines Gästebuches, welches eine MySQL-Datenbank benutzt.
Solltet ihr kein MySQL nutzen können, dann wäre ggf. folgendes Tutorial besser für euch:
[PHP] Gästebuch auf Textdatei basierend
Das wohl wichtigste ist der Aufbau der Datenbank. Dort werden alle Daten gespeichert und mit dem Inhalt baut sich auch das Gästebuch auf.
Gespeicherte Werte sollen hier sein:
- Zeitpunkt des Eintrags
- IP des users (man weiß nie, wozu das noch gut sein kann)
- der Name
- die eMail-Adresse
- der Eintrag selbst
weiterhin wären Dinge möglich, wie ICQ-Nummer, website usw. Hier geht es zunächst um das Prinzip. Ergänzen könnt ihr es selbst, wenn ihr das Tutorial durchgearbeitet habt.
Für das Verwalten von Datenbanken (erstellen von Tabellen und Spalten) hat sich die Benutzeroberfläche phpmyadmin als hilfreich erwiesen.
Die Spalten der Tabelle müßen nun noch Namen bekommen. Dabei dürfen die hier erwähnten nicht benutzt werden:
http://dev.mysql.com/doc/mysql/de/reserved-words.htm
Andernfalls wird MySQL euch Probleme bereiten.
Das Erzeugen der Tabelle könnte ihr mit folgendem MySQL-Querry machen:
PHP-Code:
CREATE TABLE `gaestebuch` (
`ident` int(11) NOT NULL auto_increment,
`zeitpunkt` datetime NOT NULL default '0000-00-00 00:00:00',
`IP` tinytext NOT NULL,
`name` tinytext NOT NULL,
`mail` tinytext NOT NULL,
`nachricht` text NOT NULL,
PRIMARY KEY (`ident`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Für das korrekte Auswählen der Spaltentypen ist folgende Seite hilfreich:
http://dev.mysql.com/doc/mysql/de/column-types.html
Die php-Datei mit der das Gästebuch angezeigt werden soll beinhaltet auch das Formular (man könnte das auch auf 2 Dateien aufteilen).
Dann fang ich mal mit der php-Datei an. Die Struktur dieses Gästebuches soll wie folgt werden:
PHP-Code:
<?php
if()
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
}
?>
Es wird mit der
if-Anweisung überprüft, ob das Gästebuch ausgefüllt wurde, oder nicht. Abhängig davon wird der neue Eintrag in die Datenbank eingetragen, oder die vorhandenen Einträge werden angezeigt.
Natürlich muss der if()-Teil noch sinnvoll gefüllt werden, aber das kommt später - diese Stelle müßen wir uns aber merken!
Als nächstes wollen wir den Formular-Abschnitt bearbeiten:
Damit deine Besucher auch die Möglichkeit haben Einträge zu hinterlassen benötigen wir ein Formular.
PHP-Code:
<?php
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
?>
Die superglobale Variable
$_SERVER["PHP_SELF"] sorgt dafür, dass die Daten per POST an die gleiche Datei geschickt werden. Zusammen mit der if-else-Anweisung ist der Trick geschafft, warum wir nur eine php-Datei brauchen.
Nun, da wir das Formular kennen, können wir auch die if-Anweisung füllen. Sinnvoll ist das Überprüfen auf das Vorhandensein von den gedrücktem Button:
PHP-Code:
<?php
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
?>
Nun besteht also die Möglichkeit, Daten abzuschicken. Als nächstes also müßen wir uns darum kümmern, dass diese Daten auch verarbeitet werden.
Als übertragene Daten haben wir dann zur Verfügung:
$_POST['name']
$_POST['email']
$_POST['eintrag']
$_POST['button']
Letztere Variable beinhaltet keinen brauchbaren Wert, außer für die Überprüfung in dem if-Konstrukt können wir diese vernachlässigen.
Wir wollten aber zusätzlich noch die IP und den Zeitpunkt abspeichern.
Den Zeitpunkt halten wir sekundengenau fest. Das geht mit der Funktion date(
date('Y-m-d H:i:s')
Die IP kann erfasst werden durch die superglobale Server-Variable:
$_SERVER['REMOTE_ADDR']
An dieser Stelle muß die Kommunikation mit der Datenbank erfolgen. Sonst können a) die Daten nicht eingetragen werden und b) diese später nicht angezeigt werden.
in kompakter Form:
PHP-Code:
<?php
$dbhost = 'localhost';
$dblogin = 'nutzername';
$dbpasswd = 'passwort';
$dbname = 'datenbankname';
mysql_connect($dbhost, $dblogin, $dbpasswd) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
?>
Zum Schluß sollte die Verbindung dann auch noch mal geschlossen werden:
PHP-Code:
<?php
mysql_close();
?>
Damit sieht unser Quellcode so aus:
PHP-Code:
<?php
$dbhost = 'localhost';
$dblogin = 'nutzername';
$dbpasswd = 'passwort';
$dbname = 'datenbankname';
mysql_connect($dbhost, $dblogin, $dbpasswd) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
mysql_close()
?>
Nun werden wir die Daten in die Datenbank schreiben:
PHP-Code:
<?php
$sql = "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['eintrag']."')";
mysql_query($sql);
?>
Achtung: Noch sind die Daten absolut ungeprüft. So kann keine Sicherheit gewährleistet werden!
Damit der user auch weiß, dass er was eingetragen hat sollten wir im ein 'Danke' hinterlassen.
Somit ist der Code wie folgt:
PHP-Code:
<?php
$dbhost = 'localhost';
$dblogin = 'nutzername';
$dbpasswd = 'passwort';
$dbname = 'datenbankname';
mysql_connect($dbhost, $dblogin, $dbpasswd) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
echo '<h2>mein Gästebuch</h2>';
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
$sql = "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['eintrag']."')";
mysql_query($sql);
echo 'Danke für deinen Eintrag';
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
mysql_close()
?>
Somit fehlt nur noch die Anzeige der Daten aus der Datenbank. Damit alle Daten angezeigt werden bedienen wir uns einer while-Schleife. Diese wird solange fortgeführt, bis alle Daten ausgelesen sind.
PHP-Code:
<?php
$sql = "SELECT ident, zeitpunkt, name, mail, nachricht from gaestebuch ORDER BY ident DESC";
$result = mysql_query($sql) or die (mysql_error());
while($zeile=mysql_fetch_assoc($result))
{
echo "Name: ".$zeile['name']."<br />Nachricht: ".$zeile['nachricht']."<br /><br />";
}
?>
Eigentlich sind wir nun fertig:
PHP-Code:
<?php
$dbhost = 'localhost';
$dblogin = 'nutzername';
$dbpasswd = 'passwort';
$dbname = 'datenbankname';
mysql_connect($dbhost, $dblogin, $dbpasswd) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
echo '<h2>mein Gästebuch</h2>';
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
$sql = "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['eintrag']."')";
mysql_query($sql);
echo 'Danke für deinen Eintrag';
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
$sql = "SELECT ident, zeitpunkt, name, mail, nachricht from gaestebuch ORDER BY ident DESC";
$result = mysql_query($sql) or die (mysql_error());
while($zeile=mysql_fetch_assoc($result))
{
echo "Name: ".$zeile['name']."<br />Nachricht: ".$zeile['nachricht']."<br /><br />";
}
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
mysql_close()
?>
Ich verzichte hier ganz bewusst darauf, dass die Ausgabe der Daten schön aussieht. Ihr sollte hier ja schließlich lernen Dinge selbst zu lösen.
Das Problem das nun auftaucht ist, dass jeder nun alles eintragen kann, auch Dinge, die dort die Sicherheit gefährden könnten! Also die Sicherheit der Datenbank. Daher müßt ihr die Daten prüfen, bevor ihr sie eintragt!
Dies gilt für den Namen, die eMail-Adresse und die Nachricht:
PHP-Code:
<?php
strip_tags(mysql_escape_string($variable))
?>
So wird mit verhindert, dass andere HTML-Code oder MySQL-Anweisungen einschleusen:
PHP-Code:
<?php
$dbhost = 'localhost';
$dblogin = 'nutzername';
$dbpasswd = 'passwort';
$dbname = 'datenbankname';
mysql_connect($dbhost, $dblogin, $dbpasswd) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
echo '<h2>mein Gästebuch</h2>';
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
$sql = "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".strip_tags(mysql_escape_string($_POST['name']))."', '".strip_tags(mysql_escape_string($_POST['email']))."', '".strip_tags(mysql_escape_string($_POST['eintrag']))."')";
mysql_query($sql);
echo 'Danke für deinen Eintrag';
// wenn ihr eine eMail wollt, wenn sich jmd. eingetragen hat, dann könnt ihr diese hier platzieren.
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
$sql = "SELECT ident, zeitpunkt, name, mail, nachricht from gaestebuch ORDER BY ident DESC";
$result = mysql_query($sql) or die (mysql_error());
while($zeile=mysql_fetch_assoc($result))
{
echo "Name: ".$zeile['name']."<br />Nachricht: ".$zeile['nachricht']."<br /><br />";
}
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
mysql_close()
?>
Jetzt solltet Ihr eigentlich in der Lage sein, das Script ohne Vorlage nachzuprogrammieren. Die verwendeten Funktionen findet Ihr alle im
PHP-Manual und
MySQL-Manual .
Wenn ihr das Gästebuch um eine Blätterfunktion erweitern wollt, dann schaut hier:
Blätterfunktion mit MySQL
Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im
PHP-Forum mit einem Verweis auf dieses Tutorial.
Danke.
Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.
Grüße Jann Hendrik