PHP - TU Dresden

Werbung
(Komplex-)Praktikum Rechnernetze
Komplex II
Praktikumsversuch
- WWW-Datenbankanbindung mittels PHP -
Praktikumsdokumentation
Betreuer:
Dr. A.Luntovskyy
Bearbeitung: U.Winkler, F.Pretzer
Inhaltsverzeichnis
1. Einleitung ......................................................................................................................................... 3
2. Grundlagen ....................................................................................................................................... 3
2.1. Dynamische Webseiten ............................................................................................................. 3
2.1.1. clientseitige Verarbeitung .................................................................................................. 3
2.1.2. serverseitige Verarbeitung ................................................................................................. 3
2.2. CGI ............................................................................................................................................ 5
2.3. HTML ........................................................................................................................................ 7
2.3.1. Formulare ........................................................................................................................... 7
2.3.2. Eingabezeile ....................................................................................................................... 7
2.3.3. Auswahllisten ..................................................................................................................... 8
2.3.4. Radiobuttons und Checkboxes ........................................................................................... 8
2.3.5. Submit ................................................................................................................................ 9
2.4. SQL.......................................................................................................................................... 10
2.5. PHP ......................................................................................................................................... 12
2.6. Installationsanleitung.............................................................................................................. 17
2.6.1. Installation und Konfiguration des Apache Webservers.................................................. 17
2.6.2. Installation und Konfiguration von PHP 5 ....................................................................... 18
2.6.3. Access 2003 und ODBC .................................................................................................. 20
3. Der Versuch ................................................................................................................................... 23
3.1. Versuchsziel ............................................................................................................................ 23
3.2. Versuchsdurchführung ............................................................................................................ 23
3.3. Systemvoraussetzung ............................................................................................................... 24
3.4. Die Datenbank ........................................................................................................................ 25
3.5. Aufgabenstellung ..................................................................................................................... 28
4. Wichtige Hinweise ......................................................................................................................... 31
4.1. FAQ ......................................................................................................................................... 31
4.2. Test der Logins an den Rechnern des Komplexpraktikums .................................................... 32
Literatur .............................................................................................................................................. 35
2
1. Einleitung
Wer heutzutage an einen professionellen Webauftritt denkt, sollte bei der Umsetzung vor allem
auch an die dynamische Erzeugung von Webseiten denken.
Unternehmensinterne Datenbanken und andere Informationsquellen lassen sich damit mehrfach und
vor allem effektiver nutzen. Der Aufwand zur Pflege und Aktualisierung sinkt. Jedoch ist ihre
Anbindung mit statischen HTML nur schwer zu realisieren.
2. Grundlagen
2.1. Dynamische Webseiten
Dynamische Webseiten haben gegenüber statischen Webseiten den Vorteil, dass bei ihnen der
Inhalt während des Aufrufs generiert wird.
Sie reagieren auf Eingaben, werten diese aus und liefern danach ein Ergebnis zurück.
Prinzipiell unterscheidet man hierbei eine clientseitige und eine serverseitige Verarbeitung der
Daten.
2.1.1. clientseitige Verarbeitung
Clientseitige Verarbeitung ist dadurch gekennzeichnet, dass nach Aufruf des Dokuments, mit Hilfe
des Browsers das Skript ausgeführt wird. Es findet also keinerlei Verarbeitung auf der Serverseite
statt.
Vorteil dieser Technik ist, dass die Last der Abarbeitung auf der Clientseite liegt. Die Darstellung
der Seite erfolgt dadurch meist schneller.
Nachteile sind jedoch die Einsehbarkeit des Codes und das Fehlen von Erweiterungen zur Ansicht
der Seite (Plugins etc.).
2.1.2. serverseitige Verarbeitung
Serverseitige Verarbeitung hingegen vollzieht sich vollkommen ohne Mitwirken des Clients. Nach
Aufruf des Dokuments bzw. des Skriptes wird dieses auf dem Server verarbeitet und nach
Beendigung wird entweder eine Webseite generiert oder es werden nur die Ausgabeparameter
übertragen.
Vorteile dieser Technik sind die hohe Dynamik und die Unsichtbarkeit des Codes. Darüber hinaus
ist die Unabhängigkeit von den Browsereinstellungen des Benutzers vorteilhaft.
Nachteilig wirkt sich der Geschwindigkeitsverlust aus.
Abbildung 1 und Abbildung 2 verdeutlichen die Arbeitsweise nochmals.
3
Abbildung 1: clientseitige Verarbeitung
Abbildung 2: serverseitige Abarbeitung
4
2.2. CGI
Die Kommunikation zwischen Browser und Server erfolgt über das HTTP-Protokoll.
Der Aufruf eines serverseiteigen Programmes durch den Benutzer (Eingabe der URL), erfordert nun
eine Schnittstelle, um die Programme mit Parametern (eingegebene Daten) zu versorgen.
Diese Schnittstelle zwischen dem Webserver und dem Programm nennt man Common Gateway
Interface CGI.
Ein serverseitiges Programm – kurz CGI-Skript genannt - wird nun entweder durch die HTTPMethode GET oder POST aufgerufen.
Die GET-Methode übermittelt dabei die Parameter durch Anfügen an die URL und so mit der
Belegung der
Umgebungsvariablen QUERY_STRING . Die Abtrennung der einzelnen
Informationen erfolgt hierbei durch Fragezeichen.
Die POST-Methode hingegen übermittelt die Informationen direkt an die Standardeingabe. Das
CGI-Skript muss demzufolge die Standardeingabe abrufen können.
Das Programm entpackt nun die empfangene Zeichenkette, nimmt sie als Parameter und steuert
somit den Programmablauf.
Die Standardausgabe des Skriptes wird als neue Webseite an den Browser gesendet. Die Skripte
können auch Daten auf dem Server speichern oder Informationen von anderen Applikationen
verwenden z.B. Datenbanken. Es wird deshalb vor der Beendigung des Skriptes ein Header erzeugt,
damit der Server erkennt, was für eine Art Dokument generiert wird.
Ein Beispiel für ein sehr einfaches CGI-Skript in C:
1:
#include <stdio.h>
2:
#include <stdlib.h>
3:
4:
int main (void)
{
int ch;
5:
int n, i;
6:
char * cl;
7:
8:
printf ("<html>\n<body>\n");
9:
10:
cl = getenv ("CONTENT_LENGTH");
11:
n = 0; if (cl) sscanf (cl, "%d", &n);
12:
13:
printf ("<b>CONTENT_LENGTH = %d </b>\n", n);
14:
for (i = 0; i < n; i++)
15:
{
16:
ch = getchar ();
putchar (ch);
17:
}
18:
19:
printf("</body></html>");
20:
return 0;
21:
}
5
Ein CGI-Script kann aus einer HTML-Datei heraus auf verschiedene Arten aufgerufen werden:
a) über Formulare:
Dabei steht im <form>-Tag der Aufruf des Skriptes
Beispiel:
...
<form name=“suche“ method=“post“ action=“flug.php“>
<select name = „abflughafen“ size=1>
...
</form>
In diesem Beispiel wird der Parameter durch die Standardeingabe übergeben – zu erkennen an der
POST-Methode.
b) über Verweise:
Bei der URL-Angabe des Verweises wird das Skript direkt angegeben.
Beispiel:
...
<a href=“flug.php?name=dre“>
Info </a>
...
Hierbei ist der Name des Skriptes flug.php und der zu übergebende Parameter heißt name=dre .
c) über Grafikreferenzen:
Auch hier genügt die Angabe der URL
Beispiel:
...
<img src=“flugchart.php?name=12“>
...
Wichtig an diesem Beispiel ist, das das Skript auch eine Grafik produziert.
Wie wir sehen kann die Programmierung eines CGI-Scriptes durchaus anspruchsvoll sein. In
HTML-Code eingebettet Scripte wie PHP vereinfachen dies, da viele Anweisungen, die HTMLCode ausgeben, entfallen.
6
2.3. HTML
Wir möchten an dieser Stelle nicht intensiv auf HTML eingehen. Wir empfehlen das Werk von
Thomas Münze zum Selbststudium und als Nachschlagewerk [1].
2.3.1. Formulare
Formulare stellen in HTML eine Möglichkeit dar, mit der der Anwender Textfelder ausfüllen, aus
Listen und Knöpfen Einträge auswählen und dieses ausgefüllte Formular mittels drücken einer
Schaltfläche absenden kann. Alles was zwischen den Tags <form> und </form> steht gehört zu dem
Formular. Darüber hinaus können Sie weitere Objekte, wie Textabsätze, Tabellen usw. platzieren,
um die Form und Anordnung der Formularelemente zu erzwingen.
Beispiel:
...
<form name=“suche“ method=“post“ action=“flug.php“>
...
</form>
...
im einleitenden <form>-Tag gibt an, was mit den Formulardaten passieren soll, wenn der
Anwender das Formular abschickt.
action
2.3.2. Eingabezeile
Eine Eingabezeile ist ein einzeiliges Eingabefeld, welches durch das <input>-Tag definiert wird.
Dabei ist zu beachten, dass jede Eingabezeile über einen internen Namen ohne Umlaute und
Sonderzeichen verfügt.
Beispiel:
...
<form name=“person“ method=“post“ action=“person.php“>
<table>
<tr><td> Vorname </td><td> <input name=“vorname“> </td></tr>
<tr><td> Nachname </td><td> <input name=“nachname“> </td></tr>
</table>
</form>
...
Neben diesem einzeiligem Eingabefeld bietet HTML noch weitere Möglichkeiten der Texteingabe,
wie z.B. mehrzeilige Eingabefelder oder Eingabezeilen für Passwörter. Mehr Informationen dazu
findet man wie oben genannt unter [1]
7
2.3.3. Auswahllisten
<Select name=''auswahl''
size=1>
Leitet eine Auswahlliste ein. Jede Auswahlliste muss einen eindeutigen internen Namen tragen, der
ebenfalls keine Umlaute und Sonderzeichen enthalten darf.
size
gibt an, wie viele Einträge der Auswahlliste gezeigt werden.
option value=''1''
definiert einen Eintrag in der Auswahlliste wobei die optionale Angabe value den Text festlegt,
der abgesendet wird. Fehlt dieser Parameter so wird der String des selektierten Eintrages gesendet.
Beispiel:
<form name="flughafen" methode="post" action="flughafen.php">
<option>Flughafen Dresden
<!-- sendet "Flughafen Dresden" -->
<option value="101">Flughafen Berlin
<!-- sendet "101"
-->
<option selected>Flughafen Breitenbrunn
<!-- Vorauswahl
-->
</form>
Der zusätzliche Parameter selected wählt diesen Eintrag als Voreinstellung aus.
Auch hier wollen wir auf weiterführende Möglichkeiten auf [1] verweisen.
2.3.4. Radiobuttons und Checkboxes
Radiobuttons sind eine Gruppe von beschrifteten Auswahlknöpfen, von denen immer nur einer
markiert sein kann. Radiobuttons werden ähnlich einem Eingabefeld durch den Tag
<input type=radio name=''smoker'' value=''yes''>
definiert. Der
value
-Parameter bestimmt
den übermittelten Wert.
<form name="raucher" methode="post" action="buchung.php">
<input type="radio" name="smoker" value="1">Raucher
<br>
<input type="radio" name="smoker" value="0">Nichtraucher <br>
</form>
8
2.3.5. Submit
Um die Daten an den Server zu senden, bedarf es in dem Formular noch einer speziellen
Schaltfläche – dem Submitknopf.
Beispiel:
...
<input type="submit" value="Formular absenden">
...
Der Parameter value beschriftet diese Schaltfläche mit dem angegebenen Text. Eine Eigenschaft
des PHP -Interpreters ist es, die übergebenen Daten als globale Variable dem Programmierer
bereitzustellen. So existiert die Variable smoker nach Absenden des Formulars vorinitialisiert mit
dem Wert, den der Anwender ausgewählt hat.
Bespiel: buchung.php
<html>
<body>
<?
if ( $smoker ) echo "Rauchen schadet Ihrer Gesundheit!";
?>
</body>
</html>
9
2.4. SQL
Structured Query Language SQL ist eine standardisierte Abfragesprache für relationale
Datenbanken. Die Idee hinter SQL sollte sein, eine Abfragesprache für Nicht-Programmierer zu
schaffen, die ohne mathematische Notationen(Quantoren usw.) auskommt.
SQL wird von allen kommerziellen Datenbankmanagementsystemen unterstützt.
Jedoch weicht SQL in einigen Aspekten auch vom relationalen Modell ab. Insbesondere wird dies
auffällig bei Relationen. Hier ist es in SQL gestattet, das dies Multimengen sein können. Diese
Tatsache ist darin begründet, dass dadurch Geschwindigkeitsvorteile erzielt werden.
Mittels SQL ist es möglich Datenbanken zu erstellen, zu manipulieren und zu warten.
Wir möchten auch hier auf einschlägige Literatur und vor allem auf die Vorlesung „Datenbanken“
aus dem Grundstudium und dem dortigen Skript von Herrn Prof. Lehner verweisen.
Die Grundstruktur einer SQL-Anweisung zur Datenbankabfrage lautet:
SELECT SELECT_Liste
FROM Tabellenname(n)
WHERE-Klauseln
ORDER BY-Klausel
Die in der SELECT_Liste aufgeführten Spaltennamen bestimmen, welche Spalten zur Anzeige der
Abfrageergebnisse ausgewählt werden sollen.
Nach dem Schlüsselwort
anzugeben.
FROM
ist der Name der Tabelle[n] oder eines anderen Objektes (Sicht)
Mit der WHERE-Klausel wird festgelegt, welche Reihen bei der Ausgabe der Abfrageergebnisse
angezeigt werden sollen. Gesucht werden können Reihen
• mittels Vergleichsoperatoren (=
• in Bereichen (BETWEEN , NOT
• in Listen (IN,
> < >= <= <>)
BETWEEN)
NOT IN)
• durch Zeichenfolgeübereinstimmung (LIKE
• mit unbekannten Werten (IS
, NOT LIKE)
NULL, IS NOT NULL)
• durch Kombination der genannten Typen (AND,
• durch Negation (NOT) .
10
OR
) und
In der ORDER BY-Klausel können bis zu 16 Spaltennamen angegeben werden. Entsprechend dieser
Reihenfolge wird sortiert.
Darüber hinaus existieren folgende Standardfunktionen:
• SUM
(Summe)
• AVG
(Durchschnittliches)
• MIN
(Minimum)
• MAX
(Maximum)
• COUNT
(Werteanzahl)
und folgende Standardschlüsselwörter:
• ASC/DESC
• FOR UPDATE OFF
• GROUP BY
• HAVING
• INTO
• FROM
• ORDER BY
• SAVE TO TEMP
• SELECT
• UNION
• WHERE
Abschließend noch einige einfache Beispiele:
SELECT DISTINCT Lieferant, Adresse FROM Waren
SELECT COUNT (DISTINCT Lieferantencode) FROM Waren
SELECT * FROM Personal WHERE Name LIKE `D%`
SELECT * FROM Waren WHERE Stoffcode LIKE `M11_`
SELECT Name, Vorname FROM Personal WHERE Adresse NOT LIKE `%Pirna`
11
2.5. PHP
PHP Hypertext Preprozessor ist eine in HTML eingebettete, serverseitige Skriptsprache und eine
Erweiterung für Internetserver. Mit PHP ist es möglich verhältnismäßig effizient dynamische
Webseiten zu erstellen.
Auf die serverseitige Verarbeitung von Webseiten sind wir bereits eingegangen. Zu beachten ist
jedoch die Art, wie ein PHP-Skript interpretiert werden kann.
Der Interpreter läuft dabei entweder direkt als Webservermodul (Erweiterung) oder eingebunden als
ein CGI-Programm.
Folgende Abbildung stellt den prinzipiellen Ablauf mit Anbindung einer Datenbank über die
ODBC-Schnittstelle dar.
Abbildung 3: Ablauf eines PHP-Scriptes
Grundgerüst eines PHP-Skriptes
Das Grundgerüst eines PHP-Skriptes sieht folgendermaßen aus.
<html>
<body>
<?
------PHP-Skript------ ;
?>
</body>
12
</html>
Das PHP-Skript wird also wie schon erwähnt direkt in das HTML-Dokument integriert. Der Beginn
und das Ende des PHP-Codes sind dabei speziell gekennzeichnet.
Diese Kennzeichnung kann unterschiedlich ausfallen, alle Varianten werden vom Interpreter
erkannt:

<?

<?PHP
... PHP-Code ...
?>

<?php
... PHP-Code ...
?>
... PHP-Code ...
?>
Kommentare
Kommentare werden in PHP einleitend durch /* und beendend durch */ gekennzeichnet. Auch die
aus der Programmiersprache C bekannte Form mittels // ist zulässig.
Variablen
Variable sind durch ein vorangestelltes $ gekennzeichnet. Ein Vorteil von PHP ist, dass es keine
expliziten Typzuweisungen gibt. Vielmehr wird der Datentyp einer Variablen durch deren Inhalt
bestimmt.
Beispiel: eine Variable vom Typ Integer
$num = 8;
Formularauswertung in PHP
Die Erstellung von Formularen mittels HTML wurde bereits gezeigt. Deren Auswertung und
Verarbeitung mittels PHP ist relativ einfach.
Aus jedem Formularelement, welches mittels name ein eindeutigen Namen zugeordnet bekommen
hat, wird ein Variable. Diese Variablen stehen dem Anwender nun zur weiteren Bearbeitung zur
Verfügung.
Datenbankanbindung mittels ODBC
Die Einrichtung einer ODBC-Datenquelle wird weiter unten noch erläutert. Sie stellt eine definierte
Schnittstelle zu verschiedenen Datenbanken dar.
An dieser Stelle möchten wir Ihnen auch nur die wichtigsten Befehle, um eine Verbindung zu einer
ODBC-Datenquelle zu errichten, vorstellen:
a) odbc_connect :
Aufbau einer Verbindung zu einer ODBC-Datenquelle
int odbc_connect (string dsn, string user, string password [, int cursor_type])
liefert eine ODBC-Verbindungskennung connection_id oder 0 (FALSE) bei Fehlfunktion zurück.
13
Die Verbindungskennung connection_id wird von den anderen ODBC-Funktionen benötigt. Es
können mehrere ODBC-Verbindungen nebeneinander bestehen. Der optionale vierte Parameter
cursor_type setzt die Art des Cursors, der für diese Verbindung genutzt werden soll.
Normalerweise wird er nicht benötigt, kann aber bei manchen ODBC-Treiberproblemen nützlich
sein.
Es können Probleme bei der Ausführung von komplexen Prozeduren auftreten. Die Fehlermeldung
lautet dann zum Beispiel ,,Cannot open a cursor on a stored procedure that has anything other than
a single select statement in it'' . Dieser Fehler kann durch die Verwendung von SQL_CUR_USE_ODBC
als cursor_type vermieden werden.
Einige ODBC-Treiber unterstützen den optionalen Parameter row_number in der Funktion
odbc_fetch_row() nicht. Auch in diesem Fall kann SQL_CUR_USE_ODBC helfen.
Folgende Konstanten sind als Cursortyp definiert:
SQL_CUR_USE_IF_NEEDED
SQL_CUR_USE_ODBC
SQL_CUR_USE_DRIVER
SQL_CUR_DEFAULT
Beispiel:
<?
// Verbindung zur ODBC-Datenquelle aufbauen
if ( ! $odbc_handle = odbc_connect("flugbuchung","","") ) {
echo "<h1> Hola! Fehler ! Konnte keine Verbindung zur ";
echo "ODBC-Datenquelle aufbauen.</h1>");
echo "</body></html>";
exit;
}
?>
b) odbc_exec :
Bereitet einen SQL-Befehl auf und führt ihn aus.
int
odbc_exec
(int
connection_id,
string
query_string)
liefert bei 0 einem Fehler FALSE zurück, sonst eine ODBC-Ergebniskennung result_id.
odbc_exec
sendet einen SQL-Befehl zu dem Datenbankserver, der durch die Verbindungskennung
connection_id bezeichnet wird. Dieser Parameter muss durch
odbc_connect() oder
odbc_pconnect() erzeugt worden sein. Siehe auch: odbc_prepare() und odbc_execute() für die
gleichzeitige Ausführung von mehreren SQL-Befehlen.
Beispiel:
// Abfrage vorbereiten und durchführen
$sql_query = "select id, name from airport";
14
$res = odbc_exec( $odbc_handle , $sql_query);
c) odbc_fetch_row :
Liefert eine Datenzeile zurück.
int
odbc_fetch_row
(int
result_id
[,
int
row_number])
Wenn odbc_fetch_row() erfolgreich durchgeführt wurde (also eine oder mehrere Datenzeilen
gefunden wurden), dann wird TRUE zurückgeliefert. Wenn keine (weitere) Zeile vorhanden ist,
wird FALSE zurückgegeben.
odbc_fetch_row()
stellt eine Zeile der von odbc_do()/odbc_exec() zurückgegeben Daten bereit. Nachdem
odbc_fetch_row() aufgerufen wurde, können die Felder dieser Zeile mit odbc_result() genutzt
werden. Wenn row_number nicht definiert ist, versucht odbc_fetch_row() die nächste Zeile aus dem
Abfrageergebnis result_id zu holen.
kann abwechselnd ohne und mit dem Parameter row_number genutzt werden.
Um durch ein Abfrageergebnis mehrfach zu durchlaufen, kann man odbc_fetch_row() mit
row_number gleich 1 aufrufen, um dann wie gewohnt mit odbc_fetch_row() ohne Zeilenparameter
fortzufahren. Wenn der ODBC-Treiber die Herausgabe von bestimmten Zeilen nicht unterstützt,
wird der Parameter ignoriert.
odbc_fetch_row()
Beispiel:
while ( odbc_fetch_row($res) ) {
// Solange wie Zeilen vorhanden sind wird
// dieser Schleifenrumpf ausgeführt
}
d) odbc_result :
Erlaubt den Zugriff auf die Ergebnisdaten.
string odbc_result (int result_id, mixed field)
Liefert den Inhalt eines bestimmtes Feldes zurück.
Der Feldparameter field kann entweder der Integerwert der Spaltennummer oder ein String mit
dem Spaltennamen sein.
Als Beispiel:
$produkt_3 = odbc_result ($Query_ID, 3 );
$produkt_wert = odbc_result ($Query_ID, "wert");
15
Der erste Aufruf von odbc_result() liefert den Wert des drittes Feldes im aktuellen Datensatz im
Abfrageergebnis zurück. Der zweite Funktionsaufruf gibt den Wert der Spalte ,,wert'' im aktuellen
Datensatz zurück. Wenn die Spaltennummer kleiner als 1 oder größer als die Spaltenzahl ist, tritt
ein Fehler auf. Gleiches gilt für einen Spaltennamen, der im Abfrageergebnis nicht vorkommt.
Die Spaltennummern beginnen mit 1. Für die Nutzung von Binärdaten und LONG- Spalten schauen
Sie bitte bei odbc_binmode() und odbc_longreadlen() nach.
Beispiel:
while ( odbc_fetch_row($res) ) {
$id
= odbc_result($res, 1);
$abflughafenName = odbc_result($res, 2);
echo ("$abflughafenName");
}
}
e) odbc_result_all:
Gibt das aktuelle Abfrageergebnis als HTML-Tabelle aus.
int odbc_result_all (int result_id [, string format])
Liefert die Anzahl Reihen im Abfrageergebnis
FALSE.
result_id
zurück und wenn ein Fehler auftritt
gibt alle Reihen eines SQL-Abfrageergebnisses result_id aus einem
odbc_exec()-Aufruf als HTML-Tabelle aus. Mit dem optionalen Stringformat kann ein allgemeines
Tabellenformat angegeben werden.
odbc_result_all()
Beispiel:
<?
$sql_query = "select id, name from airport";
$res = odbc_exec( $odbc_handle , $sql_query);
odbc_result_all($res);
?>
f) odbc_close:
Beendet eine ODBC-Verbindung
void odbc_close (int connection_id) odbc_close()
beendete die Verbindung zum Datenbankserver, die durch die Verbindungskennung
connection_id
gekennzeichnet wurde.
16
2.6. Installationsanleitung
2.6.1. Installation und Konfiguration des Apache Webservers
Um von zu Hause aus die Bearbeitung durchführen zu können ist es sinnvoll sich eine
Testumgebung einzurichten. XAMPP hat sich dabei als sehr einfach zu installieren und zu warten
herausgestellt. Es stellt ein Komplettpaket aus dem Webserver Apache, MySQL, PHP und diversen
anderen Modulen dar. Der Vorteil bei dieser Installation liegt darin, dass bereits alle Einstellungen
vorgenommen wurden. Man braucht keinerlei weitere Konfigurationen und Änderungen
vornehmen.
Nach dem Download des Pakets von [2] ist die Installation trivial. Folgende Abbildung zeigt
XAMPP nach erfolgreicher Installation unter Windows 2000 und der Eingabe von
http://localhost:8080 im Browser. Dies öffnet die Willkommensseite des Webservers.
Abbildung 4: Willkommenseite nach erfolgreicher Installation
Man sollte jedoch die Sicherheitseinstellungen ändern. Besonders sinnvoll ist dies beim Zugang
zum Internet, da es sich bei XAMPP um einen vollwertigen Webserver handelt.
17
2.6.2. Installation und Konfiguration von PHP 5
Die Installation von PHP erfolgt im Rahmen der Installation von XAMPP und bedarf keinerlei
weitere Einstellungen. Zu beachten ist vielmehr der Speicherort der Skripte im /htdocs-Ordner des
Apacheverzeichnisses.
Abbildung 5: Überblick der installierten Module
Test der Konfiguration:
Dazu erstellt man in 'C:\Program
Datei mit folgendem Inhalt:
Files\Apache Group\Apache\htdocs\Versuch9'
<?PHP
phpinfo()
?>
18
eine
'test.php'
und betrachtet die URL http://localhost/Versuch9/test.php. Wenn alles in Ordnung ist sollte
man Statusinformationen wie in Abbildung 3.3 des PHP-Interpreters zu sehen bekommen.
Alternativ drückt man nach Eingabe von http://localhost:8080 im Browser auf phpinfo( ).
Abbildung 6: Ausgabe von phpinfo()
19
2.6.3. Access 2003 und ODBC
Die Installation von Access 2003 geschieht im Rahmen einer Microsoft Office Installation und wird
an dieser Stelle nicht näher beschrieben.
ODBC-Quelle
Open Database Connectivity ODBC ist eine von Microsoft entwickeltes API mit dessen Hilfe man
in einer Anwendung – mit Hilfe der Abfragesprache SQL - auf eine Datenquelle zugreifen kann.
Dazu muss jedoch ein ODBC-kompatibler Treiber vorliegen. Dazu muss, bevor man auf die
Datenquelle zugreift, die Datenquelle in ODBC eingebunden werden (sog. Systemdatenquelle
einrichten). Dies geschieht mit Hilfe des ODBC Administrator.
Vorgehensweise:

in der Taskleiste Start - ControlPanel - Adminstrative Tools - Data Sources (ODBC) anklicken.

Registerkarte USER - DSN wählen. (siehe Abbildung 3.4.)

Knopf Add.. wählen.

Microsoft Access Treiber wählen und den Knopf Finish drücken.(siehe Abbildung 3.5)

Im anschließenden Dialogfenster im Textfeld Data Source Name einen symbolischen
Namen vergeben, unter den die ODBC-Quelle angesprochen werden soll. In Abbildung 3.6
wurde der Name flugbuchung gewählt.

Im gleichen Dialogfenster den Knopf Select wählen und die entsprechende Datenbankdatei
auswählen.
Sollte alles erfolgreich verlaufen sein, so müsste jetzt im Auswahlfeld des ODBC Data Source
Administrator die ODBC Quelle flugbuchung erscheinen.
20
Abbildung 7: ODBC-Setup
Abbildung 8: Auswahl des Microsoft Access-Treiber
Abbildung 9: Dialog zur Auswahl der Datenquelle
21
Abbildung 10: Auswahl der Access-Datenbank
Abbildung 11: Namensvergabe für ODBC-Datenquelle
Abbildung 12: ODBC-Datenquelle für flugbuchung
22
3. Der Versuch
3.1. Versuchsziel
Ziel des Praktikumversuches ist es, dass der Student Kenntnisse über die serverseitige Anbindung
einer Datenbank an einen Webserver mittels einer in HTML eingebetteten Skriptsprache erlangt.
Als Basis dient eine Datenbank, die auch in anderen Praktikumskomplexen Verwendung findet.
3.2. Versuchsdurchführung
Jeder Praktikumsteilnehmer wählt eine der vorgestellten Aufgaben und löst diese individuell:

mittels Zugriff auf den Praktikumsrechner über Remotedesktopverbindung

zu Hause mittels einer Testumgebung (Einrichtung XAMPP s.o.)
Auf den Praktikumsrechnern sind der Webserver, die Datenbank und die Skriptsprache
entsprechend vorinstalliert und konfiguriert. Der Student erhält ein Login, mit dem er lesenden
Zugriff mittels Remotedesktopverbindung auf die Datenbank hat und ein Ordner im
Wurzelverzeichnis des Rechners, um seine Arbeit zu testen.
Namenskonventionen:

Skript:
der Dateiname des Skriptes setzt sich aus dem FRZ-Login und der Endung „.php“
zusammen
Beispiel: FRZ-Login „[email protected]“
→ dg4.php

Verzeichnis:
C:\Program Files\Apache Group\Apache\htdocs\Versuch9\prakrn\“FRZ-Login“
Beispiel: FRZ-Login „[email protected]“
→ C:\Program Files\Apache Group\Apache\htdocs\Versuch9\prakrn\gd4\

Rechner: (siehe auch Tabelle Abschnitt 4.2.)
PRAKTIKUM-1.inf.tu-dresden.de
23

Login für das Praktikum:
prak_“FRZ-Login“
Beispiel: FRZ-Login „[email protected]“
→ prak_dg4
3.3. Systemvoraussetzung
Die Ansprüche an die Hardware sind relativ gering:
Pentium III - PC
128 MB Arbeitsspeicher
Microsoft Access
XAMPP als Testumgebung (optional)
Internetzugang (für Remotedesktopverbindung)
ca. 350 MB freien Festplattenplatz
Kategorie
Software
Vendor
Betriebsystem
Windows 2000/ Windows XP
Microsoft
Datenbank
Access (MS Office)
Microsoft
Skriptsprache
PHP 5
Apache Group
optionale Testumgebung
XAMPP
Apache Group
24
3.4. Die Datenbank
Die in diesem Versuch zu verwendende Datenbank wird wie bereits erwähnt auch in anderen
Komplexen des Praktikums verwendet. Der Diskursbereich modelliert den internationalen
Flugbetrieb.
Die Datenbank besteht aus diversen Tabellen :
• Airline
- beinhaltet den Namen und eine eindeutige ID der Fluggesellschaften
• Airport
- eine eindeutige Nummer, den Namen und der Stadt bzw. Ort in dem sich ein
Flughafen befindet
• Booking
- in dieser Tabelle wird eine eindeutige Zuordnung eines Passagier zu einem
bestimmten Flug und Sitz, welchen er gebucht hat, getroffen
• Class
- alle möglichen Klassen, in denen man fliegen kann
• Flight
- hier wird ein Flug eingetragen. Ein Flug hat eine eindeutige Nummer, einen
Namen, ein Start- und einen Zielflughafen, und wird mit einem bestimmten
Flugzeug in einer bekannten Zeit geflogen
• Location
- diese Tabelle ordne jede Stadt einem Land zu
• Passenger - alle relevanten Informationen, wie Name, Vorname, Anschrift und Bankverbindung
eines Passengers werden hier abgelegt
• Plane
- hier findet man Angaben zu einem Flugzeug wie Hersteller und Fluggesellschaft,
die dieses Flugzeug unterhält
• Planetype - Informationen über Flugzeugbauer und ihre Produkte
• Seat
- jeder Sitz erhält in diesem Diskursbereich eine eindeutige Nummer, wird einem
Flugzeug zugeordnet, hat eine weitere Flugzeug- interne Nummer und Attribute, die
beschreiben in welcher Klasse er steht und ob er ein Raucher- und Fensterplatz ist
25
Die nachstehenden Tabellen und die Abbildung 12 geben ein detaillierteres Bild.
Natürlich kann man auch die Tabellen direkt in Microsoft Access erforschen.
Abbildung 12: Die Datenbank in Tabellendarstellung
26
Anmerkungen:
•
AutoWert ist eine Zahl, die von Microsoft Access automatisch beim Hinzufügen eines neuen
Datensatzes inkrementiert wird. Der Datentyp Datum/Uhrzeit wird an den PHP-Interpreter als
Zeichenkette übergeben.
•
Auch wenn Microsoft Access beim betrachten der Datensätze der Tabellen den Inhalt der
referenzierten Tabelleneinträge darstellt, so wird bei einer SQL-Anfrage der tatsächliche
Wert (in den meisten Fällen die ID) übergeben. Zum Beispiel liefert ''SELECT * FROM
booking'' folgende Datenreihe: 1,2,5,4 und nicht wie evtl. erwartet 1,''Damian'',''DREBZO'',4.
27
3.5. Aufgabenstellung
Es soll ein Auskunftssystem für den Linienflugverkehr entwickelt werden, welches über einen
Webbrowser bedient werden kann.
Teilaufgabe 1 – Anzeigetafel
Ziel dieser Aufgabe soll eine Seite sein, die ähnlich einer Anzeigetafel in den
Wartehallen der Flughäfen ankommende und abgehende Flüge in der nächsten Stunde
anzeigt. Dabei soll der Flughafen frei gewählt werden können.
Teilaufgabe 2 – Personensuche
Ziel soll eine Suchfunktion sein, die einem die Möglichkeit bietet, sich zu erkundigen,
wann und wo eine bestimmte Person auf einen Flughafen ankommt oder abfliegt.
Man wählt im Formular zunächst die Stadt, in welcher die gesuchte Person lebt und
anschließend die Person aus.
Teilaufgabe 3 – Reiseplan
Mitunter fliegen Passagiere nicht direkt zu ihrem eigentlichen Ziel sondern sind
gezwungen eine andere Route mit Umstiegen und Aufenthalten auf anderen
Flughäfen zu wählen. Für diese Passagiere ist ein Reiseplan nützlich, der ihnen genau
mitteilt, wann, wo und mit welcher Maschine sie abfliegen und wie lange der
Aufenthalt auf den Flughäfen ist. Die Aufgabe sollte „vereinfacht“ gelöst werden, d.h.
spezielle Sonderfälle sollte man nicht beachten.
Teilaufgabe 4 – Auslastung
Für Fluggesellschaften ist es sicherlich interessant wie stark bestimmte Linienflüge
ausgelastet werden. Man sollte die Fluggesellschaft wählen könne und sich anzeigen
lassen, welcher Flug mehr bzw. weniger als eine frei wählbare Prozentzahl belegt war.
Teilaufgabe 5 – Logistik
Aus logistischer Sicht ist es für eine Fluggesellschaft wichtig für ihre Flugzeuge einen
Flugplan zu erstellen. Man sollte aus einem Formular eine Fluggesellschaft und ein
Flugzeug dieser Fluggesellschaft wählen können. Der Flugplan dieses Flugzeuges soll
in einer Tabelle angezeigt werden.
Teilaufgabe 6 – Besucherzahl
28
Flughafenbetreiber wünschen sich eine einfache Statistik über ankommende und
abfliegende Passgierzahlen in einer Monatsübersicht. In dem Formular soll der
Flughafen gewählt werden können.
Teilaufgabe 7 – Geheimdienst
Der Geheimdienst möchte hin und wieder wissen, wo sich eine Person im Moment
befindet. Entweder ist sie zu Hause oder auf den Weg in einer anderen Stadt. Der
Geheimdienst geht davon aus, dass jeder ausschließlich mit dem Flugzeug reist, d.h.
man befindet sich entweder „zu Hause“, in der Luft, auf den Weg in eine andere Stadt
oder ist bereits dort angekommen. In dem Formular sollen die Mitarbeiter des
Nachrichtendienstes die Stadt wählen können, in welcher die gesuchte Person wohnt
und anschließend die Person selber. Die Antwort des Systems soll der momentane
Aufenthaltsort sein.
Teilaufgabe 9 – Demnid
Das Meinungsforschungsinstitut DEMNID gibt jede Woche eine Top-Ten Liste
heraus, auf der die 10. 'reiselustigsten' Städte aufgeführt sind, d.h. aus welchen
Städten die meisten Bürger geflogen sind und wie viel.
Teilaufgabe 10 – Catering
Der Cateringservice einer Fluggesellschaft möchte wissen, wie viele Personen mit
einem Flug reisen um entsprechende Anzahl Brötchen, Saftflaschen und Servietten zu
bestellen. Zusätzlich muss für die Passagiere der gehobeneren Klassen Sekt bestellt
werden. Das Interface soll die Menge bzw. Stückzahl der zu bestellenden Brötchen,
Servietten, Saft –und Sektflaschen natürlich gleich errechnen.
Die Arbeit sollte funktional, optisch ansprechend, leicht und intuitiv bedienbar sein. Ein mögliches
Design zeigen die Abbildungen 13 und 14.
29
Abbildung 13
Abbildung 14
30
4. Wichtige Hinweise
4.1. FAQ
• Aktuelles Datum
Da die Datenbank nicht aktualisiert wird, beziehen sich alle fiktiven Datensätze auf einen
Zeitraum im Oktober 2001. Für die Bearbeitung der Aufgaben kann ein sinnvolles
beliebiges Datum als „aktueller“ Zeitpunkt frei gewählt werden.
• Timestamp
Zur Abfrage eines Microsoft ACCESS Datentyp
eingeschlossen werden. Zum Beispiel:
timestamp
muss dieser Wert in #
SELECT * FROM Flight WHERE time > “#2001-10-12 17:12:23#”
• Spaltenname from in der Tabelle Flight
Zur Unterscheidung des Feldnames from in der Tabelle Flight und dem Schlüsselwort
aus der SQL-Sprache ist es notwendig, die vollständige Feldbezeichnug anzugeben:
SELECT flight.from FROM Flight WHERE ...
oder ein Alias zu verwenden:
SELECT f.from FROM Flight AS f WHERE ...
31
FROM
4.2. Test der Logins an den Rechnern des Komplexpraktikums
Für den Zugriff auf die Praktikums-Server am Lehrstuhl Rechnernetze stehen im FRZ folgende
Tools zur Verfügung:
1. Windows XP: Remotdesktopverbindung
2. Windows 2000: Terminaldienstclient
a) Zum Aufbau der Verbindung ist der gewünschte Servername anzugeben und die Verbindung
herzustellen (Abb.15).
Abbildung 15
Der Alias für den Server des Databaseversuches lautet: „PRAKTIKUM-1.inf.tu-dresden.de“.
Jedoch wird in der Einführungsveranstaltung die genaue Adresse nochmals bekannt gegeben.
b) Eingabe des Nutzernamen und des vorläufigen Passwortes (Abb.16):
Abbildung 16
Der Nutzername
wird gebildet aus: „prak_“ und dem FRZ-Login {s1234567} und lautet
32
demzufolge prak_s1234567. Das Passwort wird bei der Einführungsveranstaltung bekannt gegeben.
c) Bei dem ersten Login kommt die Aufforderung das gesetzte Passwort zu ändern (Abb.17).
Abbildung 17
d) Danach sollte getestet werden, ob Schreibrechte für das Verzeichnis bestehen, z.B. durch
Anlegen des Ordners „Lösungen“ mit den Unterordnern für die Lösungen der gewählten
Praktikumsversuche.
e) WICHTIG !
Beenden Sie eine Sitzung niemals nur durch ein Disconnect. Dadurch werden die laufenden
Programme nicht beendet, sondern die Sitzung nur unterbrochen. Wenn das mehrere Nutzer
machen, führt das zu vielen parallelen Sitzungen und damit zu einer hohen Last auf den Rechnern.
Dadurch wird die Arbeit aller Nutzer behindert (Abb.18).
33
Abbildung 18
f) Aus diesem Grund immer mittels Start / Beenden / Abmelden eine Sitzung schließen. Nach 24
Stunden Laufzeit werden Sitzungen vom Administrator ohne Ankündigung beendet (Abb.19).
Abbildung 19
34
Literatur
[1] Thomas Münze. Lehrbuch Selfhtml
http://www.teamone.de/selfhtml
[2] Die Webseite von XAMPP
http://www.apachefriends.org
[3] Eine Einführung in SQL
http://www.sql-und-xml.de/sql-tutorial/index.html
[4] Die Webseite von MySQL
http://dev.mysql.com
[5] Eine Einführung in PHP und MySQL
http://www.schattenbaum.net/php/
[6] Die Webseite des Lehrstuhl Rechnernetze an der TU-Dresden
[7] Die Webseite des Komplexpraktikum Rechnernetze
35
Herunterladen