[PHP] Gästebuch ohne Datenbank

Drucken
( 15 Votes )
Hauptkategorie: Programmieren Kategorie: PHP
Erstellt am 13.03.2012 Zuletzt aktualisiert am 09.08.2012 Geschrieben von Jonny132
In diesem Tutorial zeige ich euch, wie man ein Gästebuch ohne Datenbank realisieren kann. Dies ist vorallem hilfreich wenn einem nur PHP zur Verfügung steht. Als Datenhalter missbrauchen wir dazu eine TXT-Datei.

Hier könnt ihr schonal das Ergebnis betrachten und testen!

Erzeugen Sie zuerst 2 Dateien:

Öffnen Sie die Datei 'gaestebuch.php' und fügen Sie das HTML-Grundgerüst ein:

<html>
  <head>
    <title>G&auml;stebuch</title>
  </head>
  <body>
  </body>
</html>
Wir arbeiten ausschliesslich im Body-Teil dieses Gerüst. Das heisst der ganze Code der jetzt noch kommt fügen sie bitte zwischen die 'body'-Tags ein.

Nun kommt der interessante Teil, und zwar die Speicherung der Daten im falle eines Postbacks (Wenn der User den Submit-Button gedrückt hat und die Daten übermittelt werden).

<?php
if(isset($_POST['name']))
{
  if($_POST['name'] != '' && $_POST['message'] != '')
  {
    $toSave = htmlspecialchars ($_POST['name']) . '\n';
    $toSave .= htmlspecialchars ($_POST['message']) . '\n';
    file_put_contents('gaestebuch.txt',
                $toSave .file_get_contents('gaestebuch.txt'));
  }
  else
  {
    echo '<p style="background-color:red;">Bitte einen Namen und eine Nachricht eingeben!</p>';
  }
}
?>
Zuerst überprüfen wir ob wir in einem Postback sind, indem wir abfragen ob die Variable 'name' im POST-Array gesetzt ist. Ist sie es nicht müssen wir nichts machen. Dann überprüfen wir zusätzlich noch, ob in den Variablen auch ein Wert steht, ansonsten wird eine Fehlermeldung ausgegeben.
Wir setzten uns nun in der Variable $toSave den zu speichernden Inhalt zusammen. Die übertragenen Werte escapen wir mittels htmlspecialchars um Schadcode (z.B. JavaScript)  herauszufiltern. Mittels \n fügen wir einen Zeilenumbruch hinzu.
Die Funktion file_put_contents setzt den Inhalt einer Datei mit dem übergebenen Text. Als ersten Parameter übernimmt die Funktion den Dateinamen den sie beschreiben soll und als 2. Parameter den Text den sie in die Datei schreiben soll.
Als 2. Parameter übergeben wir die Variable $toSave die unseren neuen Gästebucheintrag beinhaltet + den aktuellen Inhalt der Datei, den wir mittels file_get_contents auslesen. Somit steht der neueste Eintrag an erster Stelle der Datei.

Somit hätten wir die Logik des Speicherns fertig. Fehlen noch die Steuerelemente in dem der Benutzer seinen Gästebucheintrag verfassen kann und die Ausgabe der Datei bzw. des Gästebuchs.
<p>Neuer G&auml;stebucheintrag:</p>
<form action="gaestebuch.php" method="POST">
<input type="text" name="name"><br />
<textarea cols="16" rows="5" name="message"></textarea>
<input type="submit" value="Absenden"/>
</form>
Somit hätten wir eine Primitive Form in der, der Benutzer einen neuen Gästebucheintrag verfassen kann.
Kommen wir nun zur Ausgabe des Gästebuchs:

<?php
$messages = explode('\n', file_get_contents('gaestebuch.txt'));
$isName = true;
foreach($messages as $message)
{
  if($message != '')
  {
    if($isName)
    {
      echo '<p style="background-color:lightgreen;">' . $message . ' hat geschrieben:</p>';
      $isName = false;
    }
    else
    {
      echo '<p>' . $message . '</p>';
      $isName = true;
    }
  }
}
?>
Wiederrum benützen wir die Funktion file_get_contents um den Inhalt der Datei auszulesen. Mittels explode 'zerstückeln' wir den Inhalt bei den Zeilenumbrüchen in ein Array.
In dem Array stehen nun Abwechselnd der Name und der Inhalt des Gästebucheintrags. Deshalb benutzen wir eine Hilfsvariable namens $isName in der wir festhalten ob wir im Moment einen Namen oder die Nachricht 'in der Hand halten'. Der rest des Codes dürfte eigentlich selbsterklärend sein.

Und das ist unser kleines Gästebuch-Skript. Nun können Sie die 2 Dateien auf Ihren Webspace hochladen und aufrufen:

Produktivbeispiel

 

 

 

 



Veröffentlichen Sie ihre Kommentare ...