Seiten Blättern in MySQL Ergebnis
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anpassen
anwendung
anzahl
array
aufruf
ausgabe
beispiel
bereich
code
datum
element
ende
ergebnis
fehler
funktion
limit
navigation
ordern
tabelle
testen
-
Hallo
habe da mal eine Funktion zusammen-geschustert, die man evtl ab und zu brauchen kann
mit der kann man in MySQL-Abfragen mit größeren Ergebnisen über Seiten Blättern
BSP: Abfrage ergibt 74 Treffer,
Ausgabe z.B. auf 8 Seiten mit je (max.) 10 Ergebnissen pro Seite (letzte hat 4 Einträge)
schön an der Funktion finde ich, dass sie gleich einen HTML-Code zur Seiten-Navigation liefert
mit erste Seite ... dazwischen der Bereich rund um die aktuelle Seite und am Ende ... letzte Seite
den Bereich (Links zwischen erster und letzer Seite stehen) kann man in der Funktion als Wert setzen
die Anzahl der Ergebnisse pro Seite kannman bei Funktionsaufruf in Parameter angeben
hier die Funktion: Datei: func_getLimitStart.php
<?php // ----------- Seiten Blaettern in MySQL Ergebnis ------------ // ----------------------------------------------------------- function getLimitStart ($gesamt, $proseite, $seite) { $gesamt = preg_replace('/[^0-9]/','',$gesamt); $proseite = preg_replace('/[^0-9]/','',$proseite); $seite = preg_replace('/[^0-9]/','',$seite); ## $aufruf = '_test1.php'; // Dateiname auf der das Ergebnis steht $aufruf = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; $xlimit = 3; // Anzahl Links in Seiten-Navigation (zwischen erster und letzer Seite) // ------------------------------- $pmax = ceil($gesamt/$proseite); // letzte Seite if ($pmax < $seite) { $seite = 1; } if ($seite < 1) { $seite = 1; } $pstart = ( ($seite * $proseite) - $proseite ); $pender = ( $pstart + $proseite ); // ---------- Seiten Navigatiin -------- $yps = ($seite-2); if ($yps < 1) { $yps = 1; } $ype = ($yps + $xlimit); for ($zp=0; $zp<$xlimit; $zp++) { if ($seite == ($pmax-$zp)) { $yps = ($yps-($xlimit-$zp-1)); } } $pagenavi = ''; ## $pagenavi .= ' '; $pagenavi .= 'Seiten: '; if ($seite == 1) { $pagenavi .= " <u>001</u> "; } else { $pagenavi .= " <a href=\"".$aufruf."?p=1\" title=\"Seite 001\">001</a> "; } // ------------------------ if ($pmax > 1) { $pagenavi .= " ... "; for($xp=$yps; $xp<$ype; $xp++) { $np = ($xp + 1); if (10 < $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "0".$np; } if ($np < $pmax) { if ($np == $seite) { $pagenavi .= " <u>".$npi."</u> -"; } else { $pagenavi .= " <a href=\"".$aufruf."?p=".$np."\" title=\"Seite ".$npi."\">".$npi."</a> -"; } } } $pagenavi = rtrim($pagenavi,'-'); if (10 < $pmax AND $pmax < 100) { $pmaxi = "0".$pmax; } elseif ($pmax < 10) { $pmaxi = "00".$pmax; } else { $pmaxi = "0".$pmax; } if ($seite == $pmax) { $pagenavi .= " ... <u>".$pmaxi."</u> "; } else { $pagenavi .= " ... <a href=\"".$aufruf."?p=".$pmax."\" title=\"Seite ".$pmaxi."\">".$pmaxi."</a> "; } } // ------------------------------------- return array($pstart, $seite, $pagenavi, $pmax); } // ----------------------------------------------------------- ?>
und hier ein Beispiel der Anwendung
<?php // ------------- Beispiel Anwendung ------- // ---- Config und Datenbank-Verbindung $con herstellen ---- $db_host = 'xxxxxxxxx'; $db_user = 'yyyyyyy'; $db_pass = 'zzzzzzzzz'; $db_name = 'aaaaaaaa'; $db_tabelle1 = 'prefix_meinetabelle'; // --- Tabelle auswaehlen $plimit = 10; // ---- Anzahl (Ausgabe) pro Seite ---- // ------------------- $con = mysql_connect($db_host,$db_user,$db_pass); if (!$con) { echo "<br >Fehler: <br >\r\n" . mysql_error(); exit; } $sel = mysql_select_db($db_name, $con); // ---------- Anzahl Gesamt ermitteln ------- $sql_select1 = "SELECT * FROM `".$db_tabelle1."`"; $result_select1 = mysql_query($sql_select1, $con); $num_rows1 = mysql_num_rows($result_select1); // ---------- Aktuelle Seite ermitteln -------- if (!empty($_REQUEST['p'])) { $pseite = trim(chop($_REQUEST['p'])); } else { $pseite = 1; } // ----- Funktion laden und aufrufen ---- include_once('func_getLimitStart.php'); $erg = getLimitStart($num_rows1, $plimit, $pseite); $pstart = $erg[0]; // ---- Startwert fuer LIMIT in SQL $iseite = $erg[1]; // ---- die aktuelle Seite $pagenavi = $erg[2]; // ---- HTML der Seiten Navigation $pmax = $erg[3]; // ---- letzte Seite $pstartinfo = ($pstart+1); // ---- ab dem Ergebnis $penderinfo = ($pstart+$plimit); // ---- bis zum Ergebnis // ------- SQL anpassen !!!! ------- $sql = "SELECT * FROM ".$db_tabelle1." LIMIT ".$pstart.",".$plimit.""; $result = mysql_query($sql, $con); if (!$result) { echo "<br >Fehler: <br >\r\n" . mysql_error(); exit; } $daten = array(); while ( $row2 = mysql_fetch_assoc($result) ) { $daten[] = $row2; } // ------- Ausgabe Seiten Info ------- echo "<p>Gesamt: <strong>".$num_rows1."</strong> Einträge auf <strong>".$pmax."</strong> Seiten. "; echo " Aktuelle Seite: <strong>".$iseite."</strong> (Einträge von ".$pstartinfo." bis ".$penderinfo.") </p>\r\n"; // ------- Ausgabe Seiten Navigation ------- echo "<p style=\"font-size:20px;\">".$pagenavi."</p>\r\n"; // ------- Ausgabe Seiten Inhalt / Daten ------- $pnr = ($pstart + 1); foreach($daten as $ashow) { echo "<br />".$pnr."\r\n"; echo "<pre>\r\n"; print_r($ashow); echo "</pre>\r\n"; echo "<hr />\r\n"; $pnr++; } // ----------- Ende ------ echo "<br />\r\n"; echo "<br /> FOOTER \r\n"; echo "<br />\r\n"; // ----------------------------------------------------------- ?>
zum Testen / Nutzen muss man die Dazenbank Zugangsdaten anpassen
eine Tabelle mit genug Einträgen haben
und man kann die SQL Zeile anpassen ... z.B. WHERE Bedingungen und ORDER BY etc.
// ------- SQL anpassen !!!! ------- $sql = "SELECT * FROM ".$db_tabelle1." WHERE ..... ORDER BY ..... LIMIT ".$pstart.",".$plimit."";
die Ausgabe in der foreach() Schleife mit print_r() ist natürlich auch nur zum Testen
ob und welche Daten ankommen, auch da sollte man die Ausgabe selbst gestalten
Die Funktion funktioniert bei meinen Tests ganz gut,
vielleicht ha ja jemand noch Verbesserungs-Vorschläge oder findet Bugs, etc.
viel Spaß damit
Beitrag zuletzt geändert: 30.10.2011 17:21:51 von anlagegeld -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo, ne nette Idee ...
aber Du hast da noch einen kleinen Fehler bei Ausgabe der Seiten-Nummern
mit führenden NULLen ... alle ab 100 bekommen auch eine 0 vorne dran (= hier aber falsch)
if (10 < $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "0".$np; }
richtig wäre:
if (10 < $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "".$np; }
das gleiche bei
else { $pmaxi = "0".$pmax; }
auch da die 0 (NULL) raus nehmen
-
ganeuer noch:
wenn( größer und gleich 10 und kleiner 100 ) ...
sonst ist bei genau 10 keine 0 (NULL) vorne dran !!!
if (10 <= $np AND $np < 100) { $npi = "0".$np; }
und noch .... für Seiten Blättern in einem Array
Funktion:
<?php // ---------------------------------------------------- function SeitenNavi ($anzahl, $proseite, $gopage, $xlimit_li, $xlimit_re) { $maxseite = ceil(($anzahl/$proseite)); $xlimit = ($xlimit_li + $xlimit_re + 1); if ($maxseite < $gopage) { $gopage = 1; } if ($gopage < 1) { $gopage = 1; } $pstart = ( ($gopage * $proseite) - $proseite ); $pender = ( $pstart + $proseite ); $yps = ($gopage-($xlimit_li+1)); if ($yps < 1) { $yps = 1; } $ype = ($yps + $xlimit); for ($zp=0; $zp<$xlimit; $zp++) { if ($gopage == ($maxseite-$zp)) { $yps = ($yps-($xlimit-$zp-1)); } } $zpe = ($maxseite - $xlimit_re - 1); if ($zpe <= $gopage) { $yps = ($yps+1); } $pagenavi = ''; ## $pagenavi .= ' '; $pagenavi .= 'Seiten: '; if ($gopage == 1) { $pagenavi .= " <u>001</u> "; } else { $pagenavi .= " <a href=\"index.php?p=1\">001</a> "; } if ( $maxseite > 1 ) { $pagenavi .= " ... "; for($xp=$yps; $xp<$ype; $xp++) { $np = ($xp + 1); if (10 <= $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "".$np; } if ($np < $maxseite) { if ($np == $gopage) { $pagenavi .= " <u>".$npi."</u> -"; } else { $pagenavi .= " <a href=\"index.php?p=".$np."\">".$npi."</a> -"; } } } $pagenavi = rtrim($pagenavi,'-'); if (10 <= $maxseite AND $maxseite < 100) { $pmaxi = "0".$maxseite; } elseif ($maxseite < 10) { $pmaxi = "00".$maxseite; } else { $pmaxi = "".$maxseite; } $pagenavi .= " ... "; if ($gopage == $maxseite) { $pagenavi .= " <u>".$pmaxi."</u> "; } else { $pagenavi .= " <a href=\"index.php?p=".$maxseite."\">".$pmaxi."</a> "; } } return $pagenavi; } // ---------------------------------------------------- ?>
Aunwendung:
<?php // ---------------------------------------------------- $anzahl = count($data); // --- Anzahl der Elemente im Array $proseite = 10; // --- Ausgabe max. Elemente pro Seite $pnli = 3; // --- Linkanzahl links von der aktuellen Seite $pnre = 3; // --- Linkanzahl rechts von der aktuellen Seite // --- aktuelle Seite if (!empty($_REQUEST['p'];)) { $gopage = $_REQUEST['p']; } else { $gopage = 1; } // ---------------------------------------------------- $pnavi = SeitenNavi ($anzahl, $proseite, $gopage, $pnli, $pnre); echo "<br />".$pnavi."\r\n"; // ---- Ausgabe zum Seiten-Blaettern $teildata = array_chunk($data,$proseite); $xpage = ($gopage-1); $showdata = $teildata[$xpage]; echo "<pre>\r\n"; print_r($showdata); // ---- Ausgabe Teil-Array zur aktuellen Seite echo "<pre>\r\n"; // ---------------------------------------------------- ?>
Beispiel Ausgabe auf Seite 7 mit Linkanzahl (links und rechts der Seite) je 2 Links
Seiten: 001 ... 005 - 006 - 007 - 008 - 009 ... 020
.... alle Zahlen ausser hier die 007 sind Link zur jeweiligen Seite ... ?p=
:)
Beitrag zuletzt geändert: 14.11.2011 20:36:15 von osuche -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage