kostenloser Webspace werbefrei: lima-city


Seiten Blättern in MySQL Ergebnis

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    anlagegeld

    anlagegeld hat kostenlosen Webspace.

    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 .= '&nbsp;&nbsp;&nbsp; '; 
    
    $pagenavi .= 'Seiten: &nbsp;&nbsp; '; 
    
    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&auml;ge auf <strong>".$pmax."</strong> Seiten. "; 
    echo "&nbsp;&nbsp;&nbsp; Aktuelle Seite: <strong>".$iseite."</strong> (Eintr&auml;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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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


  4. 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 .= '&nbsp;&nbsp;&nbsp; '; 
    
    $pagenavi .= 'Seiten: &nbsp;&nbsp; '; 
    
    
    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
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!