if($max%10 ==0)
{
$pages = ($max / 10 );
}
else
{
$pages = ($max / 10 );
}
if Abfrage habe ich vor kurzem eingebaut.
Ohne gab das programm eine Seite zu viel aus.
Mag sein, aber wenn in den beiden einzig möglichen Wegen einer if-Abfrage die gleiche Anweisung steht, ist die ganze if-Abfrage überflüssig und die enthaltene Anweisung kann einfach im Programmtext stehen. Vielleicht wird's so klarer:
wenn (farbe ist gruen) dann
blinke
andernfalls
blinke
Statt der obigen Konstruktion kannst Du also genauso gut
$pages = ($max / 10 );
schreiben.
Aehm, jetzt die Frage:
Wie geht denn das Setenweise ausgeben?
Das kann ich noch nicht, und habe es nirgendwo gesehn.
Angucken, was andere machen, ist zwar gut, stupide abschreiben sollte man aber nicht. Da lernst Du erstens nicht viel und zweitens setzt Du dann Stücke zusammen, die überhaupt nicht zueinander passen.
Beim seitenweisen Anzeigen hapert es bei Dir schon im Ansatz, denn die Art, wie die Einträge in der Datei gespeichert werden, erlaubt es nicht, die Einträge im Nachhinein voneinander zu separieren und somit auf einer Seite immer vollständige Einträge anzuzeigen. So, wie Du es im Moment versuchst, werden eine Menge Einträge in der Mitte durchtrennt werden - und zwar so, daß "Mitte" überall sein kann, auch mitten im Wort.
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)));
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.
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.
Alles, was Du jetzt noch machen mußt, ist aus diesem Feld $g ab Position $start $eintraege_pro_seite Zeilen auszugeben:
// $start kommt über die URL, wenn nicht oder $start keine Zahl
// ist, dann $start auf 0 setzen
if ((! isset($start)) || (! is_numeric($start)))
$start=0;
// und nochmal für $einträge_pro_seite
if ((! isset($eintraege_pro_seite)) || (! is_numeric($eintraege_pro_seite)))
$eintraege_pro_seite=10;
for ($i=$start;$i<$start+$eintraege_pro_seite;$i++)
{
if (isset($g[$i])) // existiert überhaupt etwas an $g[$i]?
{
echo $g[$i]; // ja, eintrag ausgeben
echo "\n"; // kosmetik, ein bißchen luft tut immer gut
};
};
Last but not least die Verweise zum Blättern:
// vorwärts
if ($start+$eintraege_pro_seite<sizeof($g))
{
echo "<a href="gaestebuch.php?";
echo "start=".($start+10);
echo "&eintraege_pro_seite=".$eintraege_pro_seite;
echo ">Weiter</a>";
}
else
{
echo "Keine weiteren Einträge.";
};
// Analog für die andere Richtung.
Ein Gästebuch in vier Akten, keine Ahnung ob's so funktioniert, Code ist eben erst entstanden und noch nie gelaufen. Aber bitte nicht nur rauskopieren, sondern auch lesen und verstehen! Lies Dir in der PHP-Anleitung (http://php.net) die Funktion der angewandten Befehle durch.
Gruß,
soenk.e