Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Gästebuch auf Textdatei basierend
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 12.01.2005, 21:56 Nach oben    #1
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard [PHP] Gästebuch auf Textdatei basierend

In diesem Tutorial wird euch die Möglichkeit geboten ein Gästebuch in wenigen Schritten selbst programmieren zu können.

Alles was wir dafür brauchen ist:
- eine Textdatei in der die Daten gespeichert werden
- ein Datei ich welcher das Gästebuch angezeigt wird und in welchem sich auch das Formular befindet um weitere Einträge zu machen


Ich nenne einfach mal die Textdatei 'gaestebuch.txt'.

Vorweg sollten wir uns darüber Gedanken machen, was alles in einem solchem Gästebuch angezeigt werden soll.
Mir fallen da spontan ein:
- Name
- Datum
- Text
- eMail-Adresse
- IP dessen, der den Eintrag gemacht hat

Diese Liste ließe sich sicherlich erweitern, aber für den Anfang soll es reichen. Ihr könnt diese ja nach Belieben ergänzen!

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 Datei 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 Textdatei 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 Datei 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('d.m.Y - H:i:s')

Die IP kann erfasst werden durch die superglobale Server-Variable:
$_SERVER["REMOTE_ADDR"]

Damit sieht der Quellcode nun so aus:
PHP-Code:
<?php
  
if(isset($_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)

   // als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
   // das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
    
$eintrag date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";

    
// Der Name der Gästebuch-Datei lautet:
    
$datenbankdatei 'gaestebuch.txt';

    
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
    
$file fopen($datenbankdatei,"a");

    
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
    
fwrite($file$eintrag);

    
// Datei schliessen
    
fclose($file);

    
// Ausgabe für den user:
    
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';
  }
  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:
    
echo '<h2>mein Gästebuch</h2>';

    
// Trennlinie zwischen alten Einträgen und dem Formular:
    
echo '<hr />';

    
// 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>'
;
  }
?>
Da nun die Struktur der Datenbank-Datei festliegt können wir uns nun an das Werk machen und diese Daten für die Anzeige wieder herausholen.
Das Öffnen einer Datei zum lesen geschieht mit fopen mit dem Modus 'r':
$file = fopen ($datenbankdatei, "r");
Nun wird zeilenweise ausgelesen. Eine einzelne Zeile kann mir fgets ausgelesen werden. Mit feof wird überrüft, ob wir bereits am Ende der Datei angelangt sind. Mit while wird das solange wiederholt, bis die Datei vollständig ausgelesen wurde.
Hier erstmal der Code:
PHP-Code:
<?php
    
// Öffnen der Datei im Lese-Modus:
    
$file fopen($datenbankdatei'r');

    
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
    
while (!feof($file))
    {
      
// Zeile für Zeile auslesen:
      
$zeile  fgets($file5000);
      
$daten  explode(" || "$zeile);
      
$datum  $daten[0];
      
$ip     $daten[1];
      
$name   $daten[2];
      
$email  $daten[3];
      
$eintrag $daten[4];
    }
    
fclose($file);
?>
mit der Funktion explode wird die ausgelesene Zeile wieder in die einzelen Daten zerlegt. Dies geschieht anhand der vorher definierten Trennzeichen ' || '.
Die geöffnete Datei wird wieder geschlossen.

Da nun die Daten wieder einzeln vorliegen fehlt nur noch die Ausgabe auf den Bildschirm:
PHP-Code:
<?php
      
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
?>
Dies muss natürlich nach jeder Zeile geschehen.

Da der Name der Textdatei mehrfach auftacht macht es Sinn, diese Variable nicht in der if-Anweisung oben zu deklarieren, sondern für beide Anweisungselemente. Daher taucht diese Variablendefinition nun ganz oben auf.
Der Code sieht damit nun wie folgt aus:
PHP-Code:
<?php
  
// Der Name der Gästebuch-Datei lautet:
  
$datenbankdatei 'gaestebuch.txt';


  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)

   // als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
   // das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
    
$eintrag date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";

    
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
    
$file fopen($datenbankdatei,"a");

    
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
    
fwrite($file$eintrag);

    
// Datei schliessen
    
fclose($file);

    
// Ausgabe für den user:
    
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';
  }
  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:
    
echo '<h2>mein Gästebuch</h2>';

    
// Öffnen der Datei im Lese-Modus:
    
$file fopen($datenbankdatei'r');

    
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
    
while (!feof($file))
    {
      
// Zeile für Zeile auslesen:
      
$zeile  fgets($file5000);
      
$daten  explode(" || "$zeile);
      
$datum  $daten[0];
      
$ip     $daten[1];
      
$name   $daten[2];
      
$email  $daten[3];
      
$eintrag $daten[4];

      
// Ausgabe auf den Bildschirm:
      
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';

    }
    
fclose($file);

    
// Trennlinie zwischen alten Einträgen und dem Formular:
    
echo '<hr />';

    
// 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>'
;
  }
?>
Die optisch ansprechende Aufbereitung bleibt natürlich euch überlassen!

Damit wäre das Gästebuch theoretisch fertig.

Es fehlen damit aber noch einige angenehme Elemente:
- email-Benachrichtigung
- Überprüfung der Daten (beim Eintragen)
- Überprüfung der Daten bei der Ausgabe
- Überpüfung, ob die Textdatei überhaupt vorhanden ist
- ...

Ein ganz wesentlicher Punkt ist die Sicherheit! Es kann vorkommen, dass mehrere Leute gleichzeitig in die Textdatei schreiben wollen. Das muss verhindert werden, sonst kann sein, dass danach alles weg ist.


Als erstes die Überprüfung, ob die Datei vorhanden ist. Wenn nicht, dann der Versuch, diese zu erzeugen. Erst wenn auch das ohne Erfolg war, das Kript abbrechen:
PHP-Code:
<?php
  
// Der Name der Gästebuch-Datei lautet:
  
$datenbankdatei 'gaestebuch.txt';

  
// Überprüfung, ob die Datei vorhanden ist.
  // wenn nicht vorhanden, dann versuche diese zu erstellen
  // wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen
  
if(!file_exists($datenbankdatei))
    if(!@
touch($datenbankdatei))
      die(
"Fehler: Die Datenbank ist nicht erreichbar.");
?>
Als nächstes eine eMail-Nachricht an den Betreiber:
PHP-Code:
<?php
    
// eMail wird verschickt:
    
@mail($mailempfaenger"Gästebucheintrag""Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" phpversion());
?>
Bei der Arbeit mit Textdateien kann es vorkommen, dass es mehr leere Zeilen gibt, als in diesem Falle Einträge.
Das kann man abfangen indem man die Ausgabe ändert:
PHP-Code:
<?php
      
// Ausgabe auf den Bildschirm:
      
if($name != "" && $eintrag != "")
        echo 
'<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
?>
Auf gleichem Wege könnte man auch eine unterschiedliche Ausgabe machen, ob nun eine eMail-Adresse angegeben wurde, oder nicht. Davon abhängig den link setze - oder nicht, aber das überlasse ich euch!

Wenn nun jmd. versucht einen leeren Eintrag zu erzeugen, so würde er nicht mehr angezeigt werden. Um leere Einträge bei der Eingabe zu verhindern wird das Skript nun überprüfen, ob mindestens der Name und eine Nachricht hinterlassen wurden.

Damit sieht das Skript nun wie folgt aus:
PHP-Code:
<?php
  
// Der Name der Gästebuch-Datei lautet:
  
$datenbankdatei 'gaestebuch.txt';
  
$mailempfaenger 'info@domain.de';

  
// Überprüfung, ob die Datei vorhanden ist.
  // wenn nicht vorhanden, dann versuche diese zu erstellen
  // wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen
  
if(!file_exists($datenbankdatei))
    if(!@
touch($datenbankdatei))
      die(
"Fehler: Die Datenbank ist nicht erreichbar.");



  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)

   // ÜBerprüfe, ob Name und Text angegeben wurde - sonst kein Eintrag
   
if($_POST['name'] == "" || $_POST['eintrag'] == "")
   {
     echo 
'Es fehlen Angaben. Bitte vollständig ausfüllen';
   }
   else
   {
     
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
     // das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
      
$eintrag date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";

      
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
      
$file fopen($datenbankdatei,"a");

      
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
      
fwrite($file$eintrag);

      
// Datei schliessen
      
fclose($file);

      
// Ausgabe für den user:
      
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';


      
// eMail wird verschickt:
      
@mail($mailempfaenger"Gästebucheintrag""Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" phpversion());
   }
  }
  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:
    
echo '<h2>mein Gästebuch</h2>';

    
// Öffnen der Datei im Lese-Modus:
    
$file fopen($datenbankdatei'r');

    
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
    
while (!feof($file))
    {
      
// Zeile für Zeile auslesen:
      
$zeile  fgets($file5000);
      
$daten  explode(" || "$zeile);
      
$datum  $daten[0];
      
$ip     $daten[1];
      
$name   $daten[2];
      
$email  $daten[3];
      
$eintrag $daten[4];

      
// Ausgabe auf den Bildschirm:
      
if($name != "" && $eintrag != "")
        echo 
'<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';

    }
    
fclose($file);

    
// Trennlinie zwischen alten Einträgen und dem Formular:
    
echo '<hr />';

    
// 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 sind nur noch 2 wichtige Dinge unberücksichtigt:
- Was ist, wenn in die Textdatei nicht geschrieben werden kann?
- Der Zugriff mehrerer gleichzeitig muss verhindert werden!

Das Fehlen der Rechte kann so abgefangen werden:
PHP-Code:
<?php
      
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
      // Wenn die Datei nicht geöffnet werden kann: Abbruch
      
if(!$file = @fopen($datenbankdatei,"a"))
        die(
"Fehler: Die Datenbank ist nicht erreichbar.");

      
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
      // Wenn die Datei nicht beschrieben werden kann: Abbruch
      
if(!@fwrite($file$eintrag))
        die(
"Fehler: Die Datenbank ist nicht erreichbar.");
?>
Damit fehlt nur noch ein Management, damit nicht mehrere Zugriff gleichzeitig haben.
Dafür hält PHP etwas bereit: flock()
PHP-Code:
<?php
      
// Datei öffnen

      // Datei für andere sperren
      
flock($file,LOCK_EX) or die();

      
// ...

      // Sperre der Datei wieder aufheben
      
flock($file,LOCK_UN) or die();

      
// Datei schliessen
      
fclose($file);
?>
Damit sieht das Gästebuch nun so aus:
PHP-Code:
<?php
  
// für den Fall, das Fehler im Skript sind:
  
error_reporting(E_ALL);

  
// Der Name der Gästebuch-Datei lautet:
  
$datenbankdatei 'gaestebuch.txt';
  
$mailempfaenger 'info@domain.de';

  
// Überprüfung, ob die Datei vorhanden ist.
  // wenn nicht vorhanden, dann versuche diese zu erstellen
  // wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen
  
if(!file_exists($datenbankdatei))
    if(!@
touch($datenbankdatei))
      die(
"Fehler: Die Datenbank ist nicht erreichbar.");



  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)

   // ÜBerprüfe, ob Name und Text angegeben wurde - sonst kein Eintrag
   
if($_POST['name'] == "" || $_POST['eintrag'] == "")
   {
     echo 
'Es fehlen Angaben. Bitte vollständig ausfüllen';
   }
   else
   {
     
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
     // das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
      
$eintrag date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";

      
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
      // Wenn die Datei nicht geöffnet werden kann: Abbruch
      
if(!$file = @fopen($datenbankdatei,"a"))
        die(
"Fehler: Die Datenbank ist nicht erreichbar.");

      
// Datei für andere sperren
      
flock($file,LOCK_EX) or die();

      
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
      // Wenn die Datei nicht beschrieben werden kann: Abbruch
      
if(!@fwrite($file$eintrag))
        die(
"Fehler: Die Datenbank ist nicht erreichbar.");

      
// Sperre der Datei wieder aufheben
      
flock($file,LOCK_UN) or die();

      
// Datei schliessen
      
fclose($file);

      
// Ausgabe für den user:
      
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';


      
// eMail wird verschickt:
      
@mail($mailempfaenger"Gästebucheintrag""Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" phpversion());
   }
  }
  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:
    
echo '<h2>mein Gästebuch</h2>';

    
// Öffnen der Datei im Lese-Modus:
    
$file fopen($datenbankdatei'r');

    
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
    
while (!feof($file))
    {
      
// Zeile für Zeile auslesen:
      
$zeile  fgets($file5000);
      
$daten  explode(" || "$zeile);
      
$datum  $daten[0];
      
$ip     $daten[1];
      
$name   $daten[2];
      
$email  $daten[3];
      
$eintrag $daten[4];

      
// Ausgabe auf den Bildschirm:
      
if($name != "" && $eintrag != "")
        echo 
'<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';

    }
    
fclose($file);

    
// Trennlinie zwischen alten Einträgen und dem Formular:
    
echo '<hr />';

    
// 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>'
;
  }
?>
Zu der Funktion flock solltet ihr jedoch unbedingt die Infos im PHP-Handbuch lesen. Dies Funktion stellt keinen zuverlässigen Schutz dar.



Jetzt solltet Ihr eigentlich in der Lage sein, das Script ohne Vorlage nachzuprogrammieren. Die verwendeten Funktionen findet Ihr alle im PHP-Manual.

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.
Bei Verbesserungsvorschlägen würde ich mich über eine Nachrichtfreuen.

Grüße Jann Hendrik
Angehängte Dateien
Dateityp: zip txt_gb.zip (1,9 KB, 29x aufgerufen)

Geändert von Jann Hendrik (25.05.2007 um 10:28 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.02.2005, 17:06 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard [php] Gästebuch auf Textdatei basierend

Es wurde der Hinweis geäußert, dass man das GB noch um die Funktionalität erweitern könnte, dass der user nur alle x-Sekunden Eingaben machen kann.

Dies ist natürlich ohne Probleme möglich.

An entsprechender Stelle muss überprüft werden, ob der user in den letzten x Sekunden bereits eine Eingabe getätigt hat. Wenn ja, dann wird ihm diese verweigert.
Dazu muss die Datei vorher einmal komplett eingelesen werden. Benutzt wird für die Überprüfung dann zum einen die IP, als auch der Zeitpunkt.

Geändert von Ben (06.01.2006 um 15:54 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.03.2005, 11:46 Nach oben    #3
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard [php] Gästebuch auf Textdatei basierend

Ich habe es zeitlich noch immer nicht geschafft - möchte dies aber noch nachholen.

Mir wurde die Kritik erteilt (danke an der Stelle), dass man nocch ausschließen sollte, dass der user keine Eingabe macht, die ' || ' beinhaltet. Auch wenn es unwahrscheinlich ist, aber es muss überprüft werden!
Außerdem:
Zitat:
Des weiteren solltest du magic_quotes_gpc auswerten und ggf. die
Backslashes entfernen und vor der Ausgabe HTML-Tags entschäffen und
Umlaute etc. in HTML-Entitäten umwandeln.
Dazu ist folgender link interessant:
http://www.zend.com/manual/function....quotes-gpc.php

Ich möchte das gerne noch oben nachträglich einarbeiten - bin derzeit aber zeitlich nicht in der Lage!
Wollte das aber schon einmal soweit verkünden - wer das Tut bis dahin gebraucht kann auch versuchen die selbstständig einzuarbeiten.

Geändert von Jann Hendrik (25.05.2007 um 10:22 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2006, 19:53 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 12.09.2005
Beiträge: 15
Standard

Warum hast du die file() funktion nicht benutzt ?
Damit wäre es kein problem die Blätterfunktion zu machen !!!
Dark Knight ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2006, 07:50 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard

das ist richtig. Auf der anderen Seite müßte hier nur in die while-Schleife eine if-Abfrage rein - also sooo umständlich auch nicht.

Ich habe das Tutorial vor fast exakt einem Jahr deshalb so geschrieben, weil es das Tutorial war, mit dem ich damals angefangen habe PHP zu lernen. Ich habe das stark geändert und mE verbessert, weil dort auf einige Punkte nicht eingegangen war.

Ich sehe in der Benutzung von file() jetzt aber auch nicht den Gewinn.

Dieses Tutorial hat mE den Vorteil, dass das gewonnene Wissen auch für andere Zwecke genutzt werden kann, zB ein logfile,...

Die Lösung über Textdateien ist generell die schlechtere Wahl, wenn man die Möglichkeit hat auf eine Datenbank wie mysql auszuweichen.
Das fängt bei der Performance an und geht über die Sicherheit bis zum handling. Der Datenbank sollte also nach Möglichkeit der Vorzug gewährt werden.
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
[PHP] Aktuell gespielten Titel von XMMS auf einer Webseite in einer Grafik anzeigen Corvin Tutorials 0 28.11.2005 16:26
[PHP] Wie kann ich eine Textdatei erstellen und mit Inhalt füllen? Ben Tutorials 2 06.09.2005 11:17
[PHP] MySQL-db basiertes Gästebuch Jann Hendrik Tutorials 0 15.02.2005 12:32
[PHP] Wie übergebe ich Daten per URL? Ben Tutorials 0 05.12.2004 14:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:45 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18