PHP-Gästebuch ohne MySQL-Datenbank

Dies ist ein kurzes Tutorial zur Erstellung eines Gästebuchs zur Einbindung in eine Website. Es handelt sich um ein Script, geschrieben in HTML und PHP, welches sich leicht an das Layout einer Website anpassen lässt und eine einfache Gruß-Möglichkeit darstellt.

Das Gästebuch arbeitet ohne Datenbank (wie MySQL), sondern nutzt zum Abspeichern eine txt-Datei.

Die Eingabefelder umfassen…

  • Name (Pflichtfeld)
  • Email (Pflichtfeld)
  • Website
  • Nachricht (Pflichtfeld)

Gespeichert werden die oben genannten Eingabefelder, sowie Datum und Uhrzeit des Eintrags.

Ausgegeben werden…

  • Name
  • Email (einstellbar, Email wird nach Absenden auf Gültigkeit geprüft)
  • Website (einstellbar)
  • Nachricht
  • Datum
  • Uhrzeit

Tutorial

Das Gästebuch benötigt drei Dateien: eine zum Auflisten aller Einträge, eine zum Verarbeiten und Abspeichern der Daten und eine, in welcher die Daten gesichert werden. Sie werden im Hauptverzeichnis des FTP-Servers (Webspace) angelegt:

  • guestbook.php
  • gb-data.txt
  • gb-new.php

Auflisten aller Einträge

(guestbook.php)

Für die Ausgabe der bereits verfassten Einträge im Gästebuch wird die Datei “gb-data.txt” eingelesen, die enthaltenen Einträge getrennt und in Sinnabschnitte (Name, Email, …) eingeteilt. Danach werden sie in einer Schleife ausgegeben. Unterhalb der Ausgabe befindet sich zugleich das HTML-Formular für das Verfassen eines neuen Eintrags. Der HTML- und PHP-Code der “guestbook.php” könnte so aussehen:

<?php
header("Content-Type: text/html; charset=utf-8"); // Anweisung an den Browser, welcher Zeichensatz verwendet werden soll.
?>
<!doctype html>
<html>
	<head>
		<meta name="content-type" content="text/html; charset=utf-8" />
		<title>Gästebuch</title>
	</head>

	<body>
		<h1>Gästebuch</h1>
		<p>Dies ist das Gästebuch von [...]</p>

		<!-- START OF GUESTBOOK-CODE -->

			<!-- START OF LIST -->
			<h2>Gästebucheinträge lesen:</h2>
			<ol id="guestbook-list">
			<?php
			$zeige_email = false; // Bestimmt, ob Email angezeigt (true) oder nicht angezeigt (false) werden soll
			$zeige_website = true; // Bestimmt, ob Website-URL angezeigt (true) oder nicht angezeigt (false) werden soll
			// Einlesen und Splitten der Datei:
			$datei = implode(file("gb-data.txt"));
			$datei = explode("<>", $datei);
			// Sortieren der datei:
			krsort($datei);
			// Schleife für die Ausgabe:
			foreach($datei as $eintrag){
				$daten = explode("\n", $eintrag);
				?>
				<li>
					<h3>Von <?php echo $daten[0]; ?></h3>
					<p>am <?php echo $daten[1]; ?> um <?php echo $daten[2]; ?> Uhr:</p>
					<blockquote><?php echo $daten[3]; ?></blockquote>
				<?php
				// Überprüft, ob Email ausgegeben werden soll
				if($zeige_email === true){
					?>
					<p>Email: <?php echo $daten[4]; ?></p>
					<?php
				}
				?>
				<?php
				// Überprüft, ob Website ausgegeben werden soll
				if($zeige_website === true && $daten[5] != ''){
					?>
					<p><a href="<?php echo $daten[5]; ?>"><?php echo $daten[0]; ?>'s Website</a></p>
					<?php
				}
				?>
				</li>
				<?php
			}
			?>
			</ol>
			<!-- END OF LIST -->

			<!-- START OF FORM -->
			<h2>Gästebucheintrag verfassen</h2>
			<form action="gb-new.php" method="post">
				<p><label>Ihr Name* <input type="text" name="name" /></label></p>
				<p><label>Ihre Email* <input type="text" name="email" /></label></p>
				<p><label>Ihre Website <input type="text" name="website" /></label></p>
				<p><label>Ihre Nachricht* <textarea name="nachricht"></textarea> (mit <i>http://</i> zu Beginn)</label></p>
				<p><label><input type="submit" name="eintragen" value="Eintrag abschicken" /></label></p>
			</form>
			<!-- END OF FORM -->

		<!-- END OF GUESTBOOK-CODE -->

	</body>
</html>

Speicherdatei für Einträge

(gb-data.txt)

Jeder Eintrag wird in der Datei “gb-data.txt” gesichert, wobei sie durch ein Kürzel “<>” von einander getrennt werden. In der Datei besteht jeder Eintrag aus sechs Zeilen: Name, Datum, Uhrzeit, Nachricht, Email und Website. Bevor das Gästebuch-Script in Betrieb genommen wird, sollte “gb-data.txt” mit einem ersten Beitrag gefüllt werden. Beispiel:

Vorname Nachname (Name)
13.12.2010 (Datum)
21:28 (Uhrzeit)
Kurzer Gruß! (Nachricht)
abc@server.tld (Email)
http://domain.tld/ (Website)

Im späteren braucht diese Datei nicht mehr bearbeitet werden.

Eingaben verarbeiten und abspeichern

(gb-new.php)

Nachdem das HTML-Formular von “guestbook.php” abgeschickt wurde, werden die Daten per HTTP-POST an die Datei “gb-new.php” gesendet, welche sie entgegen nimmt, auswertet und speichert. Der PHP- und HTML-Code lautet:

<?php
header("Content-Type: text/html; charset=utf-8");
?>
<!doctype html>
<html>
	<head>
		<meta name="content-type" content="text/html; charset=utf-8" />
		<title>Gästebucheintrag verfassen</title>
	</head>
	<body>

	<?php

	if(isset($_POST['eintragen'])){

		if(!empty($_POST['name']) && trim($_POST['name']) != '' &&
			!empty($_POST['email']) && trim($_POST['email']) != '' &&
			!empty($_POST['nachricht']) && trim($_POST['nachricht']) != ''){

			if(!preg_match("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}^", $_POST['email'])){
				// Meldung, wenn Email-Adresse ungültig ist:
				?>
				<p>Die eingegebene Email-Adresse ist ungültig.</p>
				<p><a href="guestbook.php">Zurück zum Gästebuch</a></p>
				<?php
			}else{
				// Datei öffnen:
				$datei = fopen("gb-data.txt", "a");
				// Zu schreibenden Inhalt zusammen setzen:
				$inhalt = "<>".str_replace("\n", "<br />", htmlspecialchars($_POST['name']))."\n".
							date("d.m.Y")."\n".
							date("H:i")."\n".
							str_replace("\n", "<br />", htmlspecialchars($_POST['nachricht']))."\n".
							str_replace("\n", "<br />", htmlspecialchars($_POST['email']))."\n".
							str_replace("\n", "<br />", htmlspecialchars($_POST['website']));
				// Datei beschreiben:
				fwrite($datei, $inhalt);
				// Datei schließen:
				fclose($datei);
				// Meldung ausgeben:
				?>
				<h1>Vielen Dank für Ihren Eintrag!</h1>
				<p><a href="guestbook.php">Zurück zum Gästebuch</a></p>
				<?php
			}

		}else{
			// Meldung, wenn Pflichfelder nicht ausgefüllt wurden:
			?>
			<p>Bitte füllen Sie alle mit * gekennzeichneten Felder aus.</p>
				<p><a href="guestbook.php">Zurück zum Gästebuch</a></p>
			<?php
		}

	}

	?>

	</body>
</html>

Fertig!

Hiermit ist das PHP-Gästebuch fertiggestellt. Der HTML-Code kann noch frei bearbeitet und ergänzt, sowie Stylesheets eingefügt werden. Viel Spaß damit!

Dieser Artikel wurde vertaggt mit , , , , , .
Kategorien: PHP, Tutorial, Webdesign

Hat Ihnen dieser Artikel gefallen? - Dann abonnieren Sie vlblog um über neue Themen rund ums Web informiert zu werden.

20 Kommentare zu “PHP-Gästebuch ohne MySQL-Datenbank”

  1. Xaver Kasparek sagt:

    Hallo,
    ein sehr einfaches, aber gutes skript, finde ich…
    wie können deutsche Umlaute korrekt dargestellt werden??
    mfg xaver

    • vitus37 sagt:

      Wichtig ist, dass die Zeichenkodierung der PHP-Dateien mit denen des HTTP-Headers übereinstimmen.

  2. MaxMartin sagt:

    Hallo,
    ich finde es super, dass jemand solch Skripte veröffentlicht (Daumen hoch).
    Leider funktioniert das Skript bei mir nicht, ich habe schon lange nach Fehlern gesucht aber nie welche gefunden, vielleicht habt ihr ja noch einen Tipp für mich.
    MfG Max

  3. Dustin sagt:

    Super script. Genau das was ich gesucht habe :)

    Problem: Trotz dem meta tags im head gibt er mir den inhalt nicht aus.. immer nur die uhrzeit und datum + namen :/

    Ich hoffe du kannst mir helfen :)

    Bitte melde dich an meine e-mail

  4. Dustin sagt:

    Ich hab vergessen dazu zu sagen wenn ein Ö Ä oder Ü in einem Wort drin ist

  5. Hannes sagt:

    charset=ISO-8859-1 verwenden und Schreibberechtigung für gb-data aktivieren dann funzt es super. Vielen Dank :)

  6. ersetzen sagt:

    // Das Hacken mit Code verhindern:
    $_POST['name'] = str_replace ( “”, “-”, $_POST['name'] );

    $_POST['email'] = str_replace ( “”, “-”, $_POST['email'] );

    $_POST['nachricht'] = str_replace ( “”, “-”, $_POST['nachricht'] );

  7. mtwde sagt:

    Schönes funktionierendes PHP-Script mit dem man einiges anfangen kann. Nicht so überladen wie einige andere die man sieht. Vor allem kann man das fehlende auf die Weise einfach selbst einfügen.
    Danke!

  8. Stefan sagt:

    Funtioniert super,
    leider muss man jede Zeile einzeln kopieren !

  9. Bernd sagt:

    Ich bin sehr zufrieden mit dem Script. Läuft nach anfänglichen Schwierigkeiten (Sebstgemacht!)sehr gut.
    Vielen Dank.

  10. John sagt:

    Besten Dank! Top Skript und funktioniert perfekt! Genau das was ich gesucht habe!!
    Liebe Grüsse aus der Schweiz, John

  11. Daniel sagt:

    wirklich cool

  12. Volker sagt:

    Ein wirklich gutes Script, was ich schon lange suchte VIELEN DANK!! Nur eine kurze Frage: Ich möchte zwischen den Einträgen einen Trennstich haben , wo miss ich den Tag einbauen?

    Danke und lieben Gruß
    Volker

  13. Felix sagt:

    Super!, hat bei mir echt gut geklappt!

  14. Bianca sagt:

    Bin ebenfalls sehr zufrieden mit dem Script!

  15. Anti sagt:

    jo funktioniert

  16. Thomas sagt:

    Vielen Dank, das Skript funktioniert super und ist zum Anpassen an die eigene Seite hervorragend geeignet.

  17. Fabian sagt:

    Hallo zusammen,

    ich bin den einzelnen Schritten gefolgt. Jedoch werden bei mir die einzelnen Kommentare die ich im Formular eingetragen habe nicht ausgegeben und ich weis nicht woran es liegt, da ich in php nur die nötigsten Schulbasics habe. Für ein Projekt sollen wir ein Videoportal erstllen, diese Kommentarfunktion wäre eine schöne Ergänzung. Das guestbook.php habe ich in meine html seite videoplayer kopiert, sodass man unter ein Video ein Kommentar schreiben kann. gb-data. txt und gb-new.php hab ich im Editor angelegt und gespeichert. Das müsste so ja richtig sein oder. Im Code selber hab ich nirgends was verändert. Muss man was verändern oder aktualisieren ?
    Danke schon mal im Vorraus !! :)) Wenn das klappt wird das Projekt super :)

    Gruß Fabian

  18. Super Script ! Vielen Dank !

    Gibt es eine Moeglichkeit im Script die Zeitzohne zu aendern,
    da der Server in Europa ist und die ich und die User in Thailand ?

    Lieber Gruss

    Juerg

    Chiangmai

Hinterlasse eine Antwort