Weiter Zurück [Inhalt] Online Suche im Handbuch

41. Projekt Adressen - Datenbank

Dieser kurze Workshop zeigt, wie einfach es ist, ein WWW-Interface mit Anschluß an MySQL zu progrmmieren. Das Ergebnis ist eines von tausenden Adressbüchern, die man überall finden kann. Für ein unternehmensweites Adressbuch mit ACCESS, Outlook und Winword-Anbindung fehlt dann nur noch auf jedem Client der ODBC-Treiber, hierzu jedoch später mehr.

Ein WWW-Interface hat gegenüber vielen anderen Frontends viele Vorteile:

  1. Es ist von überall aus zu erreichen
  2. Es kann Passwortgeschützt werden
  3. Es können über Router und Firewalls der Zugang beschränkt werden
  4. Es sind keine Lizenzen für Clients nötig
  5. Es sind keine Serverlizenzen notwendig (PHP3 ist kostenlos)
  6. Es ist zuverlässig
  7. Es kann mit ODBC ...an andere Datenbanken angebunden werden (ACCESS)
  8. Es kann mit JDBC Interfaces nachgerüstet werden, damit Cursorpositionierung möglich ist

Damit Sie keine Probleme bekommen, sollte Sie einige Dinge vorher überprüfen. Hier also die Checkliste:

Nun also los !

Melden Sie sich zunächst unter Linux als User root an, und rufen Sie mysql auf. Mit folgender Befehlszeile können Sie die Adress-Datenbank adressen erstellen:

mysql > create database adressen; 

Fertig ! Zum Verlassen geben Sie quit oder exit ein.

Beenden Sie MySQL und starten Sie die Datenbank, allerdings mit dem Parameter adressen.

Die Datenbank adressen ist nun standardmäßig Ihre aktuelle Datenbank, solange Sie nicht den Befehl aus dem Unterkapitel USE verwenden, oder MySQL nicht mehrere Datenbanken enthält.

Starten Sie nun MySQL erneut, allerdings mit dem Parameter adressen. Danach befinden Sie sich in der Datenbank.

Um nun eine Tabelle mit Spalten und Zeilen in der Datenbank anzulegen, geben, starten Sie erneut den MySQL Client mysql und geben Sie folgendes ein:

 

create table adressen (id INTEGERAUTO_INCREMENT PRIMARY KEY,
firma CHAR(40), name CHAR(25), vornameCHAR(25), anschrift CHAR(40),
telefonCHAR(40), fax CHAR(40));

Sie haben nun mehrere Spalten angelegt: Eine laufende Nummer "id", nach denen die Daten eindeutig zugeordnet werden "primary key", und die Spalten "firma", "name", "vorname", "anschrift", "telefon" und "fax". Wenn Sie möchten, können Sie auch gleich noch die Spalten "email" und "url" anlegen, was heutzutage ja schon üblich ist. Mit quit oder exit können Sie mysql wieder beenden.

Nun werden die SQL Statements in die HTML Seiten geschrieben. Hierzu legen Sie mit einem einfachen Editor eine Datei an:

<html>
<head>
<title>Eingabe

<body>
<script language="php">
<? 

>

Der PHP3 Code muß mit <? beginnen, und mit einem > enden. Dazwischen werden die PHP3 Befehle geschrieben.

Schauen Sie sich die Dokumentation auf http://www.php.net/manual/phpfi2.html an. Hier finden Sie für alle gängigen Datenbanken die genaue Syntax der Funktionen, um Datenbanken anzusteuern, darunter auch die von MySQL. Ein Beispiel:


<? 

mysql_connect("localhost",wwwrun);
$result = mysql("adressen","select * from adressen order by name");

>

SQL-Abfrage ein Wert zugewiesen, der es der Datenbank-Engine ermöglicht, auf die eigentlichen Datensätze zuzugreifen. Der erste Ausdruck in der Klammer definiert die Datenbank, aus der die Datensätze ausgelesen werden sollen. In unserem Fall ist dies die Datenbank adressen. Die zweite Anweisung enthält den eigentlichen SQL-Befehl. select bedeutet, daß Daten aus einer Tabelle gelesen werden sollen. * bedeutet, daß alle Datensätze ausgelesen werden sollen. from adressen bedeutet, daß die Daten aus einer Tabelle (in unserem Adreßbuch ist es die Tabelle adressen) ausgelesen werden sollen. Die Anweisung order by name ist nicht unbedingt notwendig, erhöht allerdings die Übersichtlichkeit der späteren Ausgabe. Er veranlaßt den Datenbank-Server, die Daten nach dem Wert des Feldes name zu sortieren.

Im nächsten Schritt gilt es zu ermitteln, wie viele Datensätze gefunden wurden:


 $num = mysql_numrows($result);

$num ist wiederum eine Variable. Sie enthält einen numerischen Wert (Integer), der die Anzahl der durch die select -Anweisung gewählten Datensätze enthält.

Jetzt wird, wenn gewünscht, die Anzahl der gewählten Datensätze ausgegeben.

echo "</P>";echo "$num Einträge gefunden!";echo "</P>"

Der Skript-Befehl echo bewirkt, daß der nachgestellte Ausdruck in der HTML-Datei ausgegeben wird. In der ersten Zeile ist das der HTML-Befehl, um einen Textabsatz zu erzeugen. In der zweiten Zeile wird zuerst die Variable "$num" ausgegeben, und der Text " Einträge gefunden! ". Zeile drei fügt am Enden wieder einen Absatz ein. Die Anzeige lautet also: 99 Einträge gefunden!

Im nächsten Schritt definieren Sie eine neue Variable $i, die Sie später als Zähler benötigen. $i = 0; Jetzt programmieren Sie die eigentliche Abfrage:


while($i<$num){echo "<P>"; echo mysql_result($result,$i,"firma");echo "\n";echo
mysql_result($result,$i,"vorname");echo "\n";echo
mysql_result($result,$i,"name");echo "<BR>";echo
mysql_result($result,$i,"anschrift");echo "<BR>Telefon: ";echo
mysql_result($result,$i,"telefon");echo "<BR>Fax: ";echo
mysql_result($result,$i,"fax");echo "<BR>";$i++;};

Mit dem Ausdruck while erzeugen Sie eine Schleife, deren Inhalt sich zwischen { und } befindet. Die Angabe in der Klammer unmittelbar hinter dem While-Ausdruck gibt die Bedingung der Schleife an. Frei übersetzt heißt das: Mach, was zwischen den { }-Klammern steht, solange bis $i kleiner ist als $num. $num ist, wie schon erwähnt, die Variable, welche die Gesamtanzahl der gefundenen Datensätze enthält. $i wird einfach bei jedem Schleifendurchlauf um 1 erhöht "$i++". Die Schleife selbst sorgt für die Ausgabe der Daten in Tabellenform.

echo "<P>"; erzeugt einen Absatz, damit die Daten nicht direkt hintereinander ausgegeben werden.

echo mysql_result($result,$i,"firma");echo mysql_result($result,$i,"vorname");

Dieser Befehl gibt die Daten aus der Datenbank aus und setzt den jeweiligen Wert des Feldes »firma«, »vorname«, »name«, »anschrift«, »telefon«, »fax« ein. »mysql_result« legt fest, daß ein Wert aus der Datenbank ausgegeben wird. Die Daten in der Klammer geben an, daß der Wert des Feldes der SQL-Abfrage »$result« mit dem Index »$i« und dem Namen »firma« ausgegeben werden sollen.

Zuletzt beenden Sie das Skript mit </SCRIPT>

SQL-Datenbank unter Linux installieren. Die Eingabe-Seite Für die Eingabeseite sind zwei HTML-Seiten notwendig: Die erste erfaßt die Daten und gibt sie an die zweite Seite weiter. Diese speichert die Daten in der Datenbank. 13. Die beiden Dateien heißen in unserem Beispiel »input_form.htm« (Eingabeformular) und »input.php3«. Das Eingabeformular besteht nur aus einer einfachen Formulareingabe und einer Tabelle, die alle Felder des Formulars positioniert. Diese Zeilen werden, wie auch bei den PHP3-Skripten, einfach in den BODY-Tag der HTML-Datei eingebunden. Details zu HTML-Befehlen finden Sie auf der Homepage von SelfHTML.


<B>Bitte geben Sie die Daten für den neuen Adressdatensatz ein:
<FORM ACTION="input.php3" METHOD="POST">
<TABLE BORDER=0><br> 
<TR><br>
        <TD>Firma:      
        <TD><INPUT TYPE="text" NAME="firma" SIZE="40">
        
       
        <TR>      
        <TD>Vorname:       
        <TD><INPUT TYPE="text"
                NAME="vorname" SIZE="40">
            
            
        <TR>      
        <TD>Name: 
        
        <TD><INPUT TYPE="text" NAME="name">    
            
<TR> <TD>Anschrift:      
<TD><INPUT TYPE="text" NAME="anschrift">
   
<TR>      <TD>Telefon:      
<TD><INPUT TYPE="text"
NAME="telefon">        
<TR>     <TD>Fax:      
<TD><INPUT
TYPE="text" NAME="fax">        
<TR>      <TD>      
<TD><INPUT
TYPE=submit VALUE="Abschicken">      
<INPUT TYPE=reset VALUE="Löschen">
  

Nun fehlt noch die Datei zum Speichern der Daten in der Datenbank. Hier können Sie einen großen Teil der Abfrageseite wiederverwenden. Als erstes definieren Sie


 $result = mysql("adressen","insert into adressen (firma, vorname, name, anschrift,
telefon, fax) values ('$firma', '$vorname', '$name', '$anschrift',
'$telefon', '$fax')");   <p>

Dieser SQL-Befehl schreibt den neuen Datensatz in die Datenbank. Beenden Sie das Skript mit </SCRIPT>.

Die Such-Seite

Auch für die Funktion zum Suchen verschiedener Einträge, benötigen Sie wieder zwei HTML-Dateien. Eine zur Eingabe der Suchkriterien und eine zum Auswerten. Wir verwenden in diesem Beispiel die Dateinamen "suche.htm" zur Eingabe und "suche.php3" zur Ausgabe der Suchkriterien.

Die Eingabeseite

In dieser Datei binden Sie die folgenden Zeilen innerhalb des BODY - Tags in Ihrer Webseite ein. Damit erzeugen Sie ein Formular, in dem mit Hilfe einer Tabelle die verschiedenen Eingabefelder positioniert werden. Gesendet werden die eingegebenen Daten mit der POST-Methode an die Datei suche.php3:

<FORM ACTION="suche.php3" METHOD="POST">  
<TABLE BORDER=0>    
        <TR>      <TD>Suchbegriff :
        <TD>        <INPUT TYPE="text" NAME="suchbegriff" SIZE="40">    
        <TR>      <TD>      <TD>        <INPUT TYPE=submit VALUE="Abschicken">
<INPUT TYPE=reset VALUE="Löschen">    

  


Die Auswertungsseite basiert auf der Abfrageseite. Sie müssen nur die SQL-Abfrage folgendermaßen anpassen:


$result = mysql("adressen","select * from adressen where firma='%$suchbegriff%'or
vorname='%$suchbegriff%' or name='%$suchbegriff%'
or anschrift='%$suchbegriff%' or telefon='%$suchbegriff%'
or fax='%suchbegriff%' order by name");

Diese Befehlszeile verwendet eine einfache SQL-Select-Anweisung, die sich auf die Suchkriterien der Eingabeseite bezieht. Das %-Zeichen bewirkt, daß immer nur ein Teil der Zeichenkette eingegeben werden muß. Geben Sie beispielsweise als Suchbegriff »hallo« an, werden alle Datensätze angezeigt, die den Wortteil »hallo« enthalten.

Es gibt mehrere Möglichkeiten, Einträge in der Datenbank zu löschen: per Hand mittels des Programms mysql adressen, über den MySQL-ODBC-Treiber oder auch über eine Webseite. Unser Beispiel beschreibt das Löschen über eine Webseite.

Sollten Sie sich für die Variante via ODBC interessieren, lesen Sie im Kapitel ODBC nach. Zum Löschen von Datensätzen brauchen Sie zwei verschiedene HTML-Seiten. In der ersten Datei delete.php3 wird abgefragt, welche Datensätze zu löschen sind. Diese HTML-Datei übergibt die Werte dann mittels des POST-Befehls an die Datei »delete_action.php3«, die den Datensatz dann löscht und die Aktion bestätigt.

Die Auswahlseite zeigt den zu löschenden Datensatz an. Sie ähnelt einer normalen Abfrageseite. Die Datensätze werden aber nicht wie bei der Abfrageseite nur angezeigt, sondern als Hyperlink dargestellt. Bei der Aktivierung des Hyperlinks wird der gewählte Datensatz gelöscht.


while($i<$num){echo "<A HREF=delete_action.php3?id=";echo
mysql_result($result,$i,"id");echo ">";echo
mysql_result($result,$i,"firma");echo "<BR>";echo
mysql_result($result,$i,"vorname");echo " ";echo
mysql_result($result,$i,"nachname");echo "";echo "<BR>";echo
mysql_result($result,$i,"anschrift");echo "<BR>Telefon: ";echo
mysql_result($result,$i,"telefon");echo "<BR>Fax: ";echo
mysql_result($result,$i,"fax");echo "
";$i++;};

Die zweite Datei löscht den Datensatz. Die Verbindung mit dem Server übernehmen Sie aus dem Beispiel. Um den über die Auswahlseite (delete.php3) übergebenen Datensatz zu löschen, müssen Sie die folgende SQL-Anweisung einbauen:

$result = mysql("adressen","delete from adressen where id='$id'");

Dieser Aufruf löscht alle Datensätze aus der Datenbank adressen in der Tabelle »adressen«, bei denen der Wert »$id« dem von der Auswahlseite übergebenen Wert entspricht. Durch die Verwendung des Parameters »$id« wird nur ein einzelner Datensatz gelöscht, da Sie das Feld »id« als »auto_increment« definiert haben. Dadurch fügt sich dieser Wert bei jedem Datensatz automatisch ein, und kann nicht doppelt vorkommen. Verwenden Sie anstelle des Parameters »$id« zum Beispiel »$vorname«, werden alle Einträge, bei denen der Vorname dem angegebenen Wert entspricht, gelöscht.

Das Ergebnis der Aktion geben Sie so aus: echo "Der Eintrag mit der Nummer $id wurde gelöscht!"; Diese Zeile meldet dem Anwender, daß der Eintrag mit der Nummer »$id« gelöscht wurde. Eine Abfrage nach positivem oder negativem Ergebnis beim Löschen des Datensatzes muß nicht mit eingebunden werden, da bei korrekter Funktionsweise des Servers keine Fehler auftreten können. Sollte allerdings der MySQL-Server einen Fehler feststellen, gibt er automatisch eine Fehlermeldung aus. Diese Funktion können Sie später noch beliebig ausbauen, indem Sie sie etwa mit einer Suchmaschine verbinden. So können Sie beispielsweise eingeben, daß alle Datensätze mit dem Vorname »Benjamin« gelöscht werden sollen.


Weiter Zurück [Inhalt] Online Suche im Handbuch