yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

MySQL Einträge in Seiten unterteilen *update*

In diesem Tutorial erfahrt ihr, wie man z.B. 100 MySQL Einträge auf 5 "Seiten" darstellt. Vielen Dank an Phil für den Codeschnipsel dafür und die Genehmigung daraus ein Tutorial zu machen *gg*

Ich habe den Schnipsel von Phil dann noch ein bisschen ausgefeilt und eine Funktion daraus gemacht. Als erstes Mal die Funktion:

PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
/* die Funktionen */
function make_pages($tabelle$max 15) {
    
$query mysql_query("SELECT * FROM ".$tabelle); // Tabelle wählen
    
$entries mysql_num_rows($auswahl); // Anzahl der Datensätze zählen
    
$seiten ceil($num/$max); // Errechnen von Seitenanzahl (Gesamt geteilt durch Einträge/Seite)
    
$data mysql_unbuffered_query("SELECT * FROM ".$tabelle." ORDER BY id LIMIT ".$_REQUEST['start'].",$max");
    return 
$seiten$max$data;
}

function 
list_pages($filename) { //Seiten ausgeben
    
global $seiten$max;
    echo 
'<a href="'.$filename.'?start=0'">',1,'</a> ';
    for($i=1; $i<= $seiten; $i++) {
        echo '<a href="'.$filename.'
?start='.$i*$max.'">',$i+1,'</a> ';
    }
}
?>


Die erste Funktion hat die Parameter tabelle und max, wobei max optional ist und standartmäßig 15. tabelle steht für die MySQL-Tabelle, aus der die Daten kommen, max die Anzahl der Elemente pro Seite.
Die zweite Funktion hat nur den Parameter filename, der den Namen der Datei, auf der die Seiten dargestellt werden, haben muss. Dabei kann man auch mit eventuell vorhandenen URL Parametern, z.B.: index.php?site=main&page=guestbook arbeiten.

In der ersten Funktion, werden die Seiten berechnet, nach einem Query und mysql_num_rows() wird mit ceil() berechnet wieviele Seiten mit max Einträgen es sind. Dann wird das ganze noch aus der Tabelle gelesen.
In der zweiten Funktion werden die Variablen $seiten und $max aus der ersten Funktion benötigt und dann mit einer simplen for-Schleife jede einzelne Seitennummer inkl. Link ausgegeben.

Die Anwendung der Funktionen sieht dann so aus:
PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
<?php
if(empty($_REQUEST['start']))
    
$_REQUEST['start']="0";

// Liest Daten aus "tabelle" und setzt 20 Einträge pro Seite
make_pages("tabelle"20);
while(
$row mysql_fetch_array($dataMYSQL_ASSOC)) {
    
/* PHP Code */    
}
list_pages("index.php?site=guestbook");
?>


Das Design des ganzen kann man sich natürlich selbst noch anpassen.


und nun noch ne Funktion für LLCoolDannYY:
PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function list_pages($filename) { //Seiten ausgeben
    
global $seiten$max$_REQUEST['start'];
    if(
$i <= 4) {
        echo 
'<a href="'.$filename.'?start=0'">',1,'</a> ';
        for($i=1; $i<= $seiten; $i++) {
            echo '<a href="'.$filename.'
?start='.$i*$max.'">',$i+1,'</a> ';
        }
    } else {
        echo '<a href="'.$filename.'
?start=0'">',1,'</a> ';
        for(
$i=$_REQUEST['start']/$max$i<=4$i++) {
            if(
$_REQUEST['start']/$max != && $_REQUEST['start']/$max != 1)
                echo 
'<a href="'.$filename.'?start='.$i*$max.'">',$i+1,'</a> ';
        }
        echo 
'...';
        for(
$i=$seiten-4$i<=$seiten$i++) {
            echo 
'<a href="'.$filename.'?start='.$i*$max.'">',$i+1,'</a> ';
        }
    }
}
?>

diese Funktion habe ich nicht getestet, und funktioniert nur theorethisch, bei Fehler bitte den richtigen Code per PM im Forum...

Geschrieben von michi am 18.06.2004 (15177x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Ich habe mir für solche Reihen auch eine Funktion gebaut. DIese ist jedoch nicht nur für mysql vorgesehen, sondern ich sage der Funktion, wieviele Datensätze vorhanden sind (entweder über mysql ode textdatei ausgelesen), sage wieviele pro Seite kommen und die wievielte Seite es ist ... ggf. auch einen Parameter wieviel Seiten er +/- als Link anbieten soll ...



denn: auch ein großes Gästebuches wird irgendwannn zu groß, daß es sinn macht, jede Seite darstellen. die 623. Seite eines GBs wird sicher keiner mehr direkt anklicken ...
Geschrieben von René
@Michi: Schreib mal eine Funktion mit folgendem Design:



1 2 3 .... 506 507 508



(sowie im phpBB2-Forum von yubb)
Geschrieben von LLCoolDannY
hab die Funktion hinzugefügt...

Teste die mal bitte :P
Geschrieben von michi