[PHP/MySQL] Abfrage mehrerer Datensätze mit Navigation

sulospace

searcher
21 April 2006
1.721
115
Hallo,

ich in einer Tabelle ca 7000 Datensätz.
Die möchte ich gerne abfragen.Aber nicht alle 7000 auf einer Seite sondern immer nur 100 Stück pro seite.Dazu brauche ich ja sowas wie eine Navigation in der ich unter den Datensätze die Seitenzahlen angebe...

Wie mache ich das am besten automatisiert?

mfg sulospace
 
Hallo,

ich nutze die folgenden beiden Funktionen:

PHP:
    /* Gibt eine Seitennavigation der Form "1 2 3 4 5" aus.
     * Parameter: $num_results - Zahl der Datensätze insgesamt
     *            $current - aktuelle Seite
     *            $results_per_page - Anzahl der Ergebnisse pro Seite (optional)
     *            $page_param - Name des GET-Parameters, der die Seitenzahl enthält (optional)
     *            $clear - verhindert Floating (optional)              
     */
    function page_navi($num_results, $current, $results_per_page = 10, $page_param = 'page', $clear = true) {
        $num_pages = ceil($num_results / $results_per_page);        
        
        echo '<ul class="pagenavi"';
        if(!$clear)
            echo ' style="clear: none !important;"';
        echo '>';
        if($num_pages <= 6) {
            for($i = 1; $i <= $num_pages; $i++) {
                $qry = remove_from_querystring($page_param);
                echo '<li><a href="' . htmlentities($qry) . $page_param . '=' . $i . '">' . $i . '</a></li>';
            }
        }
        else {
            if($current != 1 AND ($current - 4) > 1) {
                $qry = remove_from_querystring($page_param);
                echo '<li><a href="' . htmlentities($qry) . $page_param . '=1">' . 'Erste' . '</a></li>';
            }
            // aktuelle Seiten im Fokus
            for($i = ($current - 6); $i <= ($current + 6); $i++) {
                if($i < 1 OR $i > $num_pages)
                    continue;
                
                $qry = remove_from_querystring($page_param);
                if($current == $i)
                    echo '<li><strong>' . $i . '</strong></li>';
                else
                    echo '<li><a href="' . htmlentities($qry) . $page_param . '=' . $i . '">' . $i . '</a></li>';
                
            }
            if($current != $num_pages AND ($current + 4) < $num_pages) {
                $qry = remove_from_querystring($page_param);
                echo '<li><a href="' . htmlentities($qry) . $page_param . '=' . $num_pages . '">' . 'Letzte' . '</a></li>';
            }            
        }
        echo '</ul>';
        if($clear)
            echo '<p class="clear"></p>';
    }
    
    /* Gibt einen neuen Querystring zurück
     * Parameter: $to_remove - string oder array, zu entfernende GET-Parameter     
     */
    
    function remove_from_querystring($to_remove) {
        $qry = '?';
        $to_remove = (array) $to_remove;
        $get = $_GET;
        foreach($to_remove AS $to_remove)
            unset($get[$to_remove]);
        
        foreach($get AS $key => $value) {   
            $qry .= $key . '=' . $value . '&'; 
        }        
        return $qry;
    }

Das ganze kannst du dann per CSS ganz leicht formatieren ;)

Greetz

paddya
 
Zuletzt bearbeitet:
Steht doch eigentlich in der Funktionsdokumentation ;)

Aber ich bin mal nett: Du brauchst zwei Datenbankabfragen. Einmal holst du dir die Datensätze aus der Datenbank und mit der zweiten Abfrage holst du dir die Gesamtzahl der Datensätze (im Beispiel befindet sich diese dann in $results_total).

PHP:
page_navi($results_total, $_GET['page'], 30, 'page');

Greetz

paddya