Sönke Tesch: blaettern

Beitrag lesen

Ich habe mir nochmehr Unsinn ausgedacht, und....
Wie ueblich funktionierts nicht !!!!!

Ich wollte die Datei Automatisch begrenzen, maximal 27 Eintraege.

$max=27;
$gbfile = "gaestebuch.txt";
$data = file("$gbfile");
$eintraege = count($data);

if($eintraege>$max)
{
for($q=$max;$q<$eintraege;$q++)
{
unset($data[q]);

---------------^^ unset($data[$q]);

}
}

Das funktioniert. Allerdings kommt es darauf an, was Du begrenzen willst, nur die Ausgabe oder auch den Inhalt von gaestebuch.txt. Momentan machst Du nur ersteres. Ich weiß auch nicht, wie Du den obigen Code wo eingesetzt hast. Jedenfalls benutzt Du jetzt andere Variablen als im Ausgabeteil des bisherigen Codeschnippsels und der Code auf Deinen Seiten hat das Problem, daß die neue Größe der Daten bei der Ausgabe der Blätterverweise nicht korrekt beachtet wird, da man nach dem 27. Eintrag bis zum tatsächlichen Ende nur noch leere Seiten erhält.
Das Prinzip scheint jedenfalls richtig. Prüfe einfach mal, wie die Variablen aussehen, die für Zurück und Weiter benutzt werden (siehe vorige Antwort).

Willst Du auch die Anzahl in gaestebuch.txt begrenzen, mußt Du den Code für's Schreiben umbauen. Dabei ist es vielleicht am sinnvollsten, wenn Du nur noch einmal ganz am Anfang $g=file("gaestebuch.txt") aufrufst, anschließend mit obiger Schleife die Daten begrenzt und erst dann mit dem bisherigen Rest beginnst, also eventuelles Abspeichern eines neuen Eintrags und Ausgabe der gewünschten Seite. Im ganzen Code kannst Du dann die gelesenen Daten aus $g benutzen, ohne weitere Dateizugriffe, etwa so:

<html><body>
  <?php

$g=file("gaestebuch.txt"); // Daten einlesen

// hier Begrenzungsschleife

$d=fopen("gaestebuch.txt","w+");       // Datei zum Anhängen öffnen
  if ($d)                                // Öffnen hat geklappt, $d ist ein Dateizeiger
    {
     $neu="Von: ".htmlentities($name)."<br><br>"; // Autor,..
     $neu.=strtr(nl2br(htmlentities(trim($text))."<br><hr><br>"),"\n\r"," "); // ..Text..
     $neu.="\n"; // ..und abschließen.
     fputs($d,$neu); // neuen Eintrag speichern

for ($i=0;$i<sizeof($g);$i++) // alte Einträge speichern
      {
       fputs($d,$g[$i]);
      };
     fclose($d);

array_unshift($g,$neu); // neuen Eintrag für den noch folgenden
                             // Code in $g einfügen
    };

// Auch im Weiteren gaestebuch.txt _nicht_ laden, die aktuellen
  // Daten stehen allesamt korrekt in $g.

Die Begrenznungsschleife könnte man auch direkt bei "alte Einträge speichern" mit einbauen.

Gruß,
  soenk.e