Thomas Schmieder: blaettern

Beitrag lesen

Hallo Soenke, hallo Alex,

es wird ja so langsam. :-)

Paar Kleinigkeiten sind mir aber eben aufgefallen, die Alex später ärgern werden:

Du wirst Dir also als erstes mal Gedanken darüber machen müssen, wie Du die Einträge in der Datei so speicherst, daß sie später beim Auslesen auch einfach wieder voneinander zu trennen sind, damit Du immer schön je Seite eine Anzahl vollständiger Einträge hast.
Du wirst in der Datei ein Trennzeichen brauchen, den Zeilenvorschub \n oder einen Tabulator \n zum Beispiel:

Zum Eintragen, Text kommt in $text, Autor in $autor:

$d=fopen("gaestebuch.txt","a"); // Datei zum Anhängen öffnen
  if ($d) // Öffnen hat geklappt, $d ist ein Dateizeiger
    {
     fputs($d,"Von: ".htmlentities($autor)."<br>");
     fputs($d,nl2br(htmlentities($text)));

----------------------------------------
nl2br
(PHP 3, PHP 4 )

nl2br --  Inserts HTML line breaks before all newlines in a string
Description
string nl2br ( string string)

Returns string with '<br />' inserted before all newlines.

Note: Starting with PHP 4.0.5, nl2br() is now XHTML compliant. All versions before 4.0.5 will return string with '<br>' inserted before newlines instead of '<br />'.

See also htmlspecialchars(), htmlentities() and wordwrap().

Das heißt also, dass die "\n" -Zeichen im Text drinbleiben; die "<br>" -Tags werden nur hinzugefügt. Damit ist eine Zeile also _nicht_ mit einem Datensatz identisch. Ich würde auch eine eigene Trennung einbauen. Die kann z.B.

<!-- neuer Datensatz -->

so aussehen, und lässt sich später beim Ausgeben gut wiederfinden.

----------------------------------------

fputs($d,"\n");
     fclose($d);
    };

Damit bekommst Du jeweils in einer Zeile der Datei einen Eintrag. nl2br() sorgt dafür, daß Zeilenvorschübe (\n) in $text verschwinden bzw. durch <br> ersetzt werden (denn der Zeilenvorschub markiert ja die Trennstelle zwischen den Einträgen), htmlentities() verhindert, daß Dir jemand HTML-Sachen oder gar Javascript in's Gästebuch knallt.

Genau! JavaScript und PHP haben nix darin zu suchen, aber gegen einige HTML-Tags ist nichts einzuweden. Deshalb würde ich den Text auch mit strip_tags($text,$erlaubte_tags) behandeln, bevor ich ihn formatiere und abspeichere.

Zum Auslesen:

$g=file("gaestebuch.txt");

Da wir so klug waren und den Zeilenvorschub als Trennung verwendet haben, bekommen wir mit file() sämtliche Einträge schon fix und fertig  separiert in einem Feld geliefert. Jede Zeile aus der Datei landet mit file() in je einem Feldeintrag, die erste Zeile in $g[0], die zweite in $g[1] usw.

das geht, wie schon gesagt nur, wenn man "\n" separat extrahiert, _nachdem_ man nl2br() durchgeführt hat.

Nun hat es noch nicht auf Anhieb geklappt, aber dafür nennen sich die Leute ja auch Software-ENTWICKLER und nicht Software-HINSCHREIBER. Sönke hat hier schon ganz schon ent(ge)wickelt. Nimm Dir den Rat zur sauberen Schreibweise mal zu Herzen, Alex.

Grüße aus http://www.braunschweig.de

Tom