Jeder, der Webspace mit PHP-Unterstützung besitzt, kann sich mit Hilfe des folgenden Tutorials ohne besondere Grundkenntnisse ein einfaches Gästebuch für seine Website “bauen”. Dies hilft auch beim praxisorientierten Erlernen der serverseitigen Programmiersprache PHP.
Warum PHP?
Die serverseitige Programmiersprache PHP ermöglicht es individuelle, dynamische Programme, auch Scripte genannt, für die eigene Website zu erstellen. Das Script “baut” dann je nach Anfrage den entsprechenden HTML-Code für den Browser, auch Client genannt, zusammen.
Dies setzt lediglich ein entsprechendes Webspace-Paket vorraus, da auf dem Server die PHP-Software installiert sein muss. Das ist jedoch mittlerweile bei den meisten Angeboten ab 5 Euro standard. Spezielle Vorraussetzungen für die Nutzerseite, also den Browser, bestehen nicht. PHP eignet sich für “Anfänger” insofern besser, da es leichter zu erlernen und anzuwenden ist, als andere Sprachen wie z.B. Perl.
Grundsätzliche Anforderungen
Was muss ein Gästebuch-Script ermöglichen? Der Besucher soll eigene Einträge in Form von Texten eingeben und schließlich auf der Website des Besitzers veröffentlichen können. So kann man nützliches Feedback, Grüße oder Kritik dem Websiteinhaber gegenüber öffentlich ohne großen Aufwand äußern. Dabei kann der Nutzer auch Informationen über seine Person wie Name, Emailadresse und Homepage angeben.
Die Einträge mit den Daten der jeweiligen Verfasser sollen dann dauerhaft gespeichert und beim Aufrufen des Gästebuchs der Reihe nach untereinander aufgelistet werden.
Das Eingabeformular
Zunächst kann man wie von HTML gewohnt ein Eingabeformular erstellen. Öffnen Sie einen beliebigen Texteditor und legen eine neue Datei mit dem Namen “gaestebuch.php” an. Wichtig dabei ist, dass Sie auf die korrekte Dateiendung achten. Den folgenden Codeschnipsel können Sie dann einfach hineinkopieren :
<!– Eingabeformular Anfang –>
<b>Ins Gästebuch eintragen:</b><br>
<form action=”gaestebuch.php” method=”post” name=”eingabe”>
Name:<br>
<input type=”text” name=”name” size=”47″><br>
Email:<br>
<input type=”text” name=”email” size=”47″><br>
Internetseite:<br>
<input type=”text” name=”url” value=”http://” size=”47″><br>
Eintrag:<br>
<textarea name=”eintrag” rows=”10″ cols=”40″></textarea><br>
<br>
<input type=”submit” value=”eintragen” name=”absenden”> <input type=”reset” value=”zurücksetzen”>
</form>
<!– Eingabeformular Ende –>
Einträge speichern und ausgeben
Um nun neue Einträge speichern zu können, benötigen wir PHP. Der Programmcode für PHP-Scripte beginnt grundsatzlich mit <?php bzw. <? und kann wie HTML in einem beliebigen Text-Editor angelegt werden. Also hängen wir folgenden Code in dem geöffneten Dokument einfach durch Kopieren und Einfügen an:
<?php
if (isset($absenden)){
Die sogenannte If-Abfrage führt den folgenden Code nur aus, wenn das Formular “abgesendet” wurde (Bedingung).
$datei = fopen(“eintraege.txt”,”a”);
Dieser Befehl öffnet bzw. erstellt die Textdatei und hängt neue Daten an (engl. add).
$eintrag = ereg_replace(“n”,”<br>”,$eintrag);
Nun werden Zeilenumbrüche in den entsprechenden HTML-Tag ersetzt, um später die korrekte Darstellung der Einträge zu gewährleisten.
$eintrag = stripslashes($eintrag);
Mit stripslashes() werden Slashes bzw. Backslashes herausgefiltert, die PHP vor belegte Sonderzeichen einfügt.
$daten = “<hr><b>Name:</b> $name<br>
<b>Email:</b> <a href=mailto:$email>$email</a><br>
<b>Internetseite:</b> <a href=$url>$url</a><br>
<b>Eintrag:</b><br>
$eintrag<br>nn”;
Nun werden die Daten zusammengefasst und für die spätere Ausgabe formatiert.
fwrite($datei,$daten);
fclose($datei);
}
Die Daten werden dann in die Datei geschrieben (engl. write) und die Datei abschließend geschlossen. Die schließende geschweifte Klammer markiert das Ende des Codes, der durch die Abfrage eingeschlossen ist.
if (file_exists(“eintraege.txt”)){
Diese Abfrage überprüft, ob die Datei mit Einträgen überhaupt schon vorhanden ist, um Fehlerausgaben zu vermeiden, wenn zuvor kein Eintrag gespeichert wurde.
$datei = fopen(“eintraege.txt”,”r”);
$daten = fread($datei,filesize(“eintraege.txt”));
Nun wird die Textdatei zum Auslesen (engl. read) geöffnet und die Daten aus der Datei vollständig ausgelesen.
print $daten;
Mit Hilfe des print-Befehls werden dann die gespeicherten Einträge ausgegeben.
} else {
print “<b>Es sind keine Einträge vorhanden!</b>”;
}
?>
Trifft die Bedingung, dass die Textdatei mit gespeicherten Daten vorhanden ist, nicht zu, wird ein alternativer Code ausgeführt, hier eine Meldung ausgegeben und die Abfrage beendet. Als letztes wird der PHP-Code geschlossen.
Eigenes Gästebuch im Handumdrehen
Der oben beschriebene Code bietet Ihnen ein einfaches Gästebuch. Dieses können Sie nun als Grundbaustein für Ihr eigenes Script nutzen und beliebig erweitern, verändern bzw. anpassen und dann auf Ihren Webscape hochladen. Mehr über mögliche Verbesserungen erfahren Sie in dem in Kürze folgenden zweiten Teil dieses Workshops.
Links zum Thema:
Beispiel-Gästebuch – Das oben beschriebene Script im Einsatz (derzeit deaktiv)
Diese Artikel könnten Sie interessieren:
PHP-Einführung
Lokalen Webserver einrichten
(CBS | 24.09.02)



Hi,
wie macht man, dass nur 10 Einträge pro Seite zu sehen sind?
Kilian
Dies ist eigentlich recht einfach zu lösen. Dies werde ich dann auch versuchen im zweiten Teil des Tutorials abzuhandeln.
Vom Prinzip her: Man muss die Anzahl der Beiträge zählen und dann jeweils nur eine bestimmte Zahl an Beiträgen (pro Seite) ausgeben.
Wie gesagt genaueres dazu im folgenden Teil…;D
Hallo,
in dem Testgästebuch werden die neuen Einträge immer unten angehhängt. In mein erstelltes Gästebuch schreibt er neue E. oben hin. Leider hab ich nicht kapiert wieso. Könnten Sie mir das erklären?
Hier ein kleiner Ausschnitt:
$i=1;
$datei = fopen(“daten.dat”,”r”);
while (!feof($datei)) {
$zeile[$i]=fgets($datei,10000);
$i++;
}
fclose($datei);
$j=1;
$datei=fopen(“daten.dat”,”w”);
fputs ($datei,”$datenn”);
while ($j<$i) {
fputs ($datei,”$zeile[$j]“);
$j++;
}
fclose($datei);
Wenn keine Homepageadresse angegeben wird, sollte kein http:// erscheinen. Da reicht eine kleine Schleife.
Ich finde es sehr toll, dass Sie Beispiele für die Verwendung mit PHP anbieten!
MfG,
Friedrich Fröhlich
PS: Ich hab eine Frage zu einem selbstgemachten Newssystem, weiß aber nicht, wo ich die hier stellen darf!
Hallo Friedrich,
Mir scheint es, dass der erste Absatz die alten Einträge ausliest, der zweite speichert aber zunächst den neuen Eintrag und hängt dann die alten Einträgen unten an.
Wenn Du dies ändern möchtest verwende einfach anstatt des oberen Quelltextes folgendes:
$datei=fopen(“daten.dat”,”a”);
fputs ($datei,”$datenn”);
fclose($datei);
Mit dem Attribut “a”, werden der neue Eintrag an die vorhandene Datei angehängt.
Dies ist natürlich ungetestet. Ich kann Dir nicht garantieren, dass es funktioniert, dazu bräuchte ich den gesamten Quelltext.
Ich hoffe ich konnte Dir helfen. Gern schaue ich mir ggf. auch nochmal die gesamte Datei an, wenn Du sie mir per Email zusendest.
Deine Frage zum selbstgemachten News-System kannst du demnächst in unserem neuen Board “User to User” (o.ä.) stellen.
Bitte noch um etwas Geduld.
Hallo Andreas,
vielen Dank, dass Du mir diesen Teil des Codes näher erklärt hast.
Kennst Du ein sehr gutes Einsteigerbuch für PHP?
In diesem sollten viele Beispiele, wie Umfrageerstellung, vorhanden sein.
Hast Du am Anfang auch ein Buch benutzt?
MfG,
Friedrich Fröhlich
Nein, ich kenne leider kein PHP-Buch. Ich selbst habe auch nie eines verwendet.
Meine Grundladen habe ich anfangs durch Tutorials im Internet gesammelt. Mittlerweile nutze ich als “Nachschlagewerk” nur noch http://selfphp.info oder http://php.net.
Hi,
kann es sein, dass der Link zum Demo-Gästebuch nicht funktioniert?
Wollte mir mal anschauen, was da als Endergebnis so rauskommt, aber da kam nur die Meldung, dass die Seite nicht vorhanden sei.
Gruß
Kristina
Vielen Dank für den Hinweis! Die Datei scheint irgendwie abhanden gekommen zu sein, aber ich habe sie wieder hochgeladen…;-)
Hi,
bei mir klappt das alles nicht … der zeigt auf meinem rechner nur den quellentext (im IE 5.5) an und auf dem server kann er die einträge nicht speichern, da kommt immer 404… was kann ich denn da falsch gemacht haben … und was brauche ich, damit er auf meinem rechner den php-code erkennt und nicht als quellentext anzeigt?
MfG:
Eugen
Er zeigt den Quelltext an? Kann es sein, dass du die Einleitungen und das Ende (<? bzw. ?>) vergessen hast?
Na, und bist du sicher, dass alle Dateien existieren?
Jonas
bei meinem gästebuch funzt was nicht. es ist unter http://rueckert.froschhausen.de/gaestebuch2/gaestebuch.php zu finden.
falls jemand mir helfen könnte, wäre ich sehr dankbar.
ansonsten ist dieses gästebuch sehr hilfreich. besser als di mit der vielen werbung. danke.
mfg
thorsten rückert
rueckert-webdesign.de
// Link vom Admin anklickbar gemacht ;-)
Letzte Änderung von Christian Boris Schmidt am 02.12.02, 20:15.
Du musst die eintraege.txt auf 777 chmoden, sonst kann PHP die Einträge nicht reinschreiben, denn der Zugriff wird sonst verweigert (wie es gerade der Fall ist)
Jonas
Wie ich per eMail mitgekriegt habe, gibt es noch Probleme mit dem Chmoden. Chmoden hat nichts mit Tabellen zu tun. Es bedeutet nur, dass du die Rechte für die Datei veränderst.
Nimm ein FTP-Programm wie WS_FTP, log dich auf den Server ein und klicke auf die eintraege.txt mit der rechten Maustaste. Dann wähle “CHMOD (UNIX)” und klicke alle kästchen an und dann auf OK.
Dann wird auf 777 gechmoded.
Jonas
@ Thorsten Rückert:
mein rechner kann dein gästebuch nicht laden…
die seite kann nicht angezeigt werden… prüf bitte nochmal den link.
@ Jonas Hahn:
Ich habe die datei mit Cute FTP Pro auf 777 gechmoded…
aber bei mir zeigt er immernoch die 404-fehlerseite an…
N E E D H E L P ! ! !
@Eugen Kuksa:
Bitte poste mal den Link zu Deinem Gästebuch. Bist Du sicher, dass Dein Server PHP unterstützt?
mien server unterstützt php und zeigt auch alles richtig an… mein pc unterstützt das nicht. aber aufm server kann er nix ins GB eintragen… keine ahnung warum… kann mir vielleicht jemand den kompletten code mit den dazugehörigen dateien (eintraege.txt oder so) (in einem stück, nicht wie in der anleitung) per e-mail schicken? wäre nett…
Ich weiß im Moment nicht, wo das Problem ist. Gut, die Adresse, die Eugen oben angegeben hat, stimmt zwar nicht (mehr), aber wenn man die 2 weglässt, kommt man zum voll funktionsfähigen Gästebuch.
Jonas
@Jonas Hahn:
Du meinst anscheinend die adresse von thorsten…
also diese adresse geht:
http://rueckert.froschhausen.de/gaestebuch/gaestebuch.php
da habe ich keine probleme gefunden.
und es reicht auch schon, wenn man auf 666 chmoded.
@ Andreas Mauf:
Das mit dem Gästebuch habe ich jetzt kapiert…. der server unterstützt php… ich habe keine probleme mehr mit dem gb.
Ich merke, es gibt viel Bedarf für die Fortsetzung des Artikels… ich hoffe ich finde demnächst Zeit! ;D
Das ist eine gute Idee…
welche themen/optionen sollen denn da noch kommen? *neugierig* ;D
Hab ich schon kurz angerissen, mehr wird nicht verraten… ;D
Insgesamt soll das Gästebuch noch komfortabler werden.
Letzte Änderung von Christian Boris Schmidt am 12.12.02, 18:48.
Ich habe das Gästebuch fast 1zu1 übernommen. Trotzdem bekommt man nachdem man auf den Submit-Button gedrückt hat eine 404.
Der Source: http://podclan.clanintern.de/tu/guestbook.txt
Das Gästebuch: http://podclan.clanintern.de/tu/guestbook.php
Die eintraege.txt hat CHMOD 666.
Der Fehler ist logisch. Das GB ist unter guestbook.php zu erreichen, die Daten werden aber an gaestebuch.php versandt. Ändere im Formtag die action einfach auf guestbook.php dann sollte alles klappen.
Jonas
In einem vorherigen Beitrag wurde erwähnt, wie man verändern kann, damit die neuen Beiträge oben bzw. unten angehängt werden. Ich habe das Gästebuch fast exakt übernommen (ausser das Layout natürlich) und möchte nun aber, dass die neuen Beiträge oben angehängt werden. Mir ist das etwas unklar. Habe es versucht, doch leider erfolglos. Was muss ich ändern?
<?php
if (isset($absenden)){
$datei = fopen(“eintraege.txt”,”a”);
$eintrag = stripslashes($eintrag);
$daten = “<hr><b>Name:</b> $name<br>
<b>Email:</b> <a href=mailto:$email>$email</a><br>
<b>Internetseite:</b> <a href=$url>$url</a><br>
<b>Eintrag:</b><br>
$eintrag<br>nn”;
fwrite($datei,$daten);
fclose($datei);
}
if (file_exists(“eintraege.txt”)){
$datei = fopen(“eintraege.txt”,”r”);
$daten = fread($datei,filesize(“eintraege.txt”));
print $daten;
} else {
print “<b>Es sind keine Einträge vorhanden!</b>”;
}
?>
MfG Martin
Sry, dachte ich hätte den Eintrag gelöscht und habe ihn deshalb nochmal eingefügt, dem war aber nicht so.
Sry
Letzte Änderung von Martin Berweger am 01.02.03, 21:25.
Hallo ihr,
gibt es eigentlich schon Teil 2 ??
Wenn nicht, darf man denn anfragen, wann es so weit ist !!
Mike
im zweiten teil würde mich interessieren, wie man einzelne einträge löschen, bearbeiten und kommentieren kann.
am besten mit einem eigenen admin-bereich.
fred
Jo das wäre super, aber mich würde immer noch die Lösung meiner oben gestellte Frage interessieren.
@Martin Berweger:
$i=1;
$datei = fopen(“eintraege.txt”,”r”);
while (!feof($datei)) {
$zeile[$i]=fgets($datei,10000);
$i++;
}
fclose($datei);
$j=1;
$datei=fopen(“eintraege.txt”,”w”);
fputs ($datei,”$datenn”);
while ($j<$i) {
fputs ($datei,”$zeile[$j]“);
$j++;
}
fclose($datei);
Hab den Code aber auch nur übernommen :-)
Ja, der zweite Teil wird kommen! Wann kann ich noch nicht ganz genau sagen. Vielleicht bis zum nächsten Newletter…;D
Danke Christian,
ist ja fast so spannend wie Harry Potter ;-)
ich freue mich darauf, wenn es soweit ist….;D
mike
Wie Harry Potter? Na, meinetwegen.
Noch ein Vorschlag für den zweiten Teil: es wäre super, wenn ihr das mit den Smilies, wie ihr es auch hier im Forum habt, vorstellen könntet, dass das also per Klick eingefügt wird usw., das kenne ich zwar vom WBB, aber wäre sicherlich interessant!
Jonas
Ja nicht??
Das passt doch nicht alles in den zweiten Teil, die ganzen Wünsche. Das gibt bestimmt einen dritten Teil…;-)
mike
Es tut mir schrecklich leid aber ich habe immer noch nicht kapiert wie dann schlussendlich mein Code aussehen muss. Habe es versucht anzupassen aber leider ohne erfolg :-8. Trotzdem danke für die Antwort.
MfG
Hallo Martin Berweger,
hier der Code, den ich für mein Gästebuch benutze:
<?php
$datum = date(“d.m.Y”);
$daten=” <img src=”http://www.astronomie24.info/images/linie2.gif” width=404 height=1 vspace=10><br><b>Datum:</b> $datum<br><b>Name:</b> <a href=”mailto:$email”>$name</a><br><b>Eintrag:</b><ul>$kommentar</ul>
“;
if (empty($kommentar))
{
require (“gvorlage_1.php”);
echo “Sie haben kein Kommentar angegeben!<br><a href=javascript:history.go(-1);>Zurück zur vorherigen Seite</a>”;
require (“gvorlage_2.php”);
}
else
if(!ereg(“.+@.+..+”, $email)&& !empty($email))
{
require (“gvorlage_1.php”);
echo “Die E-Mail-Adresse ist falsch.<br><a href=javascript:history.go(-1);>Zurück zur vorherigen Seite</a>”;
require (“gvorlage_2.php”);
}
else
if (empty($name))
{
require (“gvorlage_1.php”);
echo “Sie haben Ihren Namen nicht angegeben.<br><a href=javascript:history.go(-1);>Zurück zur vorherigen Seite</a>”;
require (“gvorlage_2.php”);
}
else
if(!ereg(“http:”, $homepage)&& !empty($homepage))
{
require (“gvorlage_1.php”);
echo “Die Homepage-Adresse ist falsch.<br><a href=javascript:history.go(-1);>Zurück zur vorherigen Seite</a>”;
require (“gvorlage_2.php”);
}
else
{
$i=1;
$datei = fopen(“daten.dat”,”r”);
while (!feof($datei)) {
$zeile[$i]=fgets($datei,10000);
$i++;
}
fclose($datei);
$j=1;
$datei=fopen(“daten.dat”,”w”);
fputs ($datei,”$datenn”);
while ($j<$i) {
fputs ($datei,”$zeile[$j]“);
$j++;
}
fclose($datei);
require (“gvorlage_1.php”);
echo “Eintrag gespeichert. <a href=”">Weiter zum Gästebuch</a><meta http-equiv=refresh content=”3; URL=index.php”>”;
require (“gvorlage_2.php”);
}
?>
Vielen Dank @ Friedrich Fröhlich.
Im Gästebuch habe ich noch aber folgendes Problem: Sollte jemand auf aktualisieren drücken, so schreibt er den Eintrag ein zweites mal.
Wie ist es möglich zu verhindern, dass jemand mit aktualisieren beliebig viele Einträge schreiben kann?
Thx & MfG
Martin Berweger
Hallo Martin, das ist richtig. Du solltest daher unter die Meldung “Eintragung erfolgreich” noch eine Redirection zum Gästebuch machen.
Das geht so:
header(“location:gaestebuch.php”);
// statt gaestebuch.php kannst du eben die URL deiner Eintragsliste nehmen
Jonas
Ich habe mal das Gästebuch in zwei Dateien aufgeteilt, und somit versucht, eine eigenen Seite zum eintragen zu bauen. das hat auch geklappt. auch habe ich die einträge in tabellen ausgerichtet. schaut euch doch mal das fertige gästebuch mal an. es liegt unter
http://www.liederfreund.de/vorstand/gbuch.htm ;-)
Ich denke, du kannst es schon so lassen, vielleicht die Schriftart ein wenig kleiner, dann wirkt’s nicht so aufdringlich. Außerdem würde ich, wenn schon, entweder alles oder gar nix zentrieren – also alles :-)
Jonas
ist eigentlich schon ein zeitpunkt fetgelegt, an dem der zweite teil kommen sollte? das mit dem admin-bereich wünsche ich mir auch (einträge löchen, kommentare dazuschreiben, etc.).
mfg
thorsten rückert