Hallo,
bitte verzeih, wenn ich falsch liege, aber hier erscheint eine grundlegende Sortierphase wichtiger zu sein, als den Rat zu geben, die Datei im Append-Mode zu öffnen.
<?php
if ($name == "" || $text == "") {
echo "Bitte alle Felder ausfüllen";
}
else {
$eintrag = "$name schrieb: <br><br> $text";
$datei = fopen("gb.txt","wr");
$datei = fopen("bg.txt","a");
wäre hier richtiger. Aber um Himmels willen nicht sofort umsetzen!!!
-----------------------------------------------
erst weiterlesen.
fputs($datei, $eintrag);
fclose($datei);
echo "Eintrag erfolgreich gespeichert";
}
?>
<table width="600" border="0" cellspacing="0" cellpadding="0">
...
<tr>
<td><div align="center">
<?php include("gb.txt"); ?>
</div></td>
</tr>
in dieser Passage holst Du Deine Einträge wiedr aus der Textdatei heraus und stellst sie Deinem Script mit voller Mächtigkeit zur Verfügung. Das bedeutet aber, dass es möglich wäre, dass Dir jemand PHP-Scripte in Dein Gästebuch schreibt, die direkt Anwaeisungen an das Betriebssystem geben können oder sonst irgendwelchen Schaden anrichten können. Einziger Schutz, den ich hier vermute, ist ein eingeschaltetes "magic_quotes" auf dem Server. Dadurch werden z.B. Anführungszeichen escaped -> mit einem Backslash versehen. Es wird also etwas schwieriger, dir schädliche Funktionen ins Gästebuch zu schreiben...
Der Befehl "include" ist grundsätzlich nicht dafür geeignet, serverfremde Dateien, also solche von Nobodies, in Dein Script einzubinden.
Du solltest an dieser Stelle besser den Befehl readfile() benutzen, der eine gespeicherte Datei direkt auf den Browser ausgibt. Allerdings kann der dazu führen, dass der gesamte HTML-Rahmen um die Ausgabe herum zerstört wird (unbalanciert usw). Denn noch hast Du nicht geprüft, was die Benutzer gesendet haben.
Du solltest also nichts speichern, was nicht von Dir geprüft wurde. Dafür bietet PHP verschiedene Funktionen:
strip_tags() entfernt html-tags mit Ausnahme der erlaubten
htmlspecialchars()wandelt alle html-Sonderzeichen in Ersetzungsseqzenzen
(¨ ß etc ) um.
stripslashes() Um die Backslashes wieder zu entfernen; aber
bitte nicht ohne die anderen Prüfungen vorher
nl2br() wandelt Zeilenumbrüche aus einer Textarea in <br /> um
bei älteren PHP-Versionen nur in <br>
Du solltest Dir ausßerdem über ein Datensatzformat Gedanken machen, dass Du dann abspeichern kannst. In so einem Datensatz könnte stehen:
IP des Gästebuchbenutzers
Datum des Eintrages
Uhrzeit des Eintrages
eMail des Eintragers wenn er sie eingetragen hat
Website des Eintragers, wenn er sie angegeben hat
Titel falls er eine Überschrift wollte
Text die eigentliche Message
Antwort Deine Erwiderung auf den Eintrag.
Diese ganzen Daten bindest Du am besten in einem Array und verpackst sie dann mit der Funktion
serialize() Diese Funktion verpackt ganze Datenstrukturen in Strings.
in einem String, den Du in der Datei abspeichern kannst.
Wenn Du später Dein Gästebuch mittels einer Schleife anzeigen lässt, entpackst Du dieses Array mit
unserialize()
und alle Daten stehen Dir wieder in einzelnen Array-Elementen zur Verfügung. Wie man die ausgibt, weißt Du ja schon.
Ach, noch etwas. Um die gesamte Datei erstmal einzulesen schau Dir mal die Funktion
file() liest eine Textdatei vollständig ein und speichert jede Zeile
in einem Array-Element. Am Ende des Elementes hängt noch das
Zeilenende-Zeichen, das z.B. vor einem unserialize() abgeschnitten
werden sollte.
So, viel neuer Stoff. Du hast also gut zu tu, Pack es an.
Liebe Grüße aus http://www.braunschweig.de
Tom
--
Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.