Beim blättern bleibt manchmal die letzte Seite leer

Hektik

Erfahrenes Mitglied
Hallo!

Ich habe ein Gästebuch geschrieben und darin eine "Blätter-Navigation" eingebaut, die ich als Script vorliegen hatte. Es funktioniert alles wunderbar, nur ein kleines Problem tritt auf: Sofern der Restwert der Division von "Anzahl aller Einträge" durch "Einträge pro Seite" den Wert 0 ergibt, erzeuge ich eine weitere (unnötige) letzte Seite, die jedoch keine Einträge auflistet.

Der Basis-Code sieht folgendermaßen aus:

PHP:
// ich linke folgendermaßen auf das Gästebuch: index.php?navigation=guestbook

// Wenn beim ersten betreten der Gästebuchseite die Seitenzahl nicht angegeben ist,
// setze mir diese auf "Seite 0"

if (!isset($_GET['page'])) { $_GET['page'] = 0; }

// Einträge pro Seite
$proseite=3;

// Gesamtanzahl Einträge ermitteln
$sql = "SELECT * FROM guestbook ORDER BY id DESC";
$result = mysql_query($sql);
$number = mysql_num_rows($result);

// Anzahl Seiten festlegen
$seiten=floor($number/$proseite);
$start=$_GET['page'] * $proseite;

// entsprechende Einträge auslesen
$sql="SELECT * FROM neue_webs ORDER BY id DESC LIMIT $start,$proseite";
$result = mysql_query($sql);
$ende = $start + $proseite;
if ($ende>$number) { $ende = $number; }

Und dann noch der Code zum Blättern:

PHP:
// RÜCKWÄRTS BLÄTTERN
	if ($_GET['page']>0) {
		$i=$_GET['page']-1;
		echo "<a class=\"a10grau\" href=\"index.php?navigation=guestbook&page=$i\">« zurück</a>";
	}

// Wenn auch zurückgeblättert werden soll, dann trenne mir vorwärts und rückwärts mit:	if ($_GET['page']<$seiten && $_GET['page']>0) {
		echo '     |     ';
	}

// VORWÄRTS BLÄTTERN
	if ($_GET['page']<$seiten) {
		$i=$_GET['page']+1;
		echo "<a class=\"a10grau\" href=\"index.php?navigation=guestbook&page=$i\">weiter »</a>";
	}

Die Ausgabe liste ich dann mit

PHP:
while ($row = mysql_fetch_assoc($result)) {
// hier steht der CSS-Formatierungscode um die Einträge darzustellen
}

Meine Frage ist nun: Wie kann ich es ermöglichen, dass eben diese letzte leere Seite nicht angezeigt wird?
Ich habe schon diverse Sachen probiert, aber ich vermute, dass es nicht mit einer einfachen Bastelei an meinem Code selbst getan ist. Vielmehr ist es doch notwendig, auf den nichtvorhandenen Divisionsrest einzugehen, oder nicht?
Ich habe auch schon ausgiebig gegooglet, das hat mir aber leider auch nicht weitergeholfen. :(

Deswegen habe ich hier diesen Thread eröffnet und hoffe auf eine hilfreiche Antwort!
 
Zuletzt bearbeitet:
Huhuli,

Ich habs mir nicht ganz genau angesehen, aber mir ist diese Zeile aufgefallen

PHP:
// Anzahl Seiten festlegen
$seiten=floor($number/$proseite);
$start=$_GET['page'] * $proseite;

Änder das mal ab in
PHP:
// Anzahl Seiten festlegen
$seiten=ceil($number/$proseite);
$start=$_GET['page'] * $proseite;

Bei der Funktion floor() wird der Rückgabewert aufgerundet, bei ceil() abgerundet. Am besten schaust du dir die Refenz auf http://de.php.net/manual/de/function.ceil.php nochmal an.
 
muhkuh hat gesagt.:
Bei der Funktion floor() wird der Rückgabewert aufgerundet, bei ceil() abgerundet. Am besten schaust du dir die Refenz auf http://de.php.net/manual/de/function.ceil.php nochmal an.

Huhuli zurück!

Eigentlich ist es genau andersherum: floor() rundet ab (floor - der Boden) und ceil() rundet auf (to ceil - die Decke verputzen). Somit konnte dein Lösungsvorschlag von Anfang an nicht funktionieren. Ich habe es aber trotzdem einmal ausprobiert und (mit Erstaunen) festgestellt, dass sich rein gar nichts an meinem Problem ändert. :eek:


Auf der Websuche nach "Divisionsrestwert" habe ich gefunden, dass man mit

PHP:
$x = $number%$proseite;

den Divisionsrest bestimmen kann.

Würde mir das vllt irgendwie eher weiter helfen?
 
ICH HABS ^^

Der Fehler lag am Vorwärtsblättern. Statt

PHP:
// VORWÄRTS BLÄTTERN 
    if ($_GET['page']<$seiten) { 
        $i=$_GET['page']+1; 
        echo "<a class=\"a10grau\" href=\"index.php?navigation=guestbook&page=$i\">weiter »</a>"; 
    }

hab ich jetzt

PHP:
// VORWÄRTS BLÄTTERN 
    if ($number%$proseite == 0){$test = $_GET['page']+1;}
    if ($test<$seiten) { 
      if ($_GET['page']<$seiten) {
        $i=$_GET['page']+1; 
        echo "<a class=\"a10grau\" href=\"index.php?navigation=guestbook&page=$i\">weiter »</a>"; 
    }
}

und es funktioniert.

Wie ich vermutet habe, konnte ich es mit hilfe des Divisionsrestes lösen. Ist der Divisionsrest nun = 0 , so addiert er mir zur Seitenzahl einen dazu und das Script denkt, das wäre schon die letzte Seite
 
Zuletzt bearbeitet:
Zurück