Tutorials

Simple Seitenanzeige in PHP/MYSQL Tutorial

Einloggen
Benutzername:
Passwort:

Passwort vergessen?
Kostenlos
Anmelden
anzeigen
Simple Seitenanzeige in PHP/MYSQL


3782 - ntmb - 03.10.2008 12:52 Uhr - Version: 1 - - verlinken als BB-Code


In diesem Tutorial möchte ich euch mal zeigen, wie man ganz einfach eine Seitenanzeige in PHP und MYSQL realisiert.

Ihr hab doch bestimmt schon auf Internetseiten gesehen, das dort eine Seitenanzeige zum Einsatz kommt. (Nachrichtenseiten, ntmb.de Smily NR:8 , usw..)

So eine Seitenanzeige hat auch viele Voteile, wie das nicht komplett laden der Datenbankinhalte, dadurch kann man die Performance seiner Seite optimieren und Besucher der Seite können sich leicht duch die Seiten navigieren/durchblättern, so wie in einem normalen Buch.

Für dieses Tutorial setzte ich voraus, dass ihr schon im Script eine MYSQL-Verbindung aufgebaut habt, falls nicht, dann schaut euch mal auf dieser Seite um, es gibt hier auch Tutorials zur MYSQL-Verbindung.

Woher weiss man wie viel Seiten man benötigt?
Man guckt sich genau an wie viele Einträge es gibt:
1
$eintraegeges=mysql_fetch_array(mysql_query('select count(id) as anzahl from deinetabelle WHERE 1'));
count(id) as anzahl bedeutet hierbei alle Einträge zu zählen und als Spalte anzahl zurückzugeben. In unseren Tutorial nehmen wir einfach mal die ,,deinetabelle"-Tabelle. Ich denke mal das du eine andere Tabelle verwendest, also musst du dies dann auch noch anpassen.


Jetzt wissen wir wie viele Einträge man hat.
Nun müsste man ja defenieren wie viele Einträge pro Seite man haben will und anschließend teilt man die gesamten Einträge durch seine defenierte ,,Einträge pro Seite":
1
2
3
4
$eintraegeproseite=40;
$seitentotal=$eintraegeges['anzahl']/$eintraegeproseite;
$seitenanzahl=floor($seitentotal);
if($seitenanzahl==$seitentotal){ $seitenanzahl--; }
Die Funktion floor sorgt dafür, dass die Kommastellen von der Zahl abgeschnitten werden (12,65341->12) Hierbei erfolgt aber keine Rundung!
Die eine Ifabfrage fragt ab, ob alle Seiten ausgefüllt sind, wenn es der Fall ist, wird die seitenanzahl um eine Einheit (seitenanzahl-1) abgezogen, da man sonst eine leere Seite am Ende hätte.


Zu dem Script gehört natürlich auch eine Sicherheitabfrage, die verhindern soll, das Besucher das Script manipulieren oder sogar Schaden anrichten können.
1
2
3
if($_GET['p']=='' or $_GET['p']<0 or $_GET['p']>$seitenanzahl or !preg_match("/^[0-9]*$/",$_GET['p'])){
$_GET['p']=0; 
}

Die If-Abfrage ist mit mehreren ODER-Operatoren verknüpft, dass heist, dass nur ein Wert erfüllt sein muss, damit die If-Abfrage gültig ist.
Es wird gefragt ob der Wert mit der Seitenanzahl ($_GET['p']) leer ist,
ob der Wert unter null ist,
ob der Wert über die Seiteanzahl hinausgeht und
ob der Wert keine natürlichen Zahl ist (1, 2, 3, 4, 5,....N)

Innerhalb der Ifabfrage wird dann die aktuelle Seite auf 0 gesetzt, also auf die erste Seite.


Jetzt kommt der Teil, wo wir die Seitenanzahl ausgeben wollen. Hierbei verwenden wir eine zählergesteuerte Schleife (for), die von 0 bis unsere seitenanzahl reicht:
1
2
3
4
5
6
7
8
9
10
for($ii=0;$ii<=$seitenanzahl;$ii++){
$pagenr=$ii+1;
    if($ii==$_GET['p']){ 
    echo '<a href="?p='.$ii.'"><b>'.$pagenr.'</b></a> ';
    }
    else{ 
    echo '<a href="?p='.$ii.'">'.$pagenr.'</a> ';
    }
}
echo '<br>';
In der Schleife geben wir die Seitenanzahl aus. Eins ist zu beachten, es wird die $pagenr Variable verwendet, weil wir nicht bei Seite null beginnen sondern bei 1, aber im Script (MYSQL) beginnen wir schon mit null.
Wir verwenden in unserer Schleife auch eine Schöne If-Abfrage, die abfragt ob die aktuelle Seite dran ist, wenn es der Fall ist, dann wird der Seitenlink fett gemacht. Zum Ende erfolgt dann halt noch ein Zeilenumbruch.


Nu kommen wir zur Ausgabe des Inhaltes:
1
2
3
4
5
$pnow=$_GET['p']*$eintraegeproseite;
$result=mysql_query('select id from deinetabelle where 1 LIMIT '.$pnow.','.$eintraegeproseite);
while($eintrag = mysql_fetch_array($result)) {
    echo $eintrag['id'].' ';
}
Bei MYSQL gibt es die schöne Möglichkeit ein LIMIT anzugeben, der dafür verwendet werden kann eine Anzahl der auszugebene Einträge zu begrenzen oder ab einer bestimmte Position zu beginngen mit einer begrentzen Menge. Für uns macht hierbei natürlich die zweite Möglichkeit Sinn.

LIMIT '.$pnow.','.$eintraegeproseite
- $pnow stellt unsere Startposition dar, hierbei wird die aktuelle Seitenzahl mit der ,,Anzahl pro Seite" mutlipliziert.
- $eintraegeproseite wenn du es nicht mehr weisst, dann schau weiter oben. Smily NR:7

Also man fängt bei $pnow an und gibt ab dort dann $eintraegeproseite Einträge aus.

In der Schleife geben wir in diesen Tutorial nur die ID aus, natürlich musst du es noch anpassen, aber ich denke das ist dir klar.


Zum Schluss gibt es dann noch das Script am Stück:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
// Eintraerge ingesamt
$eintraegeges=mysql_fetch_array(mysql_query('select count(id) as anzahl from flash where 1'));
// Rechnung
$eintraegeproseite=40;
$seitentotal=$eintraegeges['anzahl']/$eintraegeproseite;
$seitenanzahl=floor($seitentotal);
if(
$seitenanzahl==$seitentotal){ $seitenanzahl--; }
// Sicherheitpruefung
if($_GET['p']=='' or $_GET['p']<or $_GET['p']>$seitenanzahl or !preg_match("/^[0-9]*$/",$_GET['p'])){
$_GET['p']=0
}
// Ausgabe der Seitenanzahl
for($ii=0;$ii<=$seitenanzahl;$ii++){
$pagenr=$ii+1;
    if(
$ii==$_GET['p']){ 
    echo 
'<a href="?p='.$ii.'"><b>'.$pagenr.'</b></a> ';
    }
    else{ 
    echo 
'<a href="?p='.$ii.'">'.$pagenr.'</a> ';
    }
}    
// richtige Eintraege aus der Datenbank    
$pnow=$_GET['p']*$eintraegeproseite;
$result=mysql_query('select * from deinetabelle where 1 LIMIT '.$pnow.','.$eintraegeproseite);
echo 
'<br>';
while(
$eintrag mysql_fetch_array($result)) {
    echo 
$eintrag['id'].' ';
}
?>


Über Feedback zu diesem Tutorial würde ich mich freuen Smily NR:6

mfg Eugen

Mitglieder-Kommentare


#4 von ntmb
Danke Smily NR:8

mfg Eugen
Der freundliche Admin aus der Nachbarschaft
Lachecke.de - Dein täglicher Lacher im Internet
Listrank.de - Die ultimative Topliste nach Themen
#3 von heke
echt super funktioniert 1A, genau das was ich gesucht habe, top leistung und danke noch mal Smily NR:2
#2 von Sniper
ist noice^^

Liebe Grüße
Sniper

Bei Fragen oder Probleme PM me oder schreib in das Forum
#1 von ntmb
Möchte den keiner ein Kommentar zu meinem Tutorial abegeben?

mfg Eugen
Der freundliche Admin aus der Nachbarschaft
Lachecke.de - Dein täglicher Lacher im Internet
Listrank.de - Die ultimative Topliste nach Themen

Nur registrierte Mitglieder könnten einen Kommentar schreiben.

Melde dich doch ganz einfach an, es ist kostenlos. :-)