IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - Seitenweise blättern mit PHP



Seitenweise blättern mit PHP

Wenn man größere Datenmengen als Ergebnis einer Abfrage darstellen muß, ist es hilfreich, das Ergebnis auf mehrere Bildschirmseiten zu verteilen. Dieser Artikel beschreibt, wie man mit PHP die nötigen Links erzeugt, um seitenweise durch das Ergebnis zu blättern.


Autor: Wolfgang Arnberger (Wolfgang)
Datum: 23-01-2002, 19:25:55
Referenzen: http://www.it-studio.net
Schwierigkeit: Fortgeschrittene
Ansichten: 17957x
Rating: 7.25 (4x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



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.

Geben Sie einen Buchstaben ein, um alle Datensätze aufzulisten, die mit diesem Buchstaben beginnen.
Anfangsbuchstabe:

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 Datensätze
// 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 zurück
echo "<a href= \"blaettern.php?
Anfangsposition=0&sql=$sql\">Anfang</a>&nbsp;";
// berechnet die Anfangsposition der vorigen Seite
$back=$Anfangsposition-$ZeilenProSeite;
if($back < 0) {
$back=0;
}
// Link, um eine Seite zurück zu gehen
echo "<a href=\"blaettern.php?
Anfangsposition=$back&sql=$sql\"><</a>&nbsp;";
}
?>
</TD>
<TD WIDTH="60%">
<?
// Links zum Blättern
// Anzahl der vollen Seiten berechnen
$Seiten=intval($Anzahl/$ZeilenProSeite);

// Eine Seite für die restlichen Datensätze
// hinzufügen
if($Anzahl%$ZeilenProSeite) {
$Seiten++;
}

// Die Links für die Seiten erzeugen
for($i=1;$i<=$Seiten;$i++) {
$fwd=($i-1)*$ZeilenProSeite;
// für die derzeit gezeigte Seite
// wird der Link in rot angezeigt
if($Anfangsposition/$ZeilenProSeite+1==$i) {
echo "&nbsp;<a href=\"blaettern.php?Anfangsposition=$fwd
&sql=$sql\"><FONT COLOR=\"#FF0033\">$i</FONT></a>";
} else {
// für alle anderen Seiten in schwarz
echo "&nbsp;<a href=\"blaettern.php?Anfangsposition=$fwd
&sql=$sql\"><FONT COLOR=\"#000000\">$i</FONT></a>";
}

// Links pro Zeile
if($i%25==0) {
echo "<br>";
}
}
echo "&nbsp;";
?>
</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>&nbsp;";
echo "<a href=\"blaettern.php?
Anfangsposition=$fwd&sql=$sql\">Ende</a>&nbsp;";
}
?>
</TD>
</TR>
</TABLE>
<? } ?>


Download des Beispiels unter http://www.it-studio.net/



radschinsky
Rookie
Beitrag vom:
25-06-2008, 11:23:36

Seitenweise blättern

Ich bin Neuling in PHP und habe das Script ausprobiert. Leider bekomme ich immer nur die ganue DB angezeigt. Kann es daran liegen das in blaettern.php vergessen wurde die Variable 'suchbegriff' aus dem Formular 'suchen.php' mit $_POST["suchbegriff"] auszulesen oder habe ich was anderes übersehen?
Salü
Erwin

-----------------------------------------------------
MC Örwin


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04506
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06241
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1140
Comments: 0