Softwareentwicklung & Webdesign 
EDV Dienstleistungen für KMU        
 



Halbvoll.net- Singlebörse für alleinerziehende Mütter und Väter aus Deutschland, Österreich, Schweiz und Liechtenstein
www.halbvoll.net
 
Gebrauchtwagen Suchmaschine Österreich
Diskontweb.net
 
Alleinerzieher.net - Forum für Alleinerziehende
Diskontweb.net
 
Freizeit-mit-Kind.net - Freizeitaktivitäten für Eltern und Kinder (Deutschland)
Freizeit mit Kind
 
Softworker.at
Projekte für Freelancer
Softworker.at - Projekte für Freelancer
 
Druckauftrag.at - Druckereiaufträge ausschreiben und den billigsten Anbieter finden.
Druckauftrag.at
 
Seminarpool - Das Österreichische Verzeichnis für Seminare, Trainer, Coaches und Referenten
 

 

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.

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&auml;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&szlig;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>&nbsp;"
;
    
// 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>&nbsp;"
;
    }
    
?>
    </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 
"&nbsp;<a href=\"blaettern.php?Anfangsposition=$fwd
&sql=$sql\"><FONT COLOR=\"#FF0033\">$i</FONT></a>"
;
            } else {
            
// fuer 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
© IT-Studio.net - Alle Rechte vorbehalten
 
 Home   Leistungen   Referenzen   Artikel   ECG   AGB   Kontakt   Impressum