|
Seitenweise blättern
von Wolfgang
Arnberger
Dieses Tutrorial beschreibt, wie man Datensätze
aus eine Datenbank so abfragen kann, daß man sie
seitenweise darstellen und mit entsprechenden Links
durch das Ergebnis blättern kann.
Ich habe dafür eine einfache Tabelle mit Adressen
verwendet, die aus den Feldern Firma, Straße und
Ort besteht.
Der erste Schritt ist ein Formular, um den Suchbegriff
abzufragen. In diesem Beispiel wird nur ein einzelner
Buchstabe als Suchbegriff erwartet, um dann alle Datensätze
anzuzeigen, deren Firmenname mit diesem Buchstaben beginnt.
Hier der Quellcode für dieses Formular:
<HTML> <HEAD> <TITLE>Suchbegriff abfragen</TITLE> <META NAME="author" CONTENT="Wolfgang Arnberger"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <FORM NAME="" METHOD="post" ACTION="blaettern.php"> <TABLE WIDTH="100%" BORDER="1"> <TR> <TD>Geben Sie einen Buchstaben ein, um alle Datensätze aufzulisten,die mit diesem Buchstaben beginnen.</TD> </TR> <TR> <TD>Anfangsbuchstabe: <INPUT TYPE="text" NAME="suchbegriff" SIZE="2" MAXLENGTH="1"> <INPUT TYPE="submit" NAME="Suchen" VALUE="Suchen"> </TD> </TR> </TABLE> </FORM> </BODY> </HTML>
Das Formular sendet den Inhalt des Eingabefeldes an
die Datei blaettern.php, wo die eigentliche Abfrage
und Darstellung erfolgt.
<html> <head> <title>Seitenweise anzeigen</title> <meta name="author" content="Wolfgang Arnberger"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> </head> <body> <? include("datenbank.php"); $ZeilenProSeite=10;
if(!empty($suchbegriff)) { $suchbegriff=strtoupper($suchbegriff); }
if(empty($Anfangsposition)) { $Anfangsposition=0; }
Die Datei "datenbank.php" stellt nur die
Verbindung zur Datenbank her und hat folgenden Inhalt:
<? $db=@mysql_connect("localhost","",""); if(!$db) { die("Keine Verbindung zum Datenbankserver. [1]"); }
$select=@mysql_select_db("adressen",$db); if(!$select) { die("Derzeit keine Verbindung zur Datenbank. [2]"); } ?>
Die Variable $ZeilenProSeite gibt an, wie viele Datensätze
auf jeder Seite dargestellt werden sollen. Daraus ergibt
sich dann die Anzahl der Seiten und somit die Anzahl
der Links, die man zum Blättern benötigt.
Dann wird abgefragt, ob ein Suchbegriff angegeben wurde
und der Inhalt der Variablen $suchbegriff zu einem Großbuchstaben
umgewandelt. Wurde kein Suchbegriff angegeben, werden
alle Datensätze angezeigt.
Da beim ersten Durchgang noch kein Wert für die
Anfangsposition vorhanden ist, wird die Variable mit
0 initialisiert. Bei jedem weiteren Durchgang hat die
Variable bereits einen Wert, den sie über den entsprechenden
Link zugewiesen bekommt. Anhand der Anfangsposition
wird entschieden, welche Seite, bzw. welche Teilmenge
aus dem Ergebnis dargestellt werden soll.
<? if(!empty($sql)) { $sql=str_replace("\\","",$sql); } else { $sql="select * from adressen where firma like '$suchbegriff%'"; }
Beim ersten Durchgang hat $sql noch keinen Wert, also
muß der SQL-String erzeugt werden. Da wir in diesem
Beispiel nur nach dem Anfangsbuchstaben im Feld Firma
suchen, muß mit "like" abgefragt werden.
Bei jedem weiteren Durchgang wird $sql durch die Links
an die Seite übergeben. Da dabei störende
\ vor ' eingefügt werden, müssen diese wieder
entfernt werden, um einen gültigen SQL-String zu
erhalten.
<? $result=mysql_query($sql); $Anzahl=mysql_num_rows($result);
$sql1="$sql limit $Anfangsposition,$ZeilenProSeite"; $sql=urlencode($sql); ?>
Der $sql String wird zuerst verwendet, um die Anzahl
der Datensätze zu ermitteln, die der Bedingung
entsprechen. Daraus wird errechnet, wie viele Seiten
und somit wie viele Links anzuzeigen sind.
Danach wird $sql durch den SQL Befehl "limit ..."
erweitert und der Variablen $sql1 zugewiesen. Dieser
String wird gebraucht, um die Datensätze für
die gewünschte Seite abzufragen.
Beim ersten Durchgang ist $Anfangsposition=0, wie wir
oben festgelegt haben. Bei jedem weiteren Durchgang
erhält $Anfangsposition seinen Wert aus dem Link,
der angeklickt wurde. Dabei gibt $Anfangsposition den
ersten abzurufenden Dartensatz an, während $ZeilenProSeite
angibt, wie viele Datensätze abgerufen und somit
auf der Seite angezeigt werden sollen.
Da der Inhalt von $sql mit den Links wieder an die
Seite übergeben werden soll und zwangsweise ungültige
Leerzeichen enthält, muß der SQL String mit
urlencode() entsprechend codiert werden.
<table WIDTH="100%"> <tr> <td WIDTH="40%"> Firma</td> <td WIDTH="30%"> Straße</td> <td WIDTH="30%"> Ort</td> </tr> <? $result = mysql_query($sql1); while($row=mysql_fetch_array($result,MYSQL_ASSOC)) { ?> <TR> <TD width="40%"> <? echo $row["firma"] ?> </TD> <TD width="30%"> <? echo $row["strasse"] ?> </TD> <TD width="30%"> <? echo $row["ort"] ?> </TD> </TR> <? } ?> </TABLE>
In diesem Abschnitt wird nur die Tabelle erzeugt und der
Inhalt der Abfrage angezeigt.
Darunter kommt nun eine Tabelle, die aus drei Spalten und
einer Zeile besteht. In die erste Spalte kommen die Links,
um zum Anfang und eine Seite zurück zu gehen. Die mittlere
Spalte enthält die Links für die einzelnen Seiten
und rechts stehen die Links, um eine Seite weiter zu blättern
bzw. um zum Ende zu springen. Natürlich werden die Links
nur dann angezeigt, wenn sie auch angesprungen werden können.
<? // Tabelle nur einblenden, wenn Datensaetze // gefunden wurden if ($Anzahl > 0) {?> <TABLE width="100%"> <TR> <TD width="20%"> <? // Links nur anzeigen, wenn NICHT gerade // die erste Seite angezeigt wird if($Anfangsposition > 0) { // Anfang und zurueck echo "<a href= \"blaettern.php? Anfangsposition=0&sql=$sql\">Anfang</a> "; // berechnet die Anfangsposition der vorigen Seite $back=$Anfangsposition-$ZeilenProSeite; if($back < 0) { $back=0; } // Link, um eine Seite zurueck zu gehen echo "<a href=\"blaettern.php? Anfangsposition=$back&sql=$sql\"><</a> "; } ?> </TD> <TD width="60%"> <? // Links zum Blaettern // Anzahl der vollen Seiten berechnen $Seiten=intval($Anzahl/$ZeilenProSeite);
// Eine Seite fuer die restlichen Datensaetze // hinzufuegen if($Anzahl%$ZeilenProSeite) { $Seiten++; }
// Die Links fuer die Seiten erzeugen for($i=1;$i<=$Seiten;$i++) { $fwd=($i-1)*$ZeilenProSeite; // fuer die derzeit gezeigte Seite // wird der Link in rot angezeigt if($Anfangsposition/$ZeilenProSeite+1==$i) { echo " <a href=\"blaettern.php?Anfangsposition=$fwd &sql=$sql\"><FONT COLOR=\"#FF0033\">$i</FONT></a>"; } else { // fuer alle anderen Seiten in schwarz echo " <a href=\"blaettern.php?Anfangsposition=$fwd &sql=$sql\"><FONT COLOR=\"#000000\">$i</FONT></a>"; }
// Links pro Zeile if($i%25==0) { echo "<br>"; } } echo " "; ?> </TD> <TD width="20%" align="RIGHT"> <? // Nur anzeigen, wenn NICHT gerade // die letzte Seite angezeigt wird if($Anfangsposition < $Anzahl-$ZeilenProSeite) { // weiter und Ende $neueAnfangsposition=$Anfangsposition+$ZeilenProSeite; echo "<a href=\"blaettern.php? Anfangsposition=$neueAnfangsposition &sql=$sql\">></a> "; echo "<a href=\"blaettern.php? Anfangsposition=$fwd&sql=$sql\">Ende</a> "; } ?> </TD> </TR> </TABLE> <? } ?>
|