[PHP] Gästebuch ohne Datenbank

Drucken
( 12 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:
  • gaestebuch.php
  • gaestebuch.txt

Ö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

 

 

 

 



  • Stefan

    schrieb am 2012-05-08 08:11:36

    hallo wo liegt Problem was habe ich falsch gemacht immer Fehler Meldung komt

    Not Found

    The requested URL /Prostinac-www/gaestebuch.php was not found on this server.

    Auf Kommentar antworten

    • Jonny132

      schrieb am 2012-05-08 08:46:57

      Hallo Stefan,

      dies bedeutet, dass die Datei 'gaestebuch.php' nicht im Verzeichnis '/Prostinac-www/' gefunden wurde.
      Überprüfe bitte nochmals die korrekte Pfadangabe mit Groß -und Kleinschreibung.

      sg

      Auf Kommentar antworten

      • Stefan

        schrieb am 2012-05-08 15:10:25

        Hallo

        link: http://prostinac.ch/Prostinac-www/Prostinac.php

        Auf Kommentar antworten

        • Jonny132

          schrieb am 2012-05-09 17:27:00

          Hallo,
          der gepostete Link gibt einen 404-Error.

          Bitte beachte dass die Datei 'gaestebuch.php' heissen muss! UND auf dem Server im gleichen Verzeichnis eine Datei namens 'gaestebuch.txt' existieren muss.

          Bitte bei weiteren Fragen im Forum posten!

          Danke.

Veröffentlichen Sie ihre Kommentare ...