Hat mich einiges an Denkarbeit gekostet das Ganze umzusetzen. Da ich es schätze bei Fragen etwas konkretere Antworten zu bekommen, hier also mein Lösungsansatz, falls wer froh darum ist was kopieren zu können.
Der Datensatz der zuerst angezeigt werden soll (LIMIT), sowie die Nummer der aktuellen Seite wird beim Blättern in der URL übergeben. Beim ersten Seitenanruf werden die Variablen auf einen Default-Wert gesetzt.
CODE
// Start DS ermitteln (Liste blättern)
if(isset($_GET['firstds'])){
$firstds = $_GET['firstds'];
}else{
$firstds = 0;
}
// Seite X von Y (Liste blättern)
if(isset($_GET['pagecount'])){
$pagecount = $_GET['pagecount'];
}else{
$pagecount = 1;
}
Dann werden die Anzahl der Datensätze in der Datenbank ermittelt
CODE
// Datenbankverbindung herstellen
$database = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname, $database);
// DS zählen (Liste blättern)
$sql_ds = "SELECT * ".
" FROM ".$table.
" WHERE view = 1 OR view = 0".
" ";
$result_ds = mysql_query ($sql_ds);
$num_rows_ds = mysql_num_rows($result_ds);
Etwas unpraktisch ist dabei, dass PHP (oder SQL?) nicht bei 1 sondern bei 0 zu zählen beginnt. Der erste Datensatz hat also die Nummer null.
Zuerst muss definiert werden wieviele Datensätze pro Seite ausgegeben werden sollen. Dann müssen Variablen berechnet werden, damit die Startwerte für das LIMIT beim Zurück- und Vorwärts-Blättern in der URL übergeben werden können. Zusätzlich berechne ich die Zahlen um im Link gleich anzugeben welche Datensätze gezeigt werden sollen. Letzteres ist grundsätzlich nicht nötig und kann auch weggelassen werden.
CODE
$viewds = 5; // Anzahl Datensätze pro Seite
$prefirstds = $firstds - $viewds; // erster DS vorherige Seite (Abfrage)
$nextfirstds = $firstds + $viewds; // erster DS nächste Seite (Abfrage)
$firstview = $firstds + 1; // Text: Anzeige von...
$lastview = $firstds + $viewds; // Text: Anzeige ...bis
if ($lastview > $num_rows_ds){$lastview = $num_rows_ds;} // Letzter Block wenn kleiner als Vorgabe
$prefirstview = $prefirstds + 1; // Text: Link Anzeige von... (vorherige Seite)
$prelastview = $prefirstview + $viewds - 1; // Text: Link Anzeige ...bis (vorherige Seite)
$nextfirstview = $nextfirstds + 1; // Text: Link Anzeige von... (nächste Seite)
$nextlastview = $nextfirstview + $viewds - 1; // Text: Link Anzeige ...bis (nächste Seite)
if ($nextlastview > $num_rows_ds){$nextlastview = $num_rows_ds;} // Letzter Block wenn kleiner als Vorgabe
Zusätzlich will ich nicht nur anzeigen wie viele DS vorhanden sind, und welche gerade angezeigt werden, sondern auch vieviele Seiten es für alle benötigt und welches die aktuelle Seite ist.
CODE
if ($num_rows_ds > 0) // Anzahl der Seiten berechnen
{
$anzpages = 1;
$entry = $viewds;
while($entry < $num_rows_ds){$anzpages = $anzpages + 1; $entry = $entry + $viewds;}
$prepagecount = $pagecount - 1; // Seite X von Y, vorherige Seite
$nextpagecount = $pagecount + 1; // Seite X von Y, nächste Seite
}
Danach erfolgt der Aufruf der gewünschten Datensätze sowie deren Ausgabe
CODE
// Anzuzeigende DS aufrufen
$sql = "SELECT * ".
" FROM ".$table.
" WHERE view = 1 OR view = 0".
" ORDER BY stamp DESC".
" LIMIT ".$firstds.",".$viewds.
" ";
$result = mysql_query ($sql);
$num_rows = mysql_num_rows($result);
echo "<p class=\"text\">Von ".$num_rows_ds." Einträgen werden die Einträge ".$firstview." - ".$lastview." angezeigt. (Seite ".$pagecount." von ".$anzpages.")\n";
$i = $firstview; // Laufende DS-Nummer
while($results = mysql_fetch_array($result,MYSQL_BOTH))
{
$row_color = ( !($i % 2) ) ? "row1" : "row2";
echo "<td class=\"$row_color\" valign=\"top\"><p class=\"text_r\">$i</td>\n";
$i ++;
}//endwhile
Zum Schluss kommen nun noch die Links zum Blättern. Die aktuelle Seite ist in der Direktauswahl der Seiten fett hervorgehonen und nicht verlinkt
CODE
// Blättern Links
// Direktwahl, Link für jede Seite erzeugen
echo "<p class=\"text_r\">[ \n";
$pagenr = 0;
$dsnr = 1;
$link = 1;
$block = 1;
$entry = $viewds;
while($dsnr <= $num_rows_ds) //1 2
{
if ($link == 1)
{
$pagenr = $pagenr+ 1;
if ($pagenr > 1){echo "-";}
if ($pagenr > 1){echo "-";}
if ($pagecount == $pagenr)
{
echo " <b>".$pagenr."</b> ";
}
else
{
echo "<A HREF=\"index.php?page=gb&firstds=".($entry-$viewds)."&pagecount=".$pagenr."\" class=\"link\">".$pagenr."</A>";
}
$link = 0;
$entry = $entry + $viewds;
}
if ($block == $viewds)
{
$block = 0;
$link = 1;
}
$block = $block + 1;
$dsnr = $dsnr + 1;
} // endwhile
echo " ]\n";
// Vorwärts/Retour
echo "<p class=\"text\">[ \n";
// zurück
if ($prefirstds >= 0)
{
echo "<A HREF=\"http://www.pferde.ch/admin/index.php?page=gb&firstds=$prefirstds&pagecount=$prepagecount\" class=\"link\">Zurück (".$prefirstview."-".$prelastview.")</A>\n";
}
// Trenner
if ($prefirstds >= 0 && $lastview < $num_rows_ds)
{
echo " | \n";
}
// weiter
if ($lastview < $num_rows_ds)
{
echo "<A HREF=\"http://www.pferde.ch/admin/index.php?page=gb&firstds=$nextfirstds&pagecount=$nextpagecount\" class=\"link\">Weiter (".$nextfirstview."-".$nextlastview.")</A>\n";
}
echo " ]\n";
// Speicher freigeben und Verbindung trennen
mysql_close($database);
Das ist es soweit. Wer sehen will wie es funktioniert, hier habe ich es z.B. integriert:
Gästebuch 'pferde.ch'