einträge begrenzt ausgeben mit for schleife

than

Mitglied
hallo miteinander,

es ist mein erstes posting hier, und gleich ein problem welches mich jetzt ganze 3 tage martert.

ich habe ein gästebuch gebastelt, doch wollte ich nicht eine mysql db, sondern mal txt file als db benutzen (damit ich mich da auch mal etwas auskenne)

auf der index seite werden als zahl alle einträge angezeigt, die seiten blätter funktion geht auch doch auf jede seite wo ich blättere erscheint jedesmal die selben postings. also er rechnet nicht "weiter".
habe ich z.b. insgesammt 14 einträge, lasse 5 auf jeder seite anzeigen, so erscheinen eintrag 14-11. blättere ich weiter, wieder 14-11 (statt 10-6 usw)

der fehler liegt an der unteren 2. for schleife. ich habe da meinen hänger , weiss nicht wie die ausgabe richtig mit dem blättern übergeben wird.
ich weiss nicht recht wie ich es umsetzen kann das limit der einträge richtig ausgeben zu lassen.
ich zeigs euch mal:
PHP:
$gb_datei = "daten.txt";
$gb_auslesen = @file($gb_datei);
$gb_eintraege_total = count($gb_auslesen);
 
$seite = $_GET["seite"];
if(!isset($seite)) { $seite = 1; }
$start = $seite * $gb_eintraege_pro_seite - $gb_eintraege_pro_seite;
$wieviel_seiten = $gb_eintraege_total / $gb_eintraege_pro_seite;
 
echo "<b>Seite:</b> ";
//ausgabe der links
for ($a=0; $a < $wieviel_seiten; $a++) {
$b = $a + 1;
//keinen link ausgeben 
if ($seite == $b) {
echo " <b>$b</b> ";
}
//link ausgeben
else {
echo " <a href=\"?seite=$b\">$b</a> ";
}
}
 
if ($gb_eintraege_total==0) {
echo "keine einträge vorhanden";
}
else {
// hab hier jetzt Harrier's änderung vorgenommen ;)
for ($a=$start; $a < $start + $gb_eintraege_pro_seite; $a++) {
$gb_inhalt = array_reverse($gb_auslesen); 
$gb_row = explode(" || ", $gb_inhalt[$a]);
$nr = $gb_eintraege_total-$a;
echo $nr."<br />";
echo "<b>$gb_row[0]</b> schrieb am $gb_row[4] um $gb_row[5] Uhr:<br />";
echo "<b>$gb_row[1]</b><br />";
echo "<b>$gb_row[2]</b><br />";
echo "<b>$gb_row[3]</b><br />";
}
}


da ich schon oft über google hier in dies forum geleitet wurde und es mir immer weitergeholfen hat, hoffe ich das ich diesmal auch die lösung gezeigt bekomme.
 
Zuletzt bearbeitet:
Du bekommst überall die selben Einträge? Also meiner Meinung nach dürftest du ab Seite 2 keine Einträge mehr bekommen weil:
Auf Seite 2 ist $start = 5
$gb_eintraege_pro_seite ist auch 5
for($a=5; $a < 5; $a++) {
... }

Demnach solltest du die FOR-Schleife folgendermaßen abändern:
for($a = $start; $a < $start+$eintraege_pro_seite; $a++) {
if(!$gb_inhalt[$a]) break;
...
}

Ich hoffe ich konnte dir helfen! cu
 
hui dankeschön.
du hast auch recht gehabt mit "das auf den anderen seiten nichts mehr angezeigt werden müsste". ich hatte das script zuvor so geändert gehabt das auf allen seiten das selbe stand, doch hier im forum hatte schon eine erweiterte 'version' gepostet.

jedenfalls hast du mir geholfen.
dankeschön
 
Öhm da ich weis, dass wenn du hier php code einfügst die leerzeichen am Anfang nicht verschwinden mal ne frage:

Rückst du ein?
 
hab deine frage nicht ganz verstanden :/

ich habe hier in das PHP tag meinen code eingefügt und da wurde automatisch nach jeder zeile eine leerzeile eingefügt. damit mein code nicht so lange wird, habe ich jede leerzeile gelöscht, so das alle codes rechtsbündig und untereinander sind.

ich hoffe ich habe deine frage richtig beantwortet.
 
hallo

ich muss mich hier nochmals zurück melden. es gibt noch ein verstecktes problemchen.
ich habe mein script oben umgeändert (mit der erweiterung von Harrier) und das blättern funktioniert.

das problem ist nun die ausgabe der einträge. bei ungraden zahlen werden minus werte ausgegeben.

beispiel:
20 einträge insgesamt
15 eintrage anzeigen je seite

seite 1
eintrag 20
eintrag 19
eintrag 18
...
eintrag 6

seite 2
eintrag 5
eintrag 4
eintrag 3
eintrag 2
eintrag 1
eintrag 0
eintrag -1
eintrag -2
eintrag -3
...
eintrag -9

ich versuche nun schon 3 tage den fehler zu finden, aber der erfolg bleibt aus.

ich brauche nochmal eure tips, hilfe oder lösungen
 
Dein Problem ist, dass du immer 15 Einträge ausgiebst, egal wieviele für die Seite vorhanden sind.

Versuch doch einfach deine Schleife umzustellen und über den Array index "runter zu zählen", in etwa so

PHP:
for ($a = $start + $gb_eintraege_pro_seite; $a > $start; $a--) {
    $gb_row = explode(" || ", $gb_inhalt[$a]);
    echo $a."<br />";
    echo "<b>$gb_row[0]</b> schrieb am $gb_row[4] um $gb_row[5] Uhr:<br />";
    echo "<b>$gb_row[1]</b><br />";
    echo "<b>$gb_row[2]</b><br />";
    echo "<b>$gb_row[3]</b><br />";
    
    // abbrechen wenn wir ins negative laufen.
    if($a < 0){
        break;
    }
}
 
Zurück