Einf¨uhrung in die Skriptsprache PHP

Werbung
Einführung in die Skriptsprache PHP
Materialien zum NLI-Kurs 02.48.78
Version: 02-11-24
Einführung in PHP
In a world without fences . . .
”
who needs gates?“
Vorwort
Das Skript geht auf ein Vorlesungsskript von Alfred Wassermann, Uni Bayreuth, zurück. Es wurde für den
NLI-Kurs in wesentlichen Teilen überarbeitet und erweitert.
Die im Skript erwähnten Software- und Hardwarebezeichnungen sind in den meisten Fällen auch eingetragene Warenzeichen und unterliegen als solche den gesetzlichen Bestimmungen.
Das Skript wurde mit LATEX unter Verwendung
(http://www.miktex.org , http://www.dante.de ).
des
Makropackets
pdfLATEX
Alle Grafiken wurden mit Dia (http://www.lysator.liu.se/˜alla/dia ) entwickelt.
I
erstellt
Inhaltsverzeichnis
1
2
3
Grundlagen, Variablen, Wiederholungen
1
1.1
Skriptsprache PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
PHP-Befehle in HTML einbetten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Unser erster PHP-Befehl! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.4
Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.5
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.5.1
Skalare Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.5.2
Assoziative Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.5.3
Zweidimensionale Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.6
Datenübernahme aus HTML-Formularen . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.7
Einfache Rechenoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.8
Wiederholung von Anweisungen mit der while -Schleife . . . . . . . . . . . . . . . . . .
9
1.9
Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Kontrollstrukturen, Dateioperationen
1
2.1
Weitere Befehle zur Ablaufkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2.2
Fallunterscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.3
Weitere Vergleichsmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.4
Nochmals HTML-Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.5
Dateien hinzuladen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.6
Dateien lesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.7
Aufgaben zur Vorlesung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
Vordefinierte und benutzerdefinierte Funktionen
1
3.1
Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
3.2
Vordefinierte Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.3
String-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.4
Aufgaben zur Vorlesung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
II
Einführung in PHP
4
INHALTSVERZEICHNIS
Zugriff auf Datenbanken
1
4.1
Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
4.2
Zugriff auf Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
4.3
SQL-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
4.4
SQL-Befehle mit PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4.5
Verteilung des Datenbankprogramms auf mehrere Skriptdateien . . . . . . . . . . . . . .
6
4.6
Weitere SQL-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.7
Aufgaben zur Vorlesung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.8
Fallaufgabe Elektronikversand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
A NLI-Kurs
1
A.1 Rechner-Umgebung NLI-Kurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
A.2 Loginparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
A.3 Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
B Zugriff auf Access-Datenbanken mit PHP
5
B.1 Vorbereitung der Datenquelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
B.2 Zugriff auf Access-Datenbank mit Skript . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
C Installation einer lokalen Entwicklungsumgebung
D Lösungen zu den Übungsaufgaben
9
10
D.1 Vorlesung 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
D.1.1 Aufgabe 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
D.1.2 Aufgabe 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
D.1.3 Aufgabe 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
D.1.4 Aufgabe 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
D.1.5 Aufgabe 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
D.1.6 Aufgabe 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
D.1.7 Aufgabe 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
D.1.8 Aufgabe 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
D.2 Vorlesung 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
D.2.1 Aufgabe 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
III
Einführung in PHP
INHALTSVERZEICHNIS
D.2.2 Aufgabe 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
D.2.3 Aufgabe 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
D.2.4 Aufgabe 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
D.2.5 Aufgabe 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
D.2.6 Aufgabe 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
D.3 Vorlesung 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
D.3.1 Aufgabe 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
D.3.2 Aufgabe 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
D.3.3 Aufgabe 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
D.3.4 Aufgabe 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
D.3.5 Aufgabe 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
D.3.6 Aufgabe 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
D.4 Vorlesung 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
D.4.1 Aufgabe 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
D.4.2 Aufgabe 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
D.4.3 Aufgabe 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
D.4.4 Aufgabe 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
IV
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
Vorlesung 1
Grundlagen, Variablen, Wiederholungen
1.1
Skriptsprache PHP
PHP ist eine Skriptsprache, die mit dem Focus auf die Generierung dynamischer Webseiten entwickelt
wurde.
PHP-Befehle werden direkt in HTML-Seiten eingebettet, d. h. der Autor schreibt PHP-Befehle zusammen
mit HTML-Befehlen in eine PHP-Datei.
Wird diese Datei von einem Betrachter angefordert, so werden die PHP-Befehle von einer Zusatzsoftwa”
re“ des Webservers Schritt für Schritt ausgeführt und die Ergebnisse als reines HTML-Dokument an den
Betrachter weitergeleitet (siehe Abbildung 1.1).
Abbildung 1.1: Dynamische Webseite mit PHP
2)
1)
PHP-Dateien
3)
Webserver
PHPPreprocessor
8)
HTML
6)
7)
4)
5)
Datenbank
Achtung: Der Webserver muß PHP“-fähig sein. Standardmäßig funktionieren diese Befehle nicht. In”
zwischen bieten nahezu alle Provider Hosting-Pakete an, die die Benutzung von PHP zulassen. Mit Lycos (http://www.tripod.de ) stellt auch ein zuverlässiger deutscher Gratisanbieter Accounts mit PHPUnterstützung zur Verfügung.
Je nach Installation interpretiert die PHP-Zusatzsoftware nur Dateien mit der Endung .php “, häufig aber
”
auch Dateien mit der Endung .php3 “, .php4 “, .phtml “.
”
”
”
Es ist (bei entsprechender Konfiguration des Webservers) auch möglich, PHP-Befehle in Dateien mit den
Vorlesung 1 - 1
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
Endungen .html “ oder .htm “ einzubetten. Damit wird der Generierungsprozess vor dem Endnutzer
”
”
verborgen.
PHP wird seit etwa 1994 entwickelt und erfreut sich seitdem stetig wachsender Beliebtheit. Eine der besonderen Stärken der Skriptsprache PHP ist die problemlose Anbindung an verschiedene Datenbanken.
Die Sprache ist in ihrer Syntax an C, Java und Perl angelehnt.
1.2
PHP-Befehle in HTML einbetten
PHP-Befehle werden in HTML-Dokumente eingebettet, indem für sie besondere Skriptbereiche abgegrenzt
werden.
Hierfür ein erstes Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>PHP-Beispiel</title>
</head>
<body>
<?php
echo ” H a l l o W e l t ”;
?>
</body>
</html>
Es gibt vier alternative Möglichkeiten, PHP-Skriptbereiche in einem HTML-Dokument abzugrenzen.
1. <? ... ?>
2. <?php ... ?>
3. <script language="php"> ... </script>
4. <% ... %>
... “ steht hier für beliebige PHP-Befehle.
”
Es wird allgemein empfohlen, die Form
<?php ... ?>
zu benutzen, da diese XML-konform und damit wohl dauerhaft Unterstützung erfahren wird.
1.3
Unser erster PHP-Befehl!
Der echo -Befehl gibt Texte (sogenannte Strings) aus:
<?php
echo ” H a l l o ”;
?>
Vorlesung 1 - 2
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
Alternativ ist auch die folgende Syntax zulässig:
<?php
echo( ” H a l l o ” );
?>
Das gleiche Ausgaberesultat erzielen Sie im Übrigen auch mit der print -Funktion, die Bestandteil der
mehrere hundert vordefinierte Funktionen umfassenden PHP-Standardbibliothek ist.
<?php
print( ” H a l l o ” );
?>
Merke: Alle PHP-Anweisungen werden mit einem Semikolon ( ; “) abgeschlossen.
”
Es gibt eine Reihe von Sonderzeichen, die Sie in Strings verwenden können. Wichtigstes Sonderzeichen:
\n “ = Zeilenumbruch.
”
echo ” H a l l o \n”;
echo ” H a l l o \n”;
Man beachte dabei den Unterschied zu
echo ” H a l l o <BR>”;
echo ” H a l l o <BR>”;
Im ersten Fall wird lediglich im vom Webserver ausgelieferten HTML-Quelltext ein Zeilenumbruch durchgeführt. Im zweiten Fall enthält der HTML-Quelltext den HTML-Befehl zum Zeilenumbruch, der im Ausgabefenster des Browsers umgesetzt wird.
Wenn Sie Anführungszeichen innerhalb eines Strings verwenden wollen, müssen Sie das Sonderzeichen
\" “ verwenden.
”
Beispiel:
echo ”Er s e t z t e s i c h , w i e ihm b e f o h l e n , a u f e i n e Wolke
und begann z u f r o h l o c k e n : \ ” H a l l e l u j a − − −
H a h l e l u j a − − − H a h l e l u j a − − − Hahlee−l u j a . . . \ ” ”;
1.4
Variablen
Um sinnvolle Anwendungen erstellen zu können, benötigen wir Speicherbereiche, in denen Daten vorübergehend abgelegt werden können. Dazu können in PHP Variablen deklariert werden.
Merke : Alle Variablennamen beginnen in PHP mit dem Dollarzeichen ( $ “).
”
1
2
3
4
5
6
7
8
9
10
11
$text = ” I c h b i n e i n S t r i n g ! ”;
echo $text;
echo $text.” ”.$text.” ”.$text;
$l = ” l a n g e r ”;
$k = ” k u r z e r ”;
echo ” I c h b i n e i n ”.$l.$l.$l.$l.$l.$l.” T e x t ! ”;
Vorlesung 1 - 3
Einführung in PHP
12
13
14
15
16
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
echo ” I c h b i n e i n ”.$k.” T e x t ! ”;
$i = 10;
$j = 5;
echo $i.” + ”.$j.” = ”.($i+$j);
Der Typ der Variablen (ganze Zahl, Gleitpunktzahl, String, Boolsche Werte) wird je nach situativer Verwendung von PHP automatisch bestimmt. Der Benutzer braucht sich darum nur in Spezialfällen kümmern.
1.5
Arrays
In vielen Anwendungsfällen ist es von Vorteil, Daten nicht in Einzelvariablen abzulegen, sondern sie in
zusammengehörigen Datenfeldern - sogenannten Arrays - zu speichern.
PHP unterstützt von Haus aus skalare und assoziative Arrays.
1.5.1
Skalare Arrays
Beispiel für einen skalaren Array:
1
2
3
4
5
6
7
8
9
/∗ Deklaration eines
$text[0] = ” D i e s i s t
$text[1] = ” D i e s i s t
$text[2] = ” D i e s i s t
skalaren Arrays ∗/
d i e e r s t e Z e i l e . ”;
d i e z w e i t e Z e i l e . ”;
d i e d r i t t e Z e i l e . ”;
/ ∗ Ausgabe ∗ /
echo $text[0].”<br >\n”;
echo $text[1].”<br >\n”;
echo $text[2].”<br >\n”;
Alternative Deklarationen ohne explizite Indexierung der Datenfelder:
1
2
3
4
5
6
7
8
9
/∗ Deklaration eines
$text[] = ” D i e s i s t
$text[] = ” D i e s i s t
$text[] = ” D i e s i s t
s k a l a r e n A r r a y s ohne e x p l i z i t e I n d e x i e r u n g ∗ /
d i e e r s t e Z e i l e . ”;
d i e z w e i t e Z e i l e . ”;
d i e d r i t t e Z e i l e . ”;
/ ∗ Ausgabe ∗ /
echo $text[0].”<br >\n”;
echo $text[1].”<br >\n”;
echo $text[2].”<br >\n”;
Möglich ist auch die Erzeugung eines Arrays mit Hilfe der array -Funktion:
1
2
3
4
5
6
7
8
9
10
/∗ Deklaration eines
$text = array( ” D i e s
”Dies
”Dies
);
skalaren
i s t die
i s t die
i s t die
A r r a y s m i t d e r a r r a y −F u n k t i o n ∗ /
e r s t e Z e i l e . ”,
z w e i t e Z e i l e . ”,
dritte Zeile .”
/ ∗ Ausgabe ∗ /
echo $text[0].”<br >\n”;
echo $text[1].”<br >\n”;
echo $text[2].”<br >\n”;
Vorlesung 1 - 4
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
In vielen Anwendungen ist es zweckmäßig die Inhalte eines Arrays durch ein Schleifenkonstrukt auszuwerten. Sehr häufig findet man die foreach -Schleife in PHP-Skripts (siehe Abbildung 1.2).
Beispiel:
1
2
3
4
5
6
7
8
9
10
/∗ Deklaration eines
$text = array( ” D i e s
”Dies
”Dies
);
skalaren
i s t die
i s t die
i s t die
A r r a y s m i t d e r a r r a y −F u n k t i o n ∗ /
e r s t e Z e i l e . ”,
z w e i t e Z e i l e . ”,
dritte Zeile .”
/ ∗ Ausgabe m i t S c h l e i f e n k o n s t r u k t ∗ /
foreach( $text as $zeile ) {
echo $zeile.”<br >\n”;
}
Abbildung 1.2: Funktionsweise einer foreach -Schleife
Arrayzeiger auf Anfang setzen
Arrayzeiger vorruecken
Textausgabe Variable
ja
Array-Element vorhanden?
Array-Element -> Variable
nein
1.5.2
Assoziative Arrays
Beispiel für einen assoziativen Array:
1
2
3
4
5
/∗ Deklaration eines a s s o z i a t i v e n
$text[” Z e i l e A”] = ” D i e s i s t d i e
$text[” Z e i l e B”] = ” D i e s i s t d i e
$text[” Z e i l e C”] = ” D i e s i s t d i e
Arrays ∗/
e r s t e Z e i l e . ”;
z w e i t e Z e i l e . ”;
d r i t t e Z e i l e . ”;
Vorlesung 1 - 5
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
/ ∗ Ausgabe ∗ /
echo $text[” Z e i l e A”].”<br >\n”;
echo $text[” Z e i l e B”].”<br >\n”;
echo $text[” Z e i l e C”].”<br >\n”;
6
7
8
9
Auch in diesem Fall ist eine Deklaration mit der array -Funktion möglich:
/ ∗ D e k l a r a t i o n e i n e s a s s o z i a t i v e n A r r a y s m i t d e r a r r a y −F u n k t i o n ∗ /
$text = array( ”X” => ” D i e s i s t d i e e r s t e Z e i l e . ”,
”A” => ” D i e s i s t d i e z w e i t e Z e i l e . ”,
”H” => ” D i e s i s t d i e d r i t t e Z e i l e . ”
);
1
2
3
4
5
6
7
8
9
10
/ ∗ Ausgabe ∗ /
echo $text[”H”].”<br >\n”;
echo $text[”A”].”<br >\n”;
echo $text[”X”].”<br >\n”;
Auch ein assoziativer Array kann komfortabel mit einer foreach -Schleife ausgelesen werden.
/ ∗ D e k l a r a t i o n e i n e s s k a l a r e n A r r a y s m i t d e r a r r a y −F u n k t i o n ∗ /
$text = array( ”X” => ” D i e s i s t d i e e r s t e Z e i l e . ”,
”A” => ” D i e s i s t d i e z w e i t e Z e i l e . ”,
”H” => ” D i e s i s t d i e d r i t t e Z e i l e . ”
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/ ∗ Ausgabe m i t S c h l e i f e n k o n s t r u k t ∗ /
foreach( $text as $zeile ) {
echo $zeile.”<br >\n”;
}
/ ∗ Ausgabe m i t S c h l e i f e n k o n s t r u k t ∗ /
foreach( $text as $schluessel => $wert ) {
echo $schluessel.” − ”.$wert.”<br >\n”;
}
1.5.3
Zweidimensionale Arrays
Im weiteren Verlauf dieses Grundkurses werden uns Daten begegnen, die in mehreren Zeilen und mehreren
Spalten verwaltet werden.
Beispiel:
ID
1
2
3
Name
Herzogkeller
Glenk
Bei Norbert
Art
Biergarten
Biergarten
Diskokneipe
Note
1
1
4
Kommentar
Sehr schöner Baumbestand
Gute Bratwürste
Höllisch laut
Auch diese Struktur kann mit Hilfe von Arrays problemlos in PHP abgebildet werden.
1 $set1 = array ( ”ID” => 1,
2
”Name” => ” H e r z o g k e l l e r ”,
3
” A r t ” => ” B i e r g a r t e n ”,
4
” N o t e ” => 1,
5
”Kommentar” => ” S e h r s c h ö n e r Baumbestand ”
6 );
7
Vorlesung 1 - 6
Einführung in PHP
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1.6
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
$set2 = array ( ”ID” => 2,
”Name” => ” G l e n k ”,
” A r t ” => ” B i e r g a r t e n ”,
” N o t e ” => 1,
”Kommentar” => ” Gute B r a t w ü r s t e ”
);
$set3 = array ( ”ID” => 3,
”Name” => ” B e i N o r b e r t ”,
” A r t ” => ” D i s k o k n e i p e ”,
” N o t e ” => 4,
”Kommentar” => ” H ö l l i s c h l a u t ”
);
$all = array ( $set1, $set2, $set3 );
/ / Ausgabe a l l e r Kneipennamen
foreach( $all as $dataset ) {
echo $dataset[”Name”].”<br >\n”;
}
Datenübernahme aus HTML-Formularen
Da PHP speziell zur Erzeugung von dynamischen Webseiten entwickelt wurde, ist es sehr leicht, Eingaben,
die aus HTML-Formularen stammen, zu bearbeiten.
Ein Beispiel:
Die Formulardatei formular.htm“ enthalte:
”
1
2
3
4
5
6
7
8
9
10
11
12
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Formular</title>
</head>
<body>
<FORM ACTION=” t u w a s . php” METHOD=POST>
<INPUT NAME=” b e l i e b i g e r n a m e ”>
<INPUT TYPE=” s u b m i t ” VALUE=”OK”>
</FORM>
</body>
</html>
Der HTML-Formular-Kenner sieht sofort: Beim Klicken auf den Submit-Button wird also die Datei tu”
was.php“ aufgerufen. Diese Datei könnte dann so aussehen:
1
2
3
4
5
6
7
8
9
10
11
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>PHP-Skript</title>
</head>
<body>
<?php
echo ” S i e haben ”.$_REQUEST[” b e l i e b i g e r n a m e ”].” e i n g e g e b e n . ”;
?>
</body>
</html>
Vorlesung 1 - 7
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
Achtung: Ab der PHP-Version 4.1 werden Daten aus den HTML-Formularen im assoziativen Array
$ REQUEST bereitgestellt. Alternativ kann auf die Formulardaten in Abhängigkeit der benutzten ActionMethode auch über die Arrays $ POST bzw. $ GET zugegriffen werden.
Beispiel:
<?php
echo ” S i e haben ”.$_POST[” b e l i e b i g e r n a m e ”].” e i n g e g e b e n . ”;
?>
In älteren PHP-Versionen war ein Zugriff auf Formulardaten über automatische vordefinierte Variablen
nach dem folgenden Muster möglich:
<?php
echo ” S i e haben ”.$beliebigername.” e i n g e g e b e n . ”;
?>
Dieser bequeme“ Weg sollte nicht mehr benutzt werden. Aus Sicherheitsgründen wird empfohlen zukünf”
tig die neuen Superarrays“ ($ REQUEST , $ POST , $ GET ) zu benutzen. Die alte Zugriffsmethode kann in
”
den neueren PHP-Versionen bei Bedarf aber noch in der Datei php.ini“ freigeschaltet werden.
”
GET-Aktionen können im Übrigen auch durch den direkten Aufruf eines PHP-Skripts mit Parameterübergabe ausgelöst werden.
Beispielsweise bewirkt der Skript-Aufruf
http://localhost/tuwas.php?beliebigername=Hallo Leute “
”
über das Adressfeld eines Browsers bei Auswertung im PHP-Skript als GET-Aktion ein den obigen Beispielen entsprechendes Ergebnis.
1.7
Einfache Rechenoperationen
Folgende Rechenoperationen stehen in PHP zur Verfügung:
Operator
+:
-:
*:
/:
%:
Beschreibung
Addition
Subtraktion
Multiplikation
Division
Reste-Bildung
.:
Verknüpft zwei
Zeichenketten (Strings)
Beispiel
$erg=$i+$j
$erg=$i-$j
$erg=$i*$j
$erg=$i/$j
$erg=$i%$j
Erläuterung
z. B. 23%17 ergibt 6, da 23 geteilt
durch 17 gleich 1 Rest 6 ist.
Dazu kommen noch ein paar Abkürzungen, um dem Programmierer das Leben zu erleichtern:
$i++
++$i
$i---$i
erhöht $i um 1.
erhöht $i ebenfalls um 1.
erniedrigt $i um 1.
erniedrigt $i ebenfalls um 1.
Der Unterschied zwischen $i++ und ++$i ist:
$i=0;
echo $i++;
Vorlesung 1 - 8
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
gibt 0 aus, anschließend wird $i auf den Wert 1 erhöht.
$i=0;
echo ++$i;
erhöht zuerst $i auf 1 und gibt den Wert 1 aus.
1.8
Wiederholung von Anweisungen mit der while -Schleife
Mit der foreach -Schleife haben wir bereits eine Möglichkeit vorgestellt, um dieselbe Anweisung mehrfach abzuarbeiten.
Gleich noch ein Beispiel:
$t = ” I c h s o l l m e i n e U e b u n g s a u f g a b e n s e l b s t e r s t e l l e n !<BR>\n”;
//
$i = 0;
Initialisierung
while ($i < 10) {
echo $t;
$i++;
}
Hier wird 10-mal der Text in der Variablen $t mit Hilfe einer while -Schleife ausgegeben. Zu Beginn
wird $i dazu auf 0 gesetzt. $i wird in jedem Schleifendurchlauf um 1 erhöht, bis $i den Wert 10 erreicht.
Dann ist die Bedingung ($i < 10) nicht mehr wahr und die Schleife bricht ab.
1.9
Aufgaben
1. Schreiben Sie ein Dokument, das einen PHP-Befehl enthält, der den Text: Romanes eunt domus“
”
ausgibt.
2. Erstellen Sie eine PHP-Datei, welche die nachfolgend angegebene Adresse in einem skalaren Array
speichert und anschließend in einer HTML-Tabelle auf dem Bildschirm ausgibt.
Name:
Vorname:
Anschrift:
PLZ:
Ort:
Meier
Wolfgang
Waldweg 13
12345
Testburg
3. Weisen Sie die o. g. Adressdaten mit Hilfe der array -Funktion einem assoziativen Array zu. Geben
Sie die Adresse anschließend in einer HTML-Tabelle auf dem Bildschirm aus.
4. Erweitern Sie das Beispiel aus dem Kapitel 1.5.3 so, dass die gesamte Datenstruktur in einer HTMLTabelle im Browserfenster ausgegeben wird.
5. Schreiben Sie eine HTML-Seite, auf der 1000-mal Romanes eunt domus“ richtig geschrieben steht.
”
6. Schreiben Sie ein HTML-Formular, in das man eine Zahl eingeben kann. Klickt man auf Abschi”
cken“, wird so oft der Text Romanes eunt domus“ ausgegeben, wie diese Zahl angibt.
”
7. Schreiben Sie ein Formular, in das zwei Zahlen eingegeben werden können. Klickt man auf Ab”
schicken“, so sollen diese Zahlen miteinander multipliziert und das Ergebnis auf einer Webseite
ausgegeben werden.
Vorlesung 1 - 9
Einführung in PHP
Vorlesung 1: Grundlagen, Variablen, Wiederholungen
8. Lassen Sie alle Schlüssel und Werte des in PHP automatisch vordefinierten assoziativen Arrays
$ SERVER als HTML-Seite mit Hilfe der foreach -Schleife ausgeben.
Vorlesung 1 - 10
Einführung in PHP
Vorlesung 2: Kontrollstrukturen, Dateioperationen
Vorlesung 2
Kontrollstrukturen, Dateioperationen
2.1
Weitere Befehle zur Ablaufkontrolle
Im vorherigen Kapitel haben wir mit der foreach - und der while -Schleife zwei Möglichkeiten kennengelernt, eine Wiederholung von Anweisungen mit Hilfe eines Schleifenkonstrukts zu erzeugen. Statt
$t = ” I c h s o l l m e i n e U e b u n g s a u f g a b e n s e l b s t e r s t e l l e n !<BR>\n”;
$i = 0;
while ( $i < 10 ) {
echo $t;
$i++;
}
kann man aber in PHP auch schreiben:
$t = ” I c h s o l l m e i n e U e b u n g s a u f g a b e n s e l b s t e r s t e l l e n !<BR>\n”;
$i = 0;
do {
echo $t;
$i++;
} while ( $i < 10 );
Wo liegt der Unterschied zwischen diesen beiden Schleifenkonstrukten?
Man bemerkt den Unterschied, wenn z. B. statt $i=0; “ zu Beginn $i=10; “ gesetzt wird.
”
”
Im ersten Fall ist die Bedingung ($i < 10) “ nicht wahr und die Befehle innerhalb der geschweiften
”
Klammern werden nicht ausgeführt.
Im zweiten Fall werden zuerst die Befehle innerhalb der geschweiften Klammern ausgeführt, danach wird
getestet, ob die Bedingung ($i<10) “ erfüllt ist. Dies ist nicht der Fall, also wird abgebrochen. D. h. aber,
”
die Schleife wird mindestens einmal durchlaufen.
Eine weitere Möglichkeit, eine Schleife zu programmieren, ist der for -Befehl. Gleich ein Beispiel:
$t = ” I c h s o l l m e i n e U e b u n g s a u f g a b e n s e l b s t e r s t e l l e n !<BR>\n”;
for ( $i=0; $i < 10; $i++ ) {
echo $t;
}
Der for -Befehl besteht aus drei Ausdrücken.
for ( ausdruck1; ausdruck2; ausdruck3) { ... }
Mit ausdruck1 “ wird die Schleife initialisiert, d. h. normalerweise wird die Variable, die die Schleifen”
durchläufe zählt, auf den Anfangswert gesetzt.
ausdruck2 “ gibt die Abbruchbedingung für die Schleife an.
”
In ausdruck3 “ wird die Variable, die die Schleifendurchläufe zählt, erhöht bzw. erniedrigt.
”
Der for -Befehl hat den Vorteil, dass alle zur Kontrolle der Schleife nötigen Befehle in einer Zeile stehen.
Vorlesung 2 - 1
Einführung in PHP
Vorlesung 2: Kontrollstrukturen, Dateioperationen
Ein weiteres Beispiel, diesmal wird heruntergezählt.
$t = ” I c h s o l l m e i n e U e b u n g s a u f g a b e n s e l b s t e r s t e l l e n !<BR>\n”;
for ( $i=10; $i > 0; $i-- ) {
echo $t;
}
2.2
Fallunterscheidungen
Zur Fallunterscheidung (= bedingte Verzweigung) gibt es in PHP den if -Befehl:
1
2
3
if ($i < 0) {
echo ”$i i s t k l e i n e r a l s N u l l \n”;
}
oder auch
1
2
3
4
5
if ($i
echo
} else
echo
}
< 0) {
”$i i s t k l e i n e r a l s N u l l \n”;
{
”$i i s t n i c h t k l e i n e r a l s N u l l \n”;
Man kann diesen Befehl auch nach dem folgenden Muster schachteln:
1
2
3
4
5
6
7
if ( $i < 0 ) {
echo ”$i i s t k l e i n e r a l s N u l l \n”;
} elseif ( $i > 0 ) {
echo ”$i i s t g r o e s s e r a l s N u l l \n”;
} else {
echo ”$i i s t N u l l \n”;
}
Hat man mehrere Tests der gleichen Variablen vorzunehmen, so läßt sich mit dem switch -Befehl evtl.
Arbeit einsparen:
switch ($name) {
case ” H e i n r i c h ”:
echo ” I c h b i n d e r k l u g e H e i n r i c h ”;
break;
case ”Hans”:
echo ” I c h b i n d e r dumme Hans”;
break;
case ” A g a t h e ”:
echo ” I c h b i n d i e A g a t h e und k l ü g e r a l s H e i n r i c h und Hans”;
break;
default:
echo ”Wir s i n d d e r R e s t ”;
}
Falls die Variable $name den Wert Hans“ hat, wird als nächster Befehl
”
echo ” I c h b i n d e r dumme Hans”;
ausgeführt. Normalerweise würden dann alle nachfolgenden Befehle ausgeführt werden, u. a.
echo ” I c h b i n d i e A g a t h e und k l ü g e r a l s H e i n r i c h und Hans”;
Vorlesung 2 - 2
Einführung in PHP
Vorlesung 2: Kontrollstrukturen, Dateioperationen
Dies ist meist nicht erwünscht, man springt deshalb mit der Anweisung break “ aus dem switch -Befehl
”
heraus.
2.3
Weitere Vergleichsmöglichkeiten
Bisher konnten wir testen, ob $i < 10 “ oder $i > 10 “ gilt.
”
”
Es gibt in PHP aber natürlich noch mehr Vergleichsmöglichkeiten, die nachfolgend in einer Übersicht
zusammengestellt sind:
Beispiel
$a == $b
$a === $b
Name
Gleich
Identisch
$a != $b
$a <> $b
$a !== $b
Ungleich
Ungleich
Nicht identisch
$a
$a
$a
$a
Kleiner Als
Größer Als
Kleiner Gleich
Größer Gleich
< $b
> $b
<= $b
>= $b
Ergebnis
Gibt TRUE zurück, wenn $a gleich $b ist.
Gibt TRUE zurück wenn $a gleich $b ist und beide vom gleichen
Typ sind(nur ab PHP 4).
Gibt TRUE zurück, wenn $a nicht gleich $b ist.
Gibt TRUE zurück, wenn $a nicht gleich $b ist.
Gibt TRUE zurück, wenn $a nicht gleich $b ist, oder wenn beide
nicht vom gleichen Typ sind (nur PHP 4).
Gibt TRUE zurück, wenn $a kleiner als $b ist.
Gibt TRUE zurück, wenn $a größer als $b ist.
Gibt TRUE zurück, wenn $a kleiner oder gleich $b ist.
Gibt TRUE zurück, wenn $a größer oder gleich $b ist.
Ein weiterer Vergleichs-Operator ist der ?:“- oder Trinitäts-Operator. Er arbeitet genauso wie in C und
”
vielen anderen Programmier-Sprachen.
(ausdr1) ? (ausdr2) : (ausdr3);
Dieser Ausdruck gibt ausdr2 zurück, wenn ausdr1 TRUE zurückgibt und ausdr3 , wenn ausdr1 FALSE zurückgibt.
Man kann auch Bedingungsprüfungen durch den Einsatz von Logik-Operatoren (Boolsche Logik) beliebig
kombinieren:
Beispiel:
($i == 10) && ($j > 0) :
($i == 10) || ($j == 0) :
Ist $i gleich 10 und $j größer als 0?
Ist $i gleich 10 oder $j gleich 0?
Hier in einer Übersicht die möglichen Logik-Operatoren:
Beispiel
$a and $b
$a or $b
$a xor $b
! $a
$a && $b
$a || $b
Name
Und
Oder
Entweder Oder
Nicht
Und
Oder
Ergebnis
TRUE wenn sowohl $a als auch $b TRUE ist.
TRUE wenn $a oder $b TRUE ist.
TRUE wenn entweder $a oder $b TRUE ist, aber nicht beide.
TRUE wenn $a nicht TRUE ist.
TRUE wenn sowohl $a als auch $b TRUE ist.
TRUE wenn $a oder $b TRUE ist.
Vorlesung 2 - 3
Einführung in PHP
2.4
Vorlesung 2: Kontrollstrukturen, Dateioperationen
Nochmals HTML-Formulare
Wir haben gelernt, dass in einer PHP-Datei, die aus einem Formular gestartet wird, die Namen der
Formular-Elemente als assoziative Indices in den Arrays $ REQUEST“, $ POST“ und $ GET“ zur
”
”
”
Verfügung stehen. Dies kann man nutzen, um Formular und Befehle, die das Formular behandeln, in einer
einzigen PHP-Datei zusammenzufassen:
Angenommen die Datei form.php“ enthält folgendes Formular:
”
<FORM ACTION=” f o r m . php” METHOD=POST>
<INPUT NAME=” b e l i e b i g e r n a m e ”>
<INPUT TYPE=” s u b m i t ”>
</FORM>
Dann ruft sich beim Klicken auf den Schaltknopf submit“ die Datei selbst auf. Allerdings ist beim zweiten
”
Aufruf innerhalb des Arrays $ REQUEST“ der assoziative Index beliebigername “ Name gesetzt.
”
”
Dies können wir folgendermaßen ausnützen, um Anfrage und Antwort in einem Skript abzuwickeln:
<?php
if( isset( $_REQUEST[” b e l i e b i g e r n a m e ”] ) ) {
echo ” S i e haben ”.$_REQUEST[” b e l i e b i g e r n a m e ”].” e i n g e g e b e n \n”;
}
?>
<P>
<FORM ACTION=” f o r m . php” METHOD=POST>
<INPUT NAME=” b e l i e b i g e r n a m e ”>
<INPUT TYPE=” s u b m i t ”>
</FORM>
Wird die Datei zum ersten Mal aufgerufen, d. h. ohne dass man auf den SubmitButton klickt, so ist $ REQUEST["beliebigername"] nicht gesetzt, der Ausdruck isset($ REQUEST["beliebigername"] ist also nicht wahr. Füllt man das Formular dann aus und klickt
auf submit“, so ist die Variable gesetzt, Die Bedingung isset($ REQUEST["beliebigername"] “ ist
”
”
wahr und es wird Sie haben Text eingegeben“ ausgegeben.
”
Will man danach die Skriptauswertung abbrechen, so sollte der Befehl
exit;
verwendet werden.
2.5
Dateien hinzuladen
Der Befehl
include_once(” d a t e i n a m e ”);
liest den Inhalt der Datei dateiname so, als ob er an dieser Stelle im Skript stehen würde. Damit kann
z. B. sehr leicht ein einheitliches Layout bei einer größeren Anzahl von Dateien erreicht werden.
Beispiel:
1 <?php
2 $kopf=” v o r l a g e n / k o p f b e r e i c h . t p l ”;
Vorlesung 2 - 4
Einführung in PHP
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$fuss=” v o r l a g e n / f u s s b e r e i c h . t p l ”;
?>
2.6
Dateien lesen und schreiben
Vorlesung 2: Kontrollstrukturen, Dateioperationen
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Titel hier</title>
</head>
<body>
<?php
if( file_exists( $kopf ) ){
include_once( $kopf );
}
?>
<p>
Hier steht nun der Hauptteil des Dokuments.
</p>
<?php
if( file_exists( $fuss ) ){
include_once( $fuss );
}
?>
</body>
</html>
Wir wollen nun von Dateien, die auf dem Server liegen, lesen bzw. in diese Dateien etwas hineinschreiben.
Dies ist nützlich, um z. B. Zähler oder Gästebücher zu erzeugen.
Wichtig:
Aus Sicherheitsgründen ist der Webserver auf Systemen, die von mehreren Usern genutzt werden, i. d. R. einem besonderen Benutzer auf dem Server-Computer zugeordnet, der sehr wenig Rechte hat. U. a. darf er nicht einfach in eine
Datei in einem User-Verzeichnis schreiben. Genausowenig darf er eine Datei in einem User-Verzeichnis erzeugen.
Um eine für Schreibaktionen durch den Webserver freigegebene Datei xxx“ zu erzeugen, müssen Sie auf Serversys”
temen folgendermaßen vorgehen:
Verwenden Sie z. B. das Programm ws ftp unter Windows, so kann man im ftp-Programm die Datei anwählen, auf die
rechte Maustaste klicken und dann den Befehl chmod verwenden.
Steht der Befehl chmod nicht per Mausklick zur Verfügung, so kann man die Rechte dennoch mit einem ftp-Befehl
eingeben: Der Befehl lautet
site chmod xyz DATEINAME
x, y, z sind 3 Ziffern, die die Rechte für den Datei-Eigentümer, die Benutzergruppe des Datei-Eigentümers (das sind
üblicherweise alle anderen Benutzer auf dem Computer) und den Rest der Welt bestimmen.
Dabei gilt: Jede der 3 Ziffern liegt zwischen 0 und 7.
Vorlesung 2 - 5
Einführung in PHP
0 bedeutet:
1 bedeutet:
2 bedeutet:
4 bedeutet:
Vorlesung 2: Kontrollstrukturen, Dateioperationen
keinerlei Zugriffsrecht.
Ausführrecht (wichtig bei Programmen und Verzeichnissen).
Schreibrecht (was gleichzeitig auch L̈öschrechtïst).
Leserecht.
Der Clou an der Sache ist, dass die Zahlen addiert werden können: Will man einer Datei Lese- und Schreibrecht
zuordnen, so ist die Zahl 2+4=6 anzugeben.
Beispiele:
site chmod 777 DATEINAME
gibt jedem das Recht, alles mit der Datei DATEINAME anzustellen.
site chmod 754 DATEINAME
bedeutet, der Eigentümer darf alles mit der Datei anstellen, die Gruppe des Eigentümers darf die Datei ausführen und
lesen, der Rest darf die Datei nur lesen.
Achtung: Der Webserver läuft normalerweise unter dem User nobody“, ist also weder der Eigentümer noch gehört er
”
zur Gruppe des Eigentümers.
OK. Gehen wir davon aus, dass wir nun eine Datei mit dem Namen xxx “ haben, deren Inhalt wir lesen
”
wollen.
Ein kurzes Dateilese-“-Programm kann folgendes Aussehen haben:
”
1
2
3
4
5
6
7
8
$datei = fopen(” x x x ”,” r ”);
while (!feof($datei)) {
$zeile = fgets($datei,1000);
echo $zeile;
}
fclose($datei);
Erläuterungen:
Zuerst müssen wir die Datei öffnen, dabei muß angegeben werden, was mit der Datei geschehen soll:
Wollen wir lesen, schreiben, anhängen,...
Der PHP-Befehl lautet
$datei = fopen(” x x x ”,” r ”);
Das heißt, wir öffnen die Datei mit dem Namen xxx und wollen darin lesen ("r" ). Die technischen Details
lassen wir dabei von der Variablen $datei regeln, d. h. wenn wir später aus der Datei lesen wollen, so
benützen wir die Variable $datei .
Nun lesen wir zeilenweise den Inhalt der Datei, und zwar so lange, bis wir ans Ende der Datei gelangt sind:
while (!feof($datei)) {
$zeile = fgets($datei,1000);
echo $zeile;
}
feof($datei) “ ist wahr, sobald wir an das Datei-Ende gelangt sind.
$zeile =
”
”
fgets($datei,1000); “ liest maximal die nächsten 1000 Zeichen, hört aber auf, sobald eine
neue Zeile beginnt, oder das Ende der Datei erreicht ist. echo $zeile; “ gibt einfach das Gelesene
wieder aus.
”
Schließlich muß die Datei noch geschlossen werden:
Vorlesung 2 - 6
Einführung in PHP
Vorlesung 2: Kontrollstrukturen, Dateioperationen
fclose($datei);
Folgende Möglichkeiten gibt es, eine Datei zu öffnen:
"r" :
"r+" :
"w" :
"w+" :
"a" :
"a+" :
nur lesen, begonnen wird am Dateianfang.
lesen und schreiben, begonnen wird am Dateianfang.
nur schreiben. Existiert die Datei bereits, wird der bisherige Inhalt
gelöscht. Existiert sie nicht, wird versucht, sie zu erzeugen.
lesen und schreiben. Ansonsten wie "w" .
nur schreiben. Begonnen wird am Ende der Datei (a wie append,
anhängen). Existiert sie nicht, wird versucht. sie zu erzeugen.
lesen und schreiben. Ansonsten wie "a" . Achtung: Es wird beim Lesen
natürlich auch am Ende der Datei begonnen (dort steht natürlich nichts
mehr...)
Mit dem Befehl
fwrite($datei, ” E i n T e x t ”);
kann der String Ein Text“ in die Datei geschrieben werden.
”
2.7
Aufgaben zur Vorlesung
1. Geben Sie auf im Browserfenster das Kleine 1 x 1“ aus.
”
2. Schreiben Sie einen einfachen Rechner, der mit Hilfe der bedingten Verzweigung (if-else bzw.
switch ) die vier arithmetischen Grundrechenarten Addition, Subtraktion, Multiplikation und Division für zwei in ein Formular einzugebende Zahlen umsetzt.
3. Lassen Sie im Browserfenster ein HTML-Formular ausgeben, in das man eine Zahl eingeben kann.
Klickt man auf Abschicken“, wird so oft der Text Romanes eunt domus“ ausgegeben, wie diese
”
”
Zahl angibt. Formulareingabe und -auswertung sollen in einem PHP-Skript vereinigt werden.
4. Schreiben Sie ein Gästebuch. D. h. der Benutzer kann in einem Formular einen Text eingeben. Dieser
Text wird dann an eine Datei angehängt, die anschließend ausgegeben wird.
5. Schreiben Sie mit PHP einen Zähler (Counter) für eine Seite.
Lösungshilfe:
Beim Aufruf der Seite wird eine Datei geöffnet. Die darin enthaltene Zahl wird nun gelesen, ausgegeben, um 1 erhöht und wieder in die Datei zurückgeschrieben.
6. Schreiben Sie ein PHP-Skript, mit dem dynamisch verschiedene Inhalte geladen und in einem festen
Seitenlayout dargestellt werden können.
Lösungshilfe:
Schreiben Sie eine HTML-Seite mit vordefiniertem Kopf- und Fussteil. Laden Sie durch Übergabe
im Array $ GET (siehe Abbildung 2.1) dynamisch die Inhalte aus anderen Dateien unter Benutzung
der include-Funktion in den Mittelteil der Ausgabe.
Vorlesung 2 - 7
Einführung in PHP
Vorlesung 2: Kontrollstrukturen, Dateioperationen
Abbildung 2.1: Seitenaufruf mit Übergabeparameter
Vorlesung 2 - 8
Einführung in PHP
Vorlesung 3: Vordefinierte und benutzerdefinierte Funktionen
Vorlesung 3
Vordefinierte und benutzerdefinierte Funktionen
3.1
Funktionen
Ein wichtiger Bestandteil einer jeden modernen Programmiersprache ist die Fähigkeit, mehrere Anweisungen zu einem einzigen Befehl zusammenzufassen, d. h. neue Funktionen zu definieren (benutzerdefinierte
Funktionen). PHP verfügt über diese Fähigkeit selbstverständlich auch.
Ein Beispiel: Wir wollen für eine bestimmte Anzahl von Tagen berechnen, wieviele Sekunden diese Tage
zusammen haben.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Title here!</title>
</head>
<body>
<?php
function tag ( $anzahl ) {
$sekunden = 3600 * 24 * $anzahl;
return $sekunden;
}
$x = tag(7);
echo ” 7 Tage b e s t e h e n a u s $x S e k u n d e n ! ”;
?>
</body>
</html>
$anzahl “ nennt man auch Argument oder Übergabeparameter der Funktion. Eine Funktion kann mehrere
”
Argumente oder auch kein Argument besitzen:
1
2
3
4
5
6
7
8
9
10
11
function zinseszins ($prozent,$laufzeit) {
$kapital = 10000.0;
$x = 1.0 + ($prozent/100.0);
$y = $kapital * exp( $laufzeit*log($x) );
return $y;
}
$proz = 6;
$zeit = 10;
$x = zinseszins($proz,$zeit);
echo ”Das K a p i t a l b e t r ä g t $x Euro ”;
Mehr zu den hier verwendeten mathematischen Funktionen exp() “ und log() “ kann man im PHP”
”
Handbuch nachlesen.
Problematisch ist im obigen (zugegebenermaßen etwas konstruierten) Beispiel, dass die Variable $kapital in der Funktion selbst festgelegt wird. Natürlich wird man auch diesen Wert normalerweise als
Argument der Funktion übergeben, also etwa:
1
function zinseszins ($prozent,$laufzeit,$kapital) { ... }
Vorlesung 3 - 1
Einführung in PHP
Vorlesung 3: Vordefinierte und benutzerdefinierte Funktionen
Wir wollen aber jetzt den Fall betrachten, dass diese Variable bereits im Vorfeld der PHP-Datei gesetzt ist
und wir sie nicht als Argument übergeben wollen. Dann müssen wir für die Funktion explizit angeben, dass
die Variable von außen“ stammt. Dies geschieht durch den Befehl global :
”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$kapital = 10000.0;
function zinseszins ($prozent,$laufzeit) {
global $kapital;
$x = 1.0 + ($prozent/100.0);
$y = $kapital * exp( $laufzeit*log($x) );
return $y;
}
$proz = 6;
$zeit = 10;
$x = zinseszins($proz,$zeit);
echo ”Das K a p i t a l b e t r ä g t $x Euro ”;
Es empfiehlt sich benutzerdefinierte Funktionen, die häufiger in verschiedenen Skripten zum Einsatz kommen sollen, in gesonderten Bibliotheks-Dateien (ggfs. in gesonderten Unterverzeichnissen) zu speichern
und bei Bedarf mit dem include once -Befehl in die Skripten einzubinden. Sinnvoll kann es auch sein,
die Bibliotheks-Dateien außerhalb des offen zugänglichen Webbereichs (z. B. Verzeichnis www“) auf dem
”
Server abzulegen, um die Inhalte dem allgemeinen Zugriffs zu entziehen.
account
includes
meineSuperFunktionen.inc
www
offener
Bereich
tageInSekunden.php
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include_once(” . . / i n c l u d e s / m e i n e S u p e r F u n k t i o n e n . i n c ”);
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Title here!</title>
</head>
<body>
<?php
$x = tag(7);
echo ” 7 Tage b e s t e h e n a u s $x S e k u n d e n ! ”;
Vorlesung 3 - 2
Einführung in PHP
Vorlesung 3: Vordefinierte und benutzerdefinierte Funktionen
13 ?>
14 </body>
15 </html>
3.2
Vordefinierte Funktionen
PHP verfügt über eine inzwischen umfangreiche Bibliothek von vordefinierten Funktionen, die für die
meisten Problemstellungen im Zusammenhang mit der Erzeugung dynamische Webseiten optimierte
Lösungen bereit stellen. Einige dieser Funktionen wurden bereits vorgestellt.
Diese Funktionsbibliothek ist im Abschnitt Funktionsreferenz“ des PHP-Handbuchs dokumentiert, wel”
ches für jede PHP-Version veröffentlicht wird.
Hier im Überblick die Referenzkapitel der PHP-Version 4:
Allgemein nützliche Funktionen für die Erzeugung dynamischer Webseiten:
II.
IV.
VI.
IX.
XVI.
XVIII.
XXIII.
XXIV.
XXX.
XCVII.
XCIX.
LI.
LV.
LIX.
LXXVIII.
LXXXII.
LXXIV.
LXXXVII.
LXXXIX.
Array Funktionen
Mathematische Funktionen mit beliebiger Genauigkeit
Kalender-Funktionen
Klassen- und Objekt-Funktionen
Character type functions
Datums- und Zeit-Funktionen
Direkte Ein-/Ausgabe Funktionen
Verzeichnis-Funktionen
Funktionen des Dateisystems
String-Funktionen
Tokenizer functions
Mathematische Funktionen
Hash Funktionen
Sonstige Funktionen
PHP Optionen und Informationen
Funktionen zur Programmausführung
Funktionen zur Ausgabesteuerung
Regular Expression Functions (Perl-Compatible)
Reguläre Ausdrücke Funktionen (POSIX erweitert)
Funktionen zur Generierung und Bearbeitung bestimmter Dateiformate:
V.
X.
XXV.
XXXI.
XLI.
XCIV.
LVIII.
LXXVI.
CIV.
CV.
CVI.
CVII.
CX.
CXI.
Bzip2 Komprimierungsfunktionen
ClibPDF Funktionen
DOM XML Funktionen
Forms Data Format Funktionen
Grafik-Funktionen
Shockwave Flash Funktionen
Ming functions for Flash
PDF Funktionen
WDDX Funktionen
XML parser functions
XML-RPC functions
XSLT Funktionen
ZIP Funktionen (Lesezugriff)
Zlib Komprimierungsfunktionen
Vorlesung 3 - 3
Einführung in PHP
Vorlesung 3: Vordefinierte und benutzerdefinierte Funktionen
Funktionen für Netzwerk-Operationen:
I.
XII.
XV.
XXXIII.
XXXVII.
XLII.
XLVIII.
XLIX.
L.
LVI.
XLVI.
LXV.
XC.
LXXI.
XCIII.
XCV.
XCII.
XCVI.
C.
CII.
CIX.
Apache-spezifische Funktionen
CURL, Client URL Library Functions
Cyrus IMAP administration functions
FTP-Funktionen
HTTP-Funktionen
IMAP, POP3 und NNTP Funktionen
LDAP Funktionen
Mail Funktionen
mailparse functions
Mimetype Functions
IRC Gateway Funktionen
Netzwerk Funktionen
Semaphor und Shared Memory Funktionen
OpenSSL Funktionen
Shared Memory Funktionen (Gemeinsamer Speicher)
SNMP Funktionen
Session Funktionen
Socket Funktionen
URL Funktionen
vpopmail functions
YP/NIS Funktionen
Funktionen für den Zugriff auf spezielle Datenbanken:
XVII.
XIX.
XX.
XXI.
XXII.
XXVIII.
XXIX.
XXXVIII.
XXXIX.
XLIII.
XLIV.
XLV.
LVII.
LXI.
LXII.
LXVII.
LXVIII.
LXX.
LXXII.
LXXIII.
LXXX.
XCI.
XCVIII.
dba Datenbank (dbm-style) Abstraktions-Funktionen
dBase Funktionen
DBM Datenbankfunktionen
dbx Funktionen
DB++ Functions
FrontBase Funktionen
filePro Funktionen
Hyperwave functions
Hyperwave API functions
Informix Funktionen
InterBase-Funktionen
Ingres II Funktionen
Microsoft SQL Server Funktionen
mSQL Funktionen
MySQL Funktionen
Lotus Notes functions
ODBC Funktionen
Oracle 8 Funktionen
Oracle Funktionen
Ovrimos SQL functions
PostgreSQL Funktionen
SESAM Datenbankfunktionen
Sybase functions
Weitere Funktionen der Standardbibliothek
XIV.
III.
Crédit Mutuel CyberMUT functions
Aspell Funktionen [veraltet]
Vorlesung 3 - 4
Einführung in PHP
VII.
VIII.
XI.
XIII.
XXVI.
XXVII.
XXXII.
XXXIV.
XXXV.
XXXVI.
XL.
XLVII.
LII.
LIII.
LIV.
LX.
LXIII.
LXIV.
LXVI.
LXIX.
LXXV.
LXXVII.
LXXIX.
LXXXI.
LXXXIII.
LXXXIV.
LXXXV.
LXXXVI.
LXXXVIII.
CIII.
CVIII.
Vorlesung 3: Vordefinierte und benutzerdefinierte Funktionen
CCVS API Funktionen
COM Support Funktionen für Windows
Crack Funktionen
Cybercash Bezahl Funktionen
.NET Funktionen
Error Handling and Logging Functions
FriBiDi Funktionen
Function Handling functions
GNU Gettext
GMP functions
iconv Funktionen
Java Funktionen
Multi-Byte String Functions
MCAL Funktionen
Mcrypt Encryption Functions
mnoGoSearch Funktionen
Mohawk Software Session Handler Funktionen
muscat functions
Ncurses terminal screen control functions
Object Aggregation/Composition Functions
Object property and method call overloading
Verisign Payflow Pro Funktionen
POSIX Funktionen
Process Control Functions
Printer functions
Pspell Funktionen
GNU Readline
GNU Recode Funktionen
qtdom functions
W32api functions
YAZ functions
Achtung: Nicht jedes Funktionsmodul ist bei den verschiedenen Providern auch tatsächlich aktiviert.
3.3
String-Funktionen
Ein wichtiges Betätigungsfeld von PHP ist die Bearbeitung von Zeichenketten. Es gibt eine ganze Reihe
von vordefinierten Funktionen um Zeichenketten zu manipulieren. Wir stellen hier nur die wichtigsten vor,
der Rest kann im Handbuch unter dem Stichwort String-Funktionen“ nachgeschlagen werden.
”
Die Funktion trim() entfernt Leerzeichen, Tabulatorzeichen etc. (sogenannten whitespace“) vor dem
”
ersten und nach dem letzten echten“ Zeichen in der Zeichenkette.
”
$x = ”
I c h b i n e i n e Z e i c h e n k e t t e ! ”;
$y = trim($x);
Die Funktionen ltrim() und chop() entfernen whitespace“ vor bzw. nach der Zeichenkette.
”
Für die verspielten PHP-Programmierer: strtoupper() und strtolower() wandeln alle Zeichen eines
Strings in Großbuchstaben bzw. Kleinbuchstaben um.
Achtung: Probleme kann es bei Umlauten geben.
Die Funktion ucfirst() wandelt das erste Zeichen eines Strings in Großbuchstaben um (wenn möglich).
Vorlesung 3 - 5
Einführung in PHP
Vorlesung 3: Vordefinierte und benutzerdefinierte Funktionen
Die Funktion ucwords() hingegen wandelt in jedem Wort eines Strings das erste Zeichen in Großbuchstaben um (wenn möglich).
Die folgende Funktion ist besonders wichtig, wenn man vorhandenen Text für das WWW aufbereiten will:
$x = nl2br($y);
ersetzt alle Zeilenumbruch-Zeichen ( \n “) des Strings $y in die Zeichenfolge <BR>\n “.
”
”
Daneben gibt es noch einige wichtige Funktionen, um Strings zu vergleichen, zu ersetzen und mit HTMLSonderzeichen umzugehen.
3.4
Aufgaben zur Vorlesung
1. Erstellen Sie eine Funktion flaeche() , welche als Übergabeparameter zwei Zahlen erhält (eine
Längen- und ein Breitenangabe) und die entsprechende Fläche zurück liefert. Testen Sie die Funktion
in einer PHP-Anwendung.
2. Erstellen Sie eine Funktion mitglied() , welche als Übergabeparameter eine Zahl erhält. Die Funktion soll das dieser Zahl entsprechende Mitglied namentlich zurückmelden.
Erzeugen Sie dazu zunächst innerhalb der Funktion ein skalares Array nach folgendem Muster:
$adresse[0] :
$adresse[1] :
$adresse[2] :
$adresse[3] :
Dieter Schulz
Wolfgang Herbst
Franz Lang
Horst Schmidt
3. Erweitern Sie die vorhergehende Aufgabe so, dass überprüft wird, ob ein bestimmter Name Mitglied
ist. D. h. als Übergabeparameter erhält die Funktion einen beliebigen Namen und liefert entweder die
Nummer zurück oder aber eine Fehlermeldung.
4. Lassen Sie einen Text über ein HTML-Formular eingeben und geben Sie den Text vollständig in
Großbuchstaben als Antwort zurück. Benutzen Sie dazu eine geeignete String-Funktion aus der PHPBibliothek.
5. Lassen Sie einen Text über ein HTML-Formular eingeben und geben Sie den Text in umgekehrter
Reihenfolge aller Buchstaben als Antwort zurück. Benutzen Sie dazu eine geeignete String-Funktion
aus der PHP-Bibliothek.
6. Lassen Sie einen Text über ein HTML-Formular eingeben und geben Sie den Text in umgekehrter
Reihenfolge alle Wörter als Antwort zurück. Benutzen Sie dazu die Funktion explode() aus der
PHP-Bibliothek.
Vorlesung 3 - 6
Einführung in PHP
Vorlesung 4: Zugriff auf Datenbanken
Vorlesung 4
Zugriff auf Datenbanken
4.1
Einführung
Eines der Haupteinsatzgebiete von PHP ist der Online-Zugriff auf Datenbanken.
Was ist eine Datenbank?
Vereinfacht gesagt: Eine Datenbank enthält geordnete Informationen, die Daten. Zusammengehörige Daten
sind dabei in Datensätzen vereint.
Mit den Daten in einer Datenbank kann unter Nutzung eines Datenbank-Management-Systems (DBMS)
bedarfgerecht gearbeitet werden. Zum Beispiel können bestimmte Datensätze ausgelesen werden, neue
Datensätze hinzugefügt werden, Datensätze können aktualisiert oder gelöscht werden. Diese Vorgänge
erfolgen durch sogenannte Datenbank-Abfragen.
Abbildung 4.1: PHP, DBMS, Datenbanken
dbnli01
PHP-Skript
Datenbank
Management
System
(z.B. MySQL)
dbnli02
dbnli02
Weit verbreitet sind relationale Datenbanken-Management-Systeme, die Datenbanken über mehrere Tabellen (Relationen) verteilt verwalten.
Alle marktgängigen DBMS ermöglichen die Übermittlung von Anfragen an eine Datenbank mit Hilfe der
Abfragesprache SQL (Structured Query Language).
PHP unterstützt die Datenbankabfrage mittels SQL und kann mit den DBMS nahezu aller Hersteller direkt
oder unter Vermittlung der spezifischen ODBC-Treiber kommunizieren.
Im Bereich der Webprogrammierung erfreut sich das DBMS MySQL besonderer Beliebtheit.
Vorteile von MySQL: es ist schnell und es ist kostenlos.
Vorlesung 4 - 1
Einführung in PHP
4.2
Vorlesung 4: Zugriff auf Datenbanken
Zugriff auf Datenbanken
Um eine SQL-Abfrage mit PHP auszuführen, muss
• zuerst die Datenbank geöffnet werden (vergleichbar mit dem Zugriff auf eine Datei),
• dann wird die SQL-Befehlszeile an die Datenbank geschickt,
• die Antwort der Datenbank wird aufgenommen und
• schließlich wird die Datenbank-Verbindung wieder geschlossen.
4.3
SQL-Grundlagen
Um mit MySQL produktiv arbeiten zu können, müssen wir uns zunächst etwas Hintergrundwissen über die
Struktur von SQL-Abfragen verschaffen.
SQL-Datenbanken bestehen aus einer Tabelle oder mehreren Tabellen (Relationen). Jeder Datensatz der
Datenbank entspricht dabei genau einer Zeile in einer Tabelle.
Beispiel: Ein Kneipenführer.
Die Tabelle kneipen (zur Datenstruktur siehe Abbildung 4.2):
ID
1
2
3
Name
Herzogkeller
Glenk
...
Art
Biergarten
Biergarten
...
Note
1
1
...
Kommentar
Sehr schöner Baumbestand
Gute Bratwürste
...
Abbildung 4.2: Struktur der Tabelle kneipen“
”
Man kann auf die Tabellen einer Datenbank einzeln zugreifen, aber auch Tabellen verküpfen.
Wir wollen uns hier der Einfachkeit halber zunächst auf eine einzige Tabelle beschränken.
Es gibt im wesentlichen vier Abfragemöglichkeiten:
Auslesen:
Einfügen:
Überschreiben:
Löschen:
SELECT
INSERT
UPDATE
DELETE
Will man z. B. alle Kneipennamen, die sich in der Datenbank befinden, auslesen, so gibt man den SQLBefehl
Vorlesung 4 - 2
Einführung in PHP
Vorlesung 4: Zugriff auf Datenbanken
SELECT Name FROM kneipen;
ein.
Will man Name und Art der Kneipe ausgeben, so lautet der Befehl
SELECT Name,Art FROM kneipen;
Soll schließlich die komplette Tabelle ausgelesen werden, so genügt der Befehl
SELECT * FROM kneipen;
Die auszulesenden Datensätze können nun noch weiter spezifiziert werden:
SELECT * FROM kneipen WHERE NOTE=1;
gibt nur die Datensätze aus, die in der Spalte Note eine 1 enthalten.
Eine sortierte Ausgabe der Datensätze kann mit
SELECT * FROM kneipen WHERE NOTE=1 ORDER BY Name;
erzeugt werden.
Neue Datensätze werden folgendermaßen hinzugefügt:
INSERT kneipen (Name,Art,Note,Kommentar)
VALUES ( ’ G l e n k ’, ’ B i e r g a r t e n ’,1, ’ Gute B r a t w ü r s t e ’);
Vorhandene Datensätze können mit
UPDATE kneipen SET Note=2,
Kommentar= ’ Die B r a t w ü r s t e l a s s e n nach ’ WHERE ID=2;
überschrieben werden.
Das soll als erster Einblick genügen. SQL ist eine sehr mächtige Abfragesprache, insbesondere für Kombinationsabfragen aus mehreren Tabellen gleichzeitig (inner joins, outer joins,...) existiert eine eigene, beinahe mathematische Theorie.
4.4
SQL-Befehle mit PHP
Die vorgestellten SQL-Befehle verwenden wir nun mit PHP. Wir wollen als Beispiel alle Datensätze aus
der Tabelle kneipen “ in der Datenbank dbnli03 “ ausgeben.
”
”
Zuerst muß eine Verbindung von PHP zum Datenbank-Server (d. h. dem Computer, auf dem die Datenbank
liegt) hergestellt werden:
/ / Z u g a n g s d a t e n werden z u n a e c h s t i n V a r i a b l e n h i n t e r l e g t
$host
= ”db . bbs−l o e n i n g e n . de ”;
$login
= ” n l i 0 3 ”;
$password = ” h e u t e ”;
/ / V e r b i n d u n g zum S e r v e r h e r s t e l l e n
$verbindung = mysql_connect( $host, $login, $password );
Vorlesung 4 - 3
Einführung in PHP
Vorlesung 4: Zugriff auf Datenbanken
Wie im Beispiel zu sehen, kann auf beliebige Datenbankserver im Internet zugegriffen werden - vorausgesetzt man besitzt die entsprechende Zugangsberechtigung.
Server, Benutzername und Passwort müssen Sie natürlich an die Gegebenheiten Ihres Systems anpassen.
Wir sollten im Skript auch überprüfen, ob die Verbindung zum MySQL-Server klappt:
$verbindung = mysql_connect( $host, $login, $password );
if (!$verbindung) {
echo ” K e i n e V e r b i n d u n g m ö g l i c h ! \ n”;
exit;
}
Steht die Verbindung, so können wir die erste Abfrage starten.
Zur besseren Übersicht schreiben wir die geplante SQL-Abfrage vorab in eine Variable:
$abfrage = ”SELECT Name , A r t f r o m k n e i p e n ”;
Diese Abfrage wird nun an den Datenbank-Server geschickt.
Das Resultat fangen wir in der Variablen $erg auf.
mysql_select_db( ” d b n l i 0 3 ” );
$erg = mysql_query( $abfrage );
/ / DB a u s w a e h l e n
/ / Anfrage s t e l l e n
Die erste Anweisung wählt die Datenbank dbnli03 “ aus, die wir abfragen wollen.
”
Die zweite Anweisung schickt den SQL-Befehl an die ausgewählte Datenbank und liefert als Ergebnis eine
Verweis auf das Abfrageergebnis. Dieser Verweis wird in der Variablen $erg abgelegt.
Nun kommt eine etwas knifflige Arbeit:
Wir müssen unter Verwendung von $erg die zurückgelieferten Datensätze auslesen. Hätten wir einen
INSERT, UPDATE oder DELETE Befehl verschickt, würden wir nur testen, ob $erg wahr oder falsch ist,
d. h. ob die Abfrage geklappt hat oder nicht.
Da wir aber den SELECT-Befehl an die Datenbank geschickt haben, wollen wir die von der Datenbank
zurückgelieferten Datensätze auslesen.
Wir haben pro Datensatz die beiden Spalten Name“ und Art“ angefordert.
”
”
Diese lesen wir nun zeilenweise aus:
$zeile = mysql_fetch_array( $erg ) );
echo $zeile[”Name”].” i s t e i n ( e ) ”.$zeile[” A r t ”].”<br >\n”;
Die Variable $erg enthält nach der Abfrage Zeilen mit jeweils zwei Spalten ( Name“ und Art“). mys”
”
”
ql fetch array( $erg ) “ gibt genau eine Zeile als Assoziativ-Array zurück.
Zu Beginn steht eine Art Zeiger auf der ersten Zeile des Datenbereichs, führt man den Befehl mys”
ql fetch array( $erg ) “ aus, rutscht der Zeiger zur nächsten Zeile usw.
Will man alle Zeilen ausgeben, empfiehlt sich eine Schleife:
while ( $zeile = mysql_fetch_array( $erg ) ) {
foreach( $zeile as $wert ) {
echo $zeile[”Name”].” i s t e i n ( e ) ”.$zeile[” A r t ”].”<br >\n”;
}
}
Vorlesung 4 - 4
Einführung in PHP
Vorlesung 4: Zugriff auf Datenbanken
Die Ergebnisse verarbeiten wir also zeilenweise zu HTML-Text.
Alternative:
Etwas eleganter läßt sich das Ergebnis der Datenbankabfrage auch unter Verwendung des list -Konstrukts
auswerten, mit dem ein skalarer Array in Einzelvariablen (hier $Name und $Art ) aufgeteilt werden kann.
list($Name,$Art) = mysql_fetch_array($erg);
Innerhalb einer while -Schleife:
while( list( $Name,$Art ) = mysql_fetch_array( $erg ) ) {
echo $Name.” i s t e i n ( e ) ”.$Art.”<BR>\n”;
}
Am Ende empfiehlt es sich, die Verbindung zur Datenbank zu kappen:
mysql_close( $verbindung );
Das grundlegende Datenbankprogramm noch einmal im Gesamtüberblick:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/ / Z u g a n g s d a t e n werden z u n a e c h s t i n V a r i a b l e n h i n t e r l e g t
$host
= ”db . bbs−l o e n i n g e n . de ”;
$login
= ” n l i 0 3 ”;
$password = ” h e u t e ”;
/ / V e r b i n d u n g zum S e r v e r h e r s t e l l e n
$verbindung = mysql_connect( $host, $login, $password );
if (!$verbindung) {
echo ” K e i n e V e r b i n d u n g m ö g l i c h ! \ n”;
exit;
}
/ / SQL−A b f r a g e f o r m u l i e r e n
$abfrage = ”SELECT Name , A r t f r o m k n e i p e n ”;
mysql_select_db( ” d b n l i 0 3 ” );
$erg = mysql_query( $abfrage );
/ / DB a u s w a e h l e n
/ / Anfrage s t e l l e n
/ / Ergebnis der Abfrage p u b l i z i e r e n
while ( $zeile = mysql_fetch_array( $erg ) ) {
foreach( $zeile as $wert ) {
echo $zeile[”Name”].” i s t e i n ( e ) ”.$zeile[” A r t ”].”<br >\n”;
}
}
mysql_close( $verbindung ); / / V e r b i n d u n g k a p p e n
Vorlesung 4 - 5
Einführung in PHP
4.5
Vorlesung 4: Zugriff auf Datenbanken
Verteilung des Datenbankprogramms auf mehrere Skriptdateien
Das Datenbank-Programm aus dem vorhergehenden Kapitel ist - wie der Versuch gezeigt hat - voll funktionsfähig. Trotzdem lassen sich drei bedenkenswerte Kritikpunkte an ihm festmachen:
1. Im Skript sind die Zugangsdaten zum Datenbankserver im Klartext enthalten. Wenn das Skript im
öffentlichen Bereich des Serverrechners liegt, sind diese Daten schnell gehackt“.
”
2. Eine Wiederverwendung von Codeteilen ist nicht möglich.
3. Bei einem Wechsel des Datenbank-Management-Systems (Providerwechsel, Zweitinstallation auf
einem anderen Server, . . .) muss das gesamte Programm umgeschrieben werden.
Abhilfe verspricht hier die bewährte Praxis, das Programm auf mehrere Dateien zu verteilen. Einen Strukurvorschlag zeigt die nachfolgende Grafik.
Abbildung 4.3: Verteilte Datenbankskripte
account
etc
dbDaten.inc
includes
dbFunktionen.inc
www
offener
Bereich
datenLesen.php
Die Dateien können folgendes Aussehen haben:
Datei dbDaten.inc“ - enthält alle Zugangsdaten
”
1
2
/ / Z u g a n g s d a t e n werden z u n a e c h s t i n V a r i a b l e n h i n t e r l e g t
$host
= ”db . bbs−l o e n i n g e n . de ”;
Vorlesung 4 - 6
Einführung in PHP
3
4
5
6
7
Vorlesung 4: Zugriff auf Datenbanken
$login
= ” n l i 0 3 ”;
$password = ” h e u t e ”;
$database = ” d b n l i 0 3 ”;
$connection = FALSE;
/ / Globale Vaiable f u e r die Verbindung
Datei dbFunktionen.inc“ - enthält die Logik des Datenbankzugriffs für ein spezifisches DBMS
”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
include_once(” . . / e t c / dbDaten . i n c ”); / / Z u g a n g s d a t e n e i n b i n d e n
/∗ ∗
∗
∗ O e f f n e t d i e V e r b i n d u n g zum DBMS und s e l e k t i e r t e i n e D a t e n b a n k
∗
∗ R u e c k g a b e : TRUE b e i E r f o l g , s o n s t FALSE
∗/
function open_database() {
global $host, $login, $password, $database, $connection;
$status = FALSE;
$connection = mysql_connect( $host, $login, $password );
if( $connection != FALSE ) {
mysql_select_db( $database );
$status = TRUE;
}
return $status;
}
/∗ ∗
∗
∗ S c h l i e s s t e i n e o f f e n e V e r b i n d u n g zum DBMS
∗
∗ Rueckgabe : k e i n e
∗/
function close_database() {
global $connection;
if( $connection != FALSE){
mysql_close( $connection );
$connection = FALSE;
}
return;
}
/∗ ∗
∗
∗ S t e l l e e i n e SQL−SELECT−A b f r a g e
∗
∗ R u e c k g a b e : Z w e i d i m e n s i o n a l e r A r r a y m i t a l l e n D a t e n s ä t z e n und D a t e n f e l d e r n
∗/
function select( $query_string ) {
$result = mysql_query( $query_string ); / / A n f r a g e s t e l l e n
/ / Ergebnis der Abfrage in einen zweidimensionalen Array e i n l e s e n
Vorlesung 4 - 7
Einführung in PHP
53
54
55
56
57
58
59
60
Vorlesung 4: Zugriff auf Datenbanken
$i = 0;
while ( $zeile = mysql_fetch_array( $erg ) ) {
$resultArray[ $i ] = $zeile;
$i++;
}
return $resultArray;
}
Datei datenLesen.php“ - enthält das eigentliche Programm
”
1
2
3
4
5
6
7
8
9
10
11
12
13
4.6
include_once(” . . / i n c l u d e s / d b F u n k t i o n e n . i n c ”); / / E i n b i n d u n g F u n k t i o n e n
/ / SQL−A b f r a g e f o r m u l i e r e n
$abfrage = ”SELECT Name , A r t f r o m k n e i p e n ”;
if( open_database() == TRUE ) {
$daten = select( $abfrage );
... / / HTML−Ausgabe
}
else {
echo ” K e i n e V e r b i n d u n g z u S e r v e r und D a t e n b a n k m o e g l i c h
}
. . . ”;
Weitere SQL-Befehle
Nachdem wir nun ein wenig Erfahrung mit SQL-Befehlen sammeln konnten, trauen wir uns auch an den
DELETE -Befehl heran. Wichtig ist für diesen Befehl, dass ganz genau (und vorsichtig) spezifiziert wird,
welcher Datensatz oder welche Datensätze aus der Datenbank gelöscht werden sollen.
In unserem Beispiel ist es am besten, wenn man über das Feld ID “ den zu löschenden Datensatz angibt,
”
denn dieses Feld enthält für jeden Datensatz eine eindeutige Nummer (= Primärschlüssel der Tabelle).
Wollen wir den Datensatz mit ID=120 löschen, so geben wir als Abfrage an:
$sql = ”DELETE FROM k n e i p e n WHERE ID=120”;
Achtung: Vergißt man den WHERE -Teil, werden alle Datensätze der Tabelle gelöscht!
Als Ersteller einer dynamischen Webseite mit PHP und einer Datenbank sollte man also immer genau
darüber nachdenken, was den Betrachtern erlaubt werden soll und was nicht.
Die Einrichtung einer neuen Tabelle erfolgt mit dem Befehl CREATE TABLE “.
”
Beispiel:
$sql = ”CREATE TABLE a d r e s s e n ( ’ ID ’ INT ( 3 ) AUTO INCREMENT ,
PRIMARY KEY ( ’ ID ’ ) , ’ Nachname ’ VARCHAR ( 4 0 ) , ’ Vorname ’ VARCHAR ( 4 0 ) ,
’ Ort ’ VARCHAR ( 4 0 ) ) ”;
Eine nicht mehr benötigte Tabelle läßt sich mit dem Befehl DROP TABLE “ löschen.
”
Beispiel:
$sql = ”DROP TABLE a d r e s s e n ”;
Vorlesung 4 - 8
Einführung in PHP
Vorlesung 4: Zugriff auf Datenbanken
Neben der Tabelle kneipen“ existiert in der Datenbank dbnli03“ auch die Tabelle noten“ mit den folgen”
”
”
den Inhalten.
Num
0
1
2
3
4
5
6
Wort
keine Wertung
sehr gut
gut
befriedigend
ausreichend
mangelhaft
ungenügend
Wie lassen sich nun die beiden Tabellen abfragen, so dass im Ergebnis die Wertung für alle Kneipen in
Worten ausgegeben wird?
Hier der entsprechende SQL-Befehl:
$sql = ”SELECT k n e i p e n . Name , n o t e n . Wort FROM k n e i p e n , n o t e n
WHERE n o t e n . Num=k n e i p e n . N o t e ”;
Wie sie erkennen können, wird in der WHERE-Klausel eine Beziehung zwischen dem Primärschlüssel der
Tabelle noten“ und dem Datenfeld Note“ in der Tabelle kneipen“ (Fremdschlüssel) definiert, die zur
”
”
”
korrekten Verknüpfung der beiden Tabellen in der SELECT-Abfrage genutzt wird.
4.7
Aufgaben zur Vorlesung
1. Schreiben Sie ein PHP-Programm, das aus der Tabelle kneipen in der Datenbank dbnli03 alle
Datensätze ausgibt, deren Bewertung schlechter als 2 ist.
2. Schreiben Sie ein HTML-Formular, das neue Datensätze in die Tabelle kneipen in der Datenbank
dbnli03 einfügt.
3. Erweitern Sie Ihr Formular zur Eingabe in die Datenbank-Tabelle kneipen : Fragen Sie mit PHPBefehlen ab, ob alle Felder ausgefüllt sind und ob die Note im gültigen Bereich zwischen 1 und 6
liegt.
4. Schreiben Sie ein PHP-Programm zur Auswertung der Tabelle kneipen : Es soll für jede Kneipe die
Art, der Kommentar und die Bewertung in Worten angezeigt werden.
4.8
Fallaufgabe Elektronikversand
Ein Elektronik-Versand möchte seine Waren in Zukunft über das Internet verkaufen. Dabei sollen interessierte Kunden die Möglichkeit haben, über eine Suchmaske Artikel (hier Notebooks oder Monitore) nach
bestimmten Kriterien auszuwählen.
1. Vorbereitet ist die Datenbank Artikel“ mit den Tabellen Notebooks“ und Monitore“.
”
”
”
Tabelle Notebooks:
Vorlesung 4 - 9
Einführung in PHP
Artikel-Nr
1001
1002
1003
1004
1005
1006
Vorlesung 4: Zugriff auf Datenbanken
Bezeichung
Notebook TPT 23
Notebook
Top Note
Notebook
Thinkpad
Vaio-PCG
Hersteller
IBM
ECS
IPC
Gericom
IBM
Sony
Preis
1.799
999
899
859
1.299
999
Bestand
15
7
6
9
4
11
Arbeitsspeicher
128
256
256
128
128
128
Prozessor
1600
1000
900
750
900
866
Display
15
14
13
13
14
14
Tabelle Monitore:
Artikel-Nr
2001
2002
2003
Bezeichung
Monitor
P76
V75
Hersteller
Siemens
IBM
Compaq
Preis
299
199
199
Bestand
3
2
4
Lochmaske
0,28
0,24
0,26
Display
21
17
17
2. Der Benutzer soll zunächst auswählen können, welchen Artikel er kaufen möchte (vgl. Abbildung).
3. Anschließend soll der Benutzer über Textfelder und Radiobuttons und/oder Checkboxen die
Möglichkeit erhalten, eine Auswahl nach bestimmten Kriterien vorzunehmen. Dazu wurden zwei
Eingabemasken nach dem folgenden Vorbild (monitore.html und notebooks.html) erstellt.
4. Stellen Sie sicher, dass wenn ein Artikel von einem Benutzer gekauft wurde, dessen Bestand in der
Datenbank um 1 reduziert wird.
5. Möchte ein Kunde einen Artikel mit einem Bestand von 0 erwerben soll eine entsprechende Fehlermeldung angezeigt werden.
Vorlesung 4 - 10
Anhang A
NLI-Kurs
A.1
Rechner-Umgebung NLI-Kurs
Novell-File-/Print-Server
BBSLOE
User-Laufwerk H
Datenbank-Server
db.bbs-loeningen.de
IP: 172.18.100.9
Intranet-Server
ins.bbs-loeningen.de
IP: 172.18.100.1
Client-Rechner
IP: 172.18.101.x
Laufwerke C, D
Internet
Raum 101
A.2 Loginparameter
Für die Teilnehmer/-innen des NLI-Kurses sind die Benutzernamen nli01 “ bis nli20 “ vorbereitet. Als
”
”
Passwort ist für alle Accounts heute “ festgelegt. Dieses Passwort bitte nicht eigenmächtig ändern!
”
Benutzername und Passwort gelten für das Novell-Login und die Anmeldung am MySQLDatenbankserver. Auf dem Datenbankserver sind für alle Teilnehmer/innen entsprechende Datenbanken
dbnli01 “ bis dbnli20 “ eingerichtet.
”
”
1
Einführung in PHP
Anhang A: NLI-Kurs
Vorinstalliert sind für jede Datenbank die Tabellen kneipen“, noten“, monitore“ und notebooks“.
”
”
”
”
Anhang A - 2
Einführung in PHP
A.3
Anhang A: NLI-Kurs
Entwicklungsumgebung
Für jeden Kursteilnehmer/jede Kursteilnehmerin steht ein eigener Bereich auf der Serverfestplatte zur
Verfügung, der auf den Clientrechner als Laufwerk H: erscheint.
Auf diesem Laufwerk H: können die eigenen Dateien dauerhaft gespeichert werden.
Auf dem Laufwerk H: ist die Entwicklungsumgebung für den PHP-Kurs vorinstalliert und muss nach dem
Booten des Rechners über den Aufruf der entsprechenden Batchdateien aktiviert werden.
Nähere Erläuterungen:
Das Verzeichnis apache “ ist für den Betrieb des lokalen Webservers notwendig und darf nicht gelöscht
”
werden. Hier werden Logdateien des Webservers abgelegt.
Das Verzeichnis dbg “ enthält die Dateien des PHP-Debuggers, der bei der schrittweisen Abarbeitung von
”
Skripten eingesetzt wird.
Anhang A - 3
Einführung in PHP
Anhang A: NLI-Kurs
Das Verzeichnis Maguma Studio “ enthält die Dateien der Entwicklungsumgebung Maguma Studio
”
”
Light“.
Im Verzeichnis www “ sollten Sie alle HTML-Dokumente und PHP-Skripten ablegen. Der lokale Webserver
”
betrachtet dieses Verzeichnis als Root-Verzeichnis für alle verfügbaren Webdokumente (offener Bereich).
Über die Verknüpfung Editor “ können Sie die PHP-IDE Maguma Studio“ starten.
”
”
Über die Verknüpfung PHP “ wird die lokale Entwicklungsumgebung initialisiert. Dies muss einmalig nach
”
jedem neuen Login am Novellserver erfolgen.
Über die Verknüpfungen Start Webserver “ und Stop Webserver“ können Sie den lokalen Webser”
”
ver aktivieren bzw. deaktivieren. Wenn der lokale Webserver aktiviert ist, kann er unter der Adresse
http://localhost “ via Browser kontaktiert werden. Von anderen Client-Rechnern kann der lokale
”
Webserver unter der Adresse http://172.18.101.x “ angesprochen werden, wobei x “ durch die
”
”
Platznummer ersetzt werden muss. Webdokumente für den lokalen Webserver müssen unterhalb von
H:\www “ abgelegt werden.
”
Anhang A - 4
Einführung in PHP
Anhang B: Zugriff auf Access-Datenbanken mit PHP
Anhang B
Zugriff auf Access-Datenbanken mit PHP
B.1
Vorbereitung der Datenquelle
Für diese kleine Beispielanwendung sollte eine Access-Datenbank als MDB-Datei vorhanden sein. Im
Folgenden wird die Datenbank beispiel.mdb“ benutzt, in der eine Tabelle kneipen“ gemäß der folgenden
”
”
Abbildung bereitgestellt ist.
Um auf diese Datenquelle extern zugreifen zu können, muss ein ODBC-Treiber für die Datenbank installiert werden.
Sie finden das Installationsprogramm für ODBC-Treiber auf einem Windowssystem unter Start — Ein”
stellungen — Systemsteuerung“ (muss evtl. von der Setup-CD nachinstalliert werden).
Durch Doppelklick auf dem Icon ODBC-Datenquellen“ wird das Installationsprogramm gestartet.
”
Anhang B - 5
Einführung in PHP
Anhang B: Zugriff auf Access-Datenbanken mit PHP
Im ODBC-Datenquellen-Administrator wählen Sie die Option Hinzufügen...“.
”
Es öffnet sich der Dialog Neue Datenquelle erstellen“. Wählen Sie hier den Microsoft Access-Treiber“
”
”
und drücken Sie den Button Fertigstellen“.
”
Anhang B - 6
Einführung in PHP
Anhang B: Zugriff auf Access-Datenbanken mit PHP
Im Dialog ODBC Microsoft Access Setup“ nehmen Sie die Einstellungen nach dem abgebildeten Muster
”
vor. Wichtig: Sie müssen die Datenbank über einen Datei-öffen-Dialog mit dem ODBC-Treiber verbinden
(Option Datenbank: Auswählen...“).
”
Bei Rückkehr in den ODBC-Datenquellen-Administrator erkennen Sie, dass nunmehr für die ausgewählte
Datenquelle ein ODBC-Treiber installiert wurde, der unter dem DSN-Namen phpAccess“ angesprochen
”
werden kann.
Anhang B - 7
Einführung in PHP
B.2
Anhang B: Zugriff auf Access-Datenbanken mit PHP
Zugriff auf Access-Datenbank mit Skript
Es ist nun an der Zeit ein PHP-Skript zu schreiben, mit dem auf die Access-Datenbank zugegriffen werden
kann. Es wird im Beispielskript eine einfache SELECT-Abfrage der Datenbank durchgeführt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>PHP-Zugriff auf Access</title>
</head>
<body>
<?php
/ / A u f b a u d e r V e r b i n d u n g , F u n k t i o n s −P a r a m e t e r dsn−name , u s e r , p a s s w o r d
$verbindung = odbc_connect(” p h p A c c e s s ”,””,””);
if( !$verbindung ){
echo ” K e i n e V e r b i n d u n g . . . < br>”;
exit; / / N i x w i e r a u s , k l a p p t h e u t e n i c h t
}
/ / SQL−A n f r a g e
$erg = odbc_exec($verbindung, ”SELECT ∗ FROM K n e i p e n ”);
/ / Z e i l e n w e i s e A b f r a g e e r g e b n i s h o l e n und a u s w e r t e n
while( $row = odbc_fetch_row( $erg ) ){
$kname = odbc_result($erg,”Name”) ;
$kart = odbc_result($erg,” A r t ”);
echo $kname.” i s t e i n ( e ) ”.$kart.”<br >\n”;
}
/ / Datenbank s c h l i e s s e n
odbc_close( $verbindung );
?>
</body>
</html>
Als Ausgabe im Browser sollte das Skript eine Ergebnis wie in der nachfolgenden Abbildung erzeugen.
Anhang B - 8
Anhang C
Installation einer lokalen Entwicklungsumgebung
Für ein lokales PHP-Entwicklungssystem unter Windows empfiehlt es sich, auf zwei vorkonfigurierte Programmpakete zurückzugreifen, die im Internet frei verfügbar zum Download angeboten werden - zum einen
Foxserv“ (www.foxserv.net), zu anderen Maguma Studio Light“ (www.maguma.com).
”
”
Foxserv“ ist ein vorkonfiguriertes Setup-Paket, das bei Ausführung einen lokalen Apache-Webserver (mit
”
PHP-, Perl- und Python-Unterstützung) sowie ein MySQL-Datenbanksystem auf dem Windowsrechner
(Windows 95 bis Windows XP, Windows NT/Windows 2000) installiert.
Maguma Studio Light“ ist eine PHP-Entwicklungsumgebung, mit der Sie PHP-Skripte schreiben und
”
debuggen können. Für das Testen der Datenübernahme aus HTML-Formularen in PHP-Skripte benötigen
Sie als Ergänzung einen Webserver (also z. B. Foxserv“).
”
Installieren Sie zunächst das Foxserv“-Paket auf dem Rechner. Bug-Warnung: Damit der Apache”
Webserver ordnungsgemäß startet, sollten Sie die Datei php4ts.dll“, die sich im Verzeichnis
”
c:\foxserv\php “ befindet, manuell in das Verzeichnis c:\windows\system “ kopieren.
”
”
Anschließend sollten Sie auf Windows 95/98 bzw. Windows NT/2000 den Windows Installer
(InstMsiA 95 98.exe bzw. InstMsiW NT 2K auf der Kurs-CD im Maguma-Ordner) installieren, da dieser vom Debugger in Maguma Studio“ benötigt werden.
”
Anschließend kann Maguma Studio“ inklusive GNU-Debugger installiert werden.
”
Für den Betrieb des Webservers sollten Sie berücksichtigen, dass der Apache-Webserver in der Standardkonfiguration von Foxserv das Verzeichnis c:\foxserv\www “ als Basisverzeichnis für alle Dokumente
”
ansieht.
9
Anhang D
Lösungen zu den Übungsaufgaben
D.1
Vorlesung 1
D.1.1
Aufgabe 1
Listing D.1: v1 aufg1 a.php
1
2
3
4
5
6
7
8
9
10
11
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 1</title>
</head>
<body>
<?php
echo ”Romanes e u n t domus”;
?>
</body>
</html>
D.1.2
Aufgabe 2
Bildschirmausgabe mit HTML-Zeilenumbrüchen:
Listing D.2: v1 aufg2 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 2 ohne Tabelle</title>
</head>
<body>
<?php
/ / D e f i n i t i o n des skalaren Arrays
$adresse = array( ” M e i e r ”, ” W o l f g a n g ”, ”Waldweg 13 ”,
” 12345 ”, ” T e s t b u r g ” );
/ / Einfache Bildschirmausgabe
$br = ”<br >\n”;
echo
echo
echo
echo
echo
”Name : ”.$adresse[0].$br;
”Vorname : ”.$adresse[1].$br;
” A n s c h r i f t : ”.$adresse[2].$br;
”PLZ : ”.$adresse[3].$br;
” O r t : ”.$adresse[4].$br;
?>
</body>
</html>
Bildschirmausgabe mit HTML-Tabelle:
10
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
Listing D.3: v1 aufg2 b.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 2</title>
</head>
<body>
<?php
/ / D e f i n i t i o n des skalaren Arrays
$adresse = array( ” M e i e r ”, ” W o l f g a n g ”, ”Waldweg 13 ”,
” 12345 ”, ” T e s t b u r g ” );
/ / E i n f a c h e B i l d s c h i r m a u s g a b e a l s HTML−T a b e l l e
$za = ”<t r ><t d >”;
/ / Zeilenanfang
$zm = ”</ t d ><t d >”;
// Zeilenmitte
$ze = ”</ t d ></ t r >\n”; / / z e i l e n e n d e
echo
echo
echo
echo
echo
echo
echo
”< t a b l e b o r d e r =\”1\”>\n”;
$za.”Name : ”.$zm.$adresse[0].$ze;
$za.”Vorname : ”.$zm.$adresse[1].$ze;
$za.” A n s c h r i f t : ”.$zm.$adresse[2].$ze;
$za.”PLZ : ”.$zm.$adresse[3].$ze;
$za.” O r t : ”.$zm.$adresse[4].$ze;
”</ t a b l e >\n”
?>
</body>
</html>
D.1.3
Aufgabe 3
Listing D.4: v1 aufg3 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 3</title>
</head>
<body>
<?php
/ / D e f i n i t i o n des skalaren Arrays
$adresse = array( ”Name”
=>” M e i e r ”,
”Vorname”
=>” W o l f g a n g ”,
”Anschrift”
=>”Waldweg 13 ”,
”PLZ”
=>” 12345 ”,
”Ort”
=>” T e s t b u r g ” );
/ / E i n f a c h e B i l d s c h i r m a u s g a b e a l s HTML−T a b e l l e
$za = ”<t r ><t d >”;
/ / Zeilenanfang
$zm = ”</ t d ><t d >”;
// Zeilenmitte
$ze = ”</ t d ></ t r >\n”; / / z e i l e n e n d e
echo
echo
echo
echo
echo
echo
echo
”< t a b l e b o r d e r =\”1\”>\n”;
$za.”Name : ”.$zm.$adresse[”Name”].$ze;
$za.”Vorname : ”.$zm.$adresse[”Vorname”].$ze;
$za.” A n s c h r i f t : ”.$zm.$adresse[” A n s c h r i f t ”].$ze;
$za.”PLZ : ”.$zm.$adresse[”PLZ”].$ze;
$za.” O r t : ”.$zm.$adresse[” O r t ”].$ze;
”</ t a b l e >\n”
Anhang D - 11
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
27 ?>
28 </body>
29 </html>
D.1.4
Aufgabe 4
Listing D.5: v1 aufg4 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 4</title>
</head>
<body>
<?php
$set1 = array ( ”ID” => 1,
”Name” => ” H e r z o g k e l l e r ”,
” A r t ” => ” B i e r g a r t e n ”,
” N o t e ” => 1,
”Kommentar” => ” S e h r s c h ö n e r Baumbestand ”
);
$set2 = array ( ”ID” => 2,
”Name” => ” G l e n k ”,
” A r t ” => ” B i e r g a r t e n ”,
” N o t e ” => 1,
”Kommentar” => ” Gute B r a t w ü r s t e ”
);
$set3 = array ( ”ID” => 3,
”Name” => ” B e i N o r b e r t ”,
” A r t ” => ” D i s k o k n e i p e ”,
” N o t e ” => 4,
”Kommentar” => ” H ö l l i s c h l a u t ”
);
$all = array ( $set1, $set2, $set3 );
/ / Ausgabe
echo ”< t a b l e b o r d e r =\”1\”>\n”;
/ / U e b e r s c h r i f t e n ausgeben
echo ”<t r >\n”;
foreach( $all[0] as $key => $value) {
echo ”<t h >”.$key.”</ t h >\n”;
}
echo ”</ t r >\n”;
/ / Datensaetze ausgeben
foreach( $all as $dataset ) {
echo ”<t r >\n”;
foreach( $dataset as $value ) {
echo ”<t d >”.$value.”</ t d >\n”;
Anhang D - 12
Einführung in PHP
51
52
53
54
55
56
57
58
59
Anhang D: Lösungen zu den Übungsaufgaben
}
echo ”</ t r >\n”;
}
echo ”</ t a b l e >\n”;
?>
</body>
</html>
D.1.5
Aufgabe 5
Listing D.6: v1 aufg5 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 5</title>
</head>
<body>
<?php
/∗ D e fi n i ti o n Textelemente ∗/
$r_e_d = ”Romanes e u n t domus . ”;
$br = ”<br >\n”;
/∗ Einfache Bildschirmausgabe ∗/
$zaehler=0;
//
Initialisierung Zaehlervariable
while( $zaehler < 1000 ) {
$zaehler = $zaehler+1;
/ / Zaehler inkrementieren
echo $zaehler.” : ”.$r_e_d.$br; / / O u t p u t Z e i l e
}
?>
</body>
</html>
D.1.6
Aufgabe 6
Listing D.7: v1 aufg6 a.html
1
2
3
4
5
6
7
8
9
10
11
12
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Title here!</title>
</head>
<body>
<form action=” v 1 a u f g 6 a . php” method=”POST”>
<input type=” t e x t ” name=” e n d e ” size=”20”>
<input type=” s u b m i t ” value=”OK”>
</form>
</body>
</html>
Anhang D - 13
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
Listing D.8: v1 aufg6 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 6</title>
</head>
<body>
<?php
/∗ D e fi n i ti o n Textelemente ∗/
$r_e_d = ”Romanes e u n t domus . ”;
$br = ”<br >\n”;
/∗ Einfache Bildschirmausgabe ∗/
$zaehler = 0;
$abbruch = $_POST[” e n d e ”];
/ / Initialisierung Zaehlervariable
/ / Uebergabe a u s F o r m u l a r f e l d
while( $zaehler < $abbruch ) {
$zaehler = $zaehler+1;
/ / Zaehler inkrementieren
echo $zaehler.” : ”.$r_e_d.$br; / / O u t p u t Z e i l e
}
?>
</body>
</html>
D.1.7
Aufgabe 7
Listing D.9: v1 aufg7 a.html
1
2
3
4
5
6
7
8
9
10
11
12
13
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Title here!</title>
</head>
<body>
<form action=” v 1 a u f g 7 a . php” method=”POST”>
<input type=” t e x t ” name=” z a h l 1 ” size=”20”>
* <input type=” t e x t ” name=” z a h l 2 ” size=”20”>
<input type=” s u b m i t ” value=”OK”>
</form>
</body>
</html>
Listing D.10: v1 aufg7 a.php
1
2
3
4
5
6
7
8
9
10
11
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 7</title>
</head>
<body>
<?php
/ ∗ Uebergabe d e r F o r m u l a r e i n g a b e n i n V a r i a b l e n ∗ /
$a = $_POST[” z a h l 1 ”];
$b = $_POST[” z a h l 2 ”];
Anhang D - 14
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
12
/∗ Ermittlung Ergebniswert ∗/
13
$erg = $a * $b;
14
15
/∗ Bildschirmausgabe ∗/
16
echo ”Das E r g e b n i s von ”.$a.” ∗ ”.$b.” l a u t e t : ”.$erg;
17 ?>
18 </body>
19 </html>
Listing D.11: v1 aufg7 b.html
1
2
3
4
5
6
7
8
9
10
11
12
13
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Title here!</title>
</head>
<body>
<form action=” v 1 a u f g 7 b . php” method=”POST”>
<input type=” t e x t ” name=” z a h l 1 ” size=”20”>
* <input type=” t e x t ” name=” z a h l 2 ” size=”20”>
<input type=” s u b m i t ” value=”OK”>
</form>
</body>
</html>
Listing D.12: v1 aufg7 b.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 6</title>
</head>
<body>
<?php
/∗ Bildschirmausgabe ∗/
echo ”Das E r g e b n i s von ”.$_POST[” z a h l 1 ”].” ∗ ”.$_POST[” z a h l 2 ”].
” l a u t e t : ”.($_POST[” z a h l 1 ”]*$_POST[” z a h l 2 ”];
?>
</body>
</html>
D.1.8
Aufgabe 8
Listing D.13: v1 aufg8 a.php
1
2
3
4
5
6
7
8
9
10
11
12
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 1 Aufgabe 8</title>
</head>
<body>
<?php
$za = ”<t r ><t d >”;
$zm = ”</ t d ><t d >”;
$ze = ”</ t d ></ t r >\n”;
/ / Zeilenanfang
// Zeilenmitte
/ / zeilenende
Anhang D - 15
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
13
echo ”<h3>FOREACH−S c h l e i f e </h3>\n”;
14
echo ”< t a b l e b o r d e r =\”1\”>\n”;
15
foreach( $_SERVER as $schluessel => $wert ){
16
echo $za.$schluessel.$zm.$wert.$ze;
17
}
18
echo ”</ t a b l e >\n”;
19
20 ?>
21 </body>
22 </html>
D.2
Vorlesung 2
D.2.1
Aufgabe 1
Listing D.14: v2 aufg1 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 2 Aufgabe 1</title>
</head>
<body>
<?php
$za = ”<t r ><t d >”;
$zm = ”</ t d ><t d >”;
$ze = ”</ t d ></ t r >\n”;
/ / Zeilenanfang
// Zeilenmitte
/ / zeilenende
echo ”< t a b l e b o r d e r =\”0\”>\n”;
for( $i = 1; $i < 10; $i++ ) {
for( $j = 1; $j < 10; $j++ ) {
$ergebnis = $j*$i;
echo $za.$j.” x ”.$i.$zm.” = ”.$ergebnis.$ze;
}
echo $za.”&n b s p ; ”.$zm.”&n b s p ; ”.$ze;
}
echo ”</ t a b l e >\n”;
?>
</body>
</html>
D.2.2
Aufgabe 2
Listing D.15: v2 aufg2 a.html
1
2
3
4
5
6
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Formular Vorlesung 2 Aufgabe 2</title>
</head>
<body>
Anhang D - 16
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
7
<form action=” v 2 a u f g 2 a . php” method=”POST”>
8
<table>
9
<tr>
10
<td>Wert 1:</td>
11
<td><input type=” t e x t ” name=” z a h l 1 ” size=”20”></td>
12
</tr>
13
<tr>
14
<td>Wert 2:</td>
15
<td><input type=” t e x t ” name=” z a h l 2 ” size=”20”></td>
16
</tr>
17
<td>Operation:</td>
18
<td><input type=” t e x t ” name=” o p e r a t i o n ” size=”4”></td>
19
</tr>
20
<tr>
21
<td> </td>
22
<td><input type=” s u b m i t ” value=”OK” size=”20”></td>
23
</tr>
24
25
</form>
26 </body>
27 </html>
Listing D.16: v2 aufg2 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 2 Aufgabe 2</title>
</head>
<body>
<?php
/ ∗ Uebergabe d e r F o r m u l a r e i n g a b e n i n V a r i a b l e n ∗ /
$a = $_POST[” z a h l 1 ”];
$b = $_POST[” z a h l 2 ”];
$op = $_POST[” o p e r a t i o n ”];
/∗ Ermittlung Ergebniswert ∗/
$erg = ” u n b e k a n n t ”; / /
switch( $op ) {
case ”+”:
$erg =
break;
case ”−”:
$erg =
break;
case ”∗”:
$erg =
break;
case ” / ”:
$erg =
break;
default: / /
}
Initialisierung
$a + $b;
$a - $b;
$a * $b;
$a / $b;
keine Aktion
/∗ Bildschirmausgabe ∗/
if( $erg != ” u n b e k a n n t ” ) {
echo ”Das E r g e b n i s von ”.$a.” ”.$op.” ”.$b.” l a u t e t : ”.$erg;
}
else {
Anhang D - 17
Einführung in PHP
38
39
}
40 ?>
41 </body>
42 </html>
D.2.3
Anhang D: Lösungen zu den Übungsaufgaben
echo ” Die O p e r a t i o n ’ ”.$op.” ’ i s t ”.$erg;
Aufgabe 3
Listing D.17: v2 aufg3 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 2 Aufgabe 3</title>
</head>
<body>
<?php
/∗ D e fi n i ti o n Textelemente ∗/
$r_e_d = ”Romanes e u n t domus . ”;
$br = ”<br >\n”;
/∗ Einfache Bildschirmausgabe ∗/
//
$zaehler = 0;
if( isset( $_POST[” e n d e ”] ) ) {
$abbruch = $_POST[” e n d e ”];
Initialisierung Zaehlervariable
/ / Uebergabe a u s F o r m u l a r f e l d
while( $zaehler < $abbruch ) {
$zaehler = $zaehler+1;
/ / Zaehler inkrementieren
echo $zaehler.” : ”.$r_e_d.$br; / / O u t p u t Z e i l e
}
}
?>
<hr>
<form action=” v 2 a u f g 3 a . php” method=”POST”>
Gewünschte Wiederholungen: <input type=” t e x t ” name=” e n d e ” size=”20”>
<input type=” s u b m i t ” value=”OK”>
</form>
</body>
</html>
D.2.4
Aufgabe 4
Listing D.18: v2 aufg4 a.php
1 <?php
2
$gaestebuch = ” g a e s t e b u c h . t x t ”;
3
4
/∗ Zuerst e r f o l g t ein etwaiger Neueintrag ∗/
5
if( !empty( $_POST[” m e s s a g e ”] ) ) {
6
$datei = fopen( $gaestebuch, ”a” ); / / O e f f n e n f u e r APPEND
7
8
if( $datei ) {
9
fwrite( $datei, ”<p>\n” );
/ / HTML−A b s a t z a n f a n g
Anhang D - 18
Einführung in PHP
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Anhang D: Lösungen zu den Übungsaufgaben
fwrite(
fwrite(
fwrite(
fclose(
$datei, $_POST[” m e s s a g e ”] );
$datei, ”</p>\n” );
/ / HTML−A b s a t z e n d e
$datei, ”<hr >\n” );
/ / HTML−H o r i z . L i n i e
$datei );
}
}
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung2 Aufgabe 4</title>
</head>
<body>
<!−− F o r m u l a r a u s g a b e A n f a n g −−>
<form action=” v 2 a u f g 4 a . php” method=”POST”>
<textarea name=” m e s s a g e ” rows=5 cols=40 wrap=” o f f ”>
</textarea>
<input type=” s u b m i t ” value=” A b s e n d e n ”>
</form>
<hr>
<!−− F o r m u l a r a u s g a b e Ende −−>
<?php
/∗
Ausgabe E i n t r a e g e G a e s t e b u c h , wenn e i n e G a e s t e b u c h s c h o n a n g e l e g t
i s t . D i e s w i r d vorweg m i t f i l e e x i s t s ( ) g e p r u e f t .
∗/
if( file_exists( $gaestebuch ) ) {
$datei = fopen( $gaestebuch, ” r ” ); / / O e f f n e n f u e r READ
if( $datei ) {
while( !feof( $datei ) ) {
echo fgets( $datei );
}
fclose( $datei );
}
/ / Ausgabe e i n g e l e s . Z e i l e
}
?>
</body>
</html>
D.2.5
Aufgabe 5
Listing D.19: v2 aufg5 a.php
1 <?php
2
$counter = ” c o u n t e r . t x t ”; / / D a t e i n a m e
3
$zaehler_stand = 0;
/ / Variable f u e r s Mitzaehlen der Hits
4
5
/∗ Alten Zaehlerstand einlesen ,
6
wenn s c h o n e i n e Z a e h l e r d a t e i b e s t e h t . ∗ /
7
if( file_exists( $counter ) ) {
8
$datei = fopen( $counter, ” r ” ); / / O e f f n e n f u e r READ
Anhang D - 19
Einführung in PHP
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Anhang D: Lösungen zu den Übungsaufgaben
if( $datei ) {
$zaehler_stand = fgets( $datei );
fclose( $datei );
}
}
/∗ Zaehlerstand erhoehen ∗/
$zaehler_stand = $zaehler_stand+1;
/ ∗ Neuen Z a e h l e r s t a n d s p e i c h e r n ( a l t e D a t e i w i r d u e b e r s c h r i e b e n ) ∗ /
$datei = fopen( $counter, ”w” ); / / O e f f n e n f u e r WRITE−O p e r a t i o n
if( $datei ) {
fwrite( $datei, $zaehler_stand );
fclose( $datei );
}
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Vorlesung 2 Aufgabe 5</title>
</head>
<body>
Diese Seite wird gerade zum
<?php echo $zaehler_stand.” . ” ?> Mal aufgerufen.
</body>
</html>
D.2.6
Aufgabe 6
Listing D.20: v2 aufg6 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Susis Wasserbetten GmbH</title>
</head>
<body bgcolor=”# c c c c f f ”>
<?php
/ ∗ V a r i a b l e n d e k l a r a t i o n und I n i t i a l i e r u n g e n ∗ /
$kopfteil = ” . / v o r l a g e n / k o p f . t p l ”;
$fussteil = ” . / v o r l a g e n / f u s s . t p l ”;
$mittelteil = ” d e f a u l t ”;
/ ∗ E r m i t t l u n g d e r GET−Uebergabe−P a r a m e t e r ∗ /
if( !empty( $_GET[” i n h a l t ”] ) ) {
$mittelteil = $_GET[” i n h a l t ”];
}
$dynamic = ” . / v o r l a g e n / ”.$mittelteil.” . t p l ”;
/ ∗ K o p f t e i l e i n b i n d e n , wenn v o r h a n d e n ∗ /
if( file_exists( $kopfteil ) ) {
include( $kopfteil );
}
Anhang D - 20
Einführung in PHP
Anhang D: Lösungen zu den Übungsaufgaben
26
/ ∗ M i t t e l t e i l e i n b i n d e n , wenn v o r h a n d e n ∗ /
27
if( file_exists( $dynamic ) ) {
28
include( $dynamic );
29
}
30
31
/ ∗ F u s s t e i l e i n b i n d e n , wenn v o r h a n d e n ∗ /
32
if( file_exists( $fussteil ) ) {
33
include( $fussteil );
34
}
35
36 ?>
37 </body>
38 </html>
D.3
Vorlesung 3
D.3.1
Aufgabe 1
Listing D.21: v3 aufg1 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
/∗ ∗
∗ Berechnet die Flaeche eines Rechtecks
∗
∗ Parameter :
∗ $height
−
Hoehe
∗ $width
−
Breite
∗
∗/
function flaeche( $height, $width ) {
$result = $height * $width;
return $result;
}
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Flächenberechnung</title>
</head>
<body bgcolor=”# c c c c f f ”>
<h2>Flächenberechnung</h2>
<?php
if( isset( $_POST[” r e c h n e n ”] ) ){
/ ∗ Uebergabe an F u n k t i o n und R u e c k g a b e d e s E r g e b n i s ∗ /
$erg = flaeche( $_POST[” h o e h e ”], $_POST[” b r e i t e ”] );
/∗ Bildschirmausgabe ∗/
echo ” Die F l ä c h e b e t r ä g t : ”.$erg.”<br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 1 a . php” method=”POST”>
<table>
<tr><td>Höhe:</td>
Anhang D - 21
Einführung in PHP
38
39
40
41
42
43
44
45
46
47
48
49
Anhang D: Lösungen zu den Übungsaufgaben
<td><input type=” t e x t ” name=” h o e h e ”></td></tr>
<tr><td>Breite:</td>
<td><input type=” t e x t ” name=” b r e i t e ”></td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” r e c h n e n ” value=” B e r e c h n e n ”>
</td></tr>
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
D.3.2
Aufgabe 2
Listing D.22: v3 aufg2 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
/∗ ∗
∗ E r m i t t e l t das M i t g l i e d aufgrund der Mitgliedsnummer
∗
∗ Parameter :
∗ $index
−
Mitgliedsnummer
∗
∗/
function mitglied( $index ) {
$mitglieder = array( ” D i e t e r S c h u l z ”,
” W o l f g a n g H e r b s t ”,
” F r a n z Lang”,
” H o r s t S c h m i d t ” );
$resultat = ””;
if( $index >= 0 && $index < count( $mitglieder ) ) {
$resultat = $mitglieder[ $index ];
}
return $resultat;
}
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Mitgliedsnummer -> Mitglied</title>
</head>
<body bgcolor=”# c c c c f f ”>
<?php
if( isset( $_POST[” s u c h e ”] ) ){
$num = $_POST[”nummer”];
$erg = mitglied( $num );
/∗ Bildschirmausgabe ∗/
echo ” M i t g l i e d s n u m m e r : ”.$num.” − Name : ”;
if( empty($erg) ) {
Anhang D - 22
Einführung in PHP
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Anhang D: Lösungen zu den Übungsaufgaben
echo ” noch f r e i ”;
}
else {
echo $erg;
}
echo ”<br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 2 a . php” method=”POST”>
<table>
<tr><td>Mitgliedsnummer:</td>
<td><input type=” t e x t ” name=”nummer”></td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” s u c h e ”
value=” S u c h e n s t a r t e n ”></td></tr>
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
D.3.3
Aufgabe 3
Listing D.23: v3 aufg3 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
/∗ ∗
∗ E r m i t t e l t das M i t g l i e d aufgrund der Mitgliedsnummer
∗
∗ Parameter :
∗ $name
−
Mitgliedsname
∗
∗ Rueckgabe :
∗ I n d e x z a h l b e i E r f o l g , s o n s t −1
∗
∗/
function mitgliedsnummer( $name ) {
$mitglieder = array( ” D i e t e r S c h u l z ”,
” W o l f g a n g H e r b s t ”,
” F r a n z Lang”,
” H o r s t S c h m i d t ” );
$resultat = -1;
$anzahl = count( $mitglieder );
for( $i = 0; $i < $anzahl; $i++ ){
if( $name == $mitglieder[ $i ] ){
/ / Gefunden ! ! ! ! !
$resultat = $i;
break;
}
Anhang D - 23
Einführung in PHP
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Anhang D: Lösungen zu den Übungsaufgaben
}
return $resultat;
}
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Mitglied -> Mitgliedsnummer</title>
</head>
<body bgcolor=”# c c c c f f ”>
<?php
if( isset( $_POST[” s u c h e ”] ) ){
$suchname = $_POST[” m i t g l i e d ”];
$erg = mitgliedsnummer( $suchname );
/∗ Bildschirmausgabe ∗/
echo ” M i t g l i e d : ”.$suchname.” − M i t g l i e d s n u m m e r : ”;
if( $erg < 0 ) {
echo ” n i c h t g e f u n d e n ”;
}
else {
echo $erg;
}
echo ”<br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 3 a . php” method=”POST”>
<table>
<tr><td>Suchname:</td><td><input type=” t e x t ”
name=” m i t g l i e d ”></td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” s u c h e ”
value=” S u c h e n s t a r t e n ”></td></tr>
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
Listing D.24: v3 aufg3 b.php
1
2
3
4
5
6
7
8
9
10
11
12
<?php
/∗ ∗
∗ E r m i t t e l t das M i t g l i e d aufgrund der Mitgliedsnummer
∗
∗ Parameter :
∗ $name
−
Mitgliedsname
∗
∗ Rueckgabe :
∗ I n d e x z a h l b e i E r f o l g , s o n s t −1
∗
∗/
function mitgliedsnummer( $name ) {
Anhang D - 24
Einführung in PHP
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Anhang D: Lösungen zu den Übungsaufgaben
$mitglieder = array( ” D i e t e r S c h u l z ”,
” W o l f g a n g H e r b s t ”,
” F r a n z Lang”,
” H o r s t S c h m i d t ” );
$resultat = -1;
$anzahl = count( $mitglieder );
$gesucht = trim( $name );
/ / L e e r z e i c h e n kappen
for( $i = 0; $i < $anzahl; $i++ ){
/ ∗ I s t Suchname i n M i t g l i e d s n a m e n e n t h a l t e n ? ∗ /
$rv = stristr( $mitglieder[ $i ], $gesucht );
if( $rv != false ){
/ / Gefunden ! ! ! ! !
$resultat = $i;
break;
}
}
return $resultat;
}
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Mitglied -> Mitgliedsnummer</title>
</head>
<body bgcolor=”# c c c c f f ”>
<?php
if( isset( $_POST[” s u c h e ”] ) ){
$suchname = $_POST[” m i t g l i e d ”];
$erg = mitgliedsnummer( $suchname );
/∗ Bildschirmausgabe ∗/
echo ” M i t g l i e d : ”.$suchname.” − M i t g l i e d s n u m m e r : ”;
if( $erg < 0 ) {
echo ” n i c h t g e f u n d e n ”;
}
else {
echo $erg;
}
echo ”<br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 3 b . php” method=”POST”>
<table>
<tr><td>Suchname:</td><td><input type=” t e x t ”
name=” m i t g l i e d ”></td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” s u c h e ”
Anhang D - 25
Einführung in PHP
73
74
75
76
77
78
79
Anhang D: Lösungen zu den Übungsaufgaben
value=” S u c h e n s t a r t e n ”></td></tr>
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
D.3.4
Aufgabe 4
Listing D.25: v3 aufg4 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Großschreiben aller Buchstaben</title>
</head>
<body>
<?php
if( isset( $_POST[” f o r m s e n d ”] ) ){
echo ” E r g e b n i s : ”;
echo strtoupper( $_POST[” s o u r c e ”] );
echo ”<br><hr><br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 4 a . php” method=”POST”>
<table>
<tr><td valign=” t o p ”>Quelltext:</td>
<td>
<textarea name=” s o u r c e ” rows=5 cols=40 wrap=”on”>
</textarea>
</td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” f o r m s e n d ” value=”und l o s . . . ”></td></tr>
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
D.3.5
Aufgabe 5
Listing D.26: v3 aufg5 a.php
1
2
3
4
5
6
7
8
9
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Buchstaben umdrehen</title>
</head>
<body>
<?php
if( isset( $_POST[” f o r m s e n d ”] ) ){
echo ” E r g e b n i s : ”;
Anhang D - 26
Einführung in PHP
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Anhang D: Lösungen zu den Übungsaufgaben
echo strrev( $_POST[” s o u r c e ”] );
echo ”<br><hr><br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 5 a . php” method=”POST”>
<table>
<tr><td valign=” t o p ”>Quelltext:</td>
<td>
<textarea name=” s o u r c e ” rows=5 cols=40 wrap=”on”>
</textarea>
</td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” f o r m s e n d ”
value=”und l o s . . . ”></td></tr>
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
D.3.6
Aufgabe 6
Listing D.27: v3 aufg6 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Wörter-Reihenfolge tauschen</title>
</head>
<body>
<?php
if( isset( $_POST[” f o r m s e n d ”] ) ){
$teile = explode( ” ”, $_POST[” s o u r c e ”] );
$anzahl = count( $teile );
echo ” E r g e b n i s : ”;
for( $i = $anzahl-1; $i >= 0; $i−− ) {
echo $teile[ $i ].” ”;
}
echo ”<br><hr><br><br >\n”;
}
?>
<!−− B e g i n n F o r m u l a r a u s g a b e −−>
<form action=” v 3 a u f g 6 a . php” method=”POST”>
<table>
<tr><td valign=” t o p ”>Quelltext:</td>
<td>
<textarea name=” s o u r c e ” rows=5 cols=40 wrap=”on”>
</textarea>
</td></tr>
<tr><td> </td>
<td><input type=” s u b m i t ” name=” f o r m s e n d ”
value=”und l o s . . . ”></td></tr>
Anhang D - 27
Einführung in PHP
32
33
34
35
36
37
Anhang D: Lösungen zu den Übungsaufgaben
</table>
</form>
<!−− Ende F o r m u l a r a u s g a b e −−>
</body>
</html>
D.4
Vorlesung 4
D.4.1
Aufgabe 1
Listing D.28: v4 aufg1 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>SELECT aus Tabelle kneipen</title>
</head>
<body>
<?php
/∗ Z e n t r a l e I n i t i a l i s i e r u n g der Verbindungsparameter
f u e r e i n e n s p a e t e r e n Gebrauch
∗/
$dbserver = ”db . n l i s e r v e r . de ”;
$user = ” n l i u s e r ”;
$password = ” k l e i n e s G e h e i m n i s ”;
$database = ” d b n l i ”;
/∗ Verbindung zur Datenebank h e r s t e l l e n , Verbindungsparameter
werden b e n u t z t ∗ /
$verbindung = mysql_connect( $dbserver, $user, $password );
/ ∗ P r u e f e n , ob V e r b i n d u n g h e r g e s t e l l t ∗ /
if( $verbindung ) {
/ ∗ Auswahl d e r D a t e n b a n k u n t e r B e n u t z u n g
d e s oben g e s e t z t e n P a r a m e t e r s ∗ /
mysql_select_db( $database );
/ ∗ V o r f o r m u l i e r u n g d e r SQL−A b f r a g e i n V a r i a b l e ∗ /
$sql =
”SELECT Name , A r t , N o t e FROM k n e i p e n WHERE N o t e > 0”;
/ ∗ S c h i c k e n d e r A b f r a g e an a u s g e w a e h l t e D a t e n b a n k
und A u f f a n g e n d e s E r g e b n i s w e r t s
∗/
echo ” Die f o l g e n d e SQL−A b f r a g e w i r d nun”.
” an den D a t e n b a n k s e r v e r g e s c h i c k t : ”.
”< f o n t c o l o r =b l u e >”.$sql.”</ f o n t ><br><br >\n”;
$erg = mysql_query( $sql );
if( $erg ) {
while( $zeile = mysql_fetch_row( $erg ) )
{
Anhang D - 28
Einführung in PHP
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 ?>
65
66 </body>
67 </html>
D.4.2
Anhang D: Lösungen zu den Übungsaufgaben
echo ”Name : ”.$zeile[0].
” , A r t : ”.$zeile[1].
” , N o t e : ”.$zeile[2].
”<br >\n”;
}
}
else {
echo ” L e i d e r wohl n i c h t a l l e s übergekommen .< br >\n”;
}
/ ∗ Verbindung zur Datenbank s c h l i e s s e n ∗ /
mysql_close( $verbindung );
}
else {
echo ” Die V e r b i n d u n g zum D a t e n b a n k s e r v e r ”.
” i s t g e s c h e i t e r t .< br >\n”;
}
Aufgabe 2
Listing D.29: v4 aufg2 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Insert Tabelle kneipen</title>
</head>
<body>
<?php
/∗
∗ PHP−V e r a r b e i t u n g d e r F o r m u l a r d a t e n , wenn d a s S k r i p t u e b e r
∗ den SUBMIT−Knopf m i t Namen ’ i n s e r t ’ a u f g e r u f e n w i r d .
∗
∗/
if( isset( $_POST[” i n s e r t ”] ) ) {
/∗ Z e n t r a l e I n i t i a l i s i e r u n g der Verbindungsparameter
f u e r e i n e n s p a e t e r e n Gebrauch
∗/
$dbserver = ”db . n l i s e r v e r . de ”;
$user = ” n l i u s e r ”;
$password = ” k l e i n e s G e h e i m n i s ”;
$database = ” d b n l i ”;
/∗ Verbindung zur Datenebank h e r s t e l l e n , Verbindungsparameter
werden b e n u t z t ∗ /
$verbindung = mysql_connect( $dbserver, $user, $password );
/ ∗ P r u e f e n , ob V e r b i n d u n g h e r g e s t e l l t ∗ /
if( $verbindung ) {
/ ∗ Auswahl d e r D a t e n b a n k u n t e r B e n u t z u n g
d e s oben g e s e t z t e n P a r a m e t e r s ∗ /
Anhang D - 29
Einführung in PHP
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Anhang D: Lösungen zu den Übungsaufgaben
mysql_select_db( $database );
/ ∗ V o r f o r m u l i e r u n g d e r SQL−A b f r a g e i n V a r i a b l e ∗ /
$sql =
”INSERT k n e i p e n ( Name , A r t , Note , Kommentar ) VALUES ( ”;
$sql = $sql.” ’ ”.$_POST[”name”].” ’ , ”;
/ / i s t Text
$sql = $sql.” ’ ”.$_POST[” a r t ”].” ’ , ”;
/ / i s t Text
$sql = $sql.””.$_POST[” n o t e ”].” , ”;
/ / i s t Integer !!!
$sql = $sql.” ’ ”.$_POST[” kommentar ”].” ’ ) ”; / / i s t T e x t
/ ∗ S c h i c k e n d e r A b f r a g e an a u s g e w a e h l t e D a t e n b a n k
und A u f f a n g e n d e s E r g e b n i s w e r t s
∗/
echo ” Die f o l g e n d e SQL−A b f r a g e w i r d nun an den ”.
” D a t e n b a n k s e r v e r g e s c h i c k t : ”.$sql.”<br><br >\n”;
$erg = mysql_query( $sql );
if( !$erg ) {
echo ”FEHLER : ”.mysql_error().”<br >\n”;
}
/ ∗ Verbindung zur Datenbank s c h l i e s s e n ∗ /
mysql_close( $verbindung );
echo ”<hr >\n”;
}
else {
echo
” V e r b i n d u n g zum D a t e n b a n k s e r v e r i s t g e s c h e i t e r t .< br >\n”;
}
}
?>
<!−− B e g i n n d e r F o r m u l a r a u s g a b e −−>
<p><font size=”6”>Kneipenführer</font></p>
<p><font size=”3”>Fügen Sie eine neue Kneipe in den
Kneipenführer ein.</font></p>
<form action=” v 4 a u f g 2 a . php” method=” p o s t ”>
<table border=”0” cellspacing=”0” cellpadding=”5”>
<tr>
<td>Name:</td>
<td>
<input type=” t e x t ” name=”name”>
</td>
</tr>
<tr>
<td>Art:</td>
<td>
<input type=” t e x t ” name=” a r t ”>
</td>
</tr>
<tr>
<td>Note:</td>
<td>
<input type=” t e x t ” name=” n o t e ”>
</td>
</tr>
<tr>
<td>Kommentar:</td>
<td>
<textarea name=” kommentar ”></textarea>
Anhang D - 30
Einführung in PHP
91
92
93
94
95
96
97
98
99
100
101
102
103
Anhang D: Lösungen zu den Übungsaufgaben
</td>
</tr>
<tr>
<td>
<input type=” s u b m i t ” name=” i n s e r t ” value=” A b s c h i c k e n ”>
</td>
<td> </td>
</tr>
</table>
</form>
<!−− Ende d e r F o r m u l a r a u s g a b e −−>
</body>
</html>
D.4.3
Aufgabe 3
Listing D.30: v4 aufg3 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
/ ∗ V a r i a b l e n d e k l a r a t i o n , V a r i a b l e n nehmen s p a e t e r d i e
∗ Formulardaten auf ∗/
$f_name = ””;
$f_art = ””;
$f_note = 0;
$f_kommentar = ””;
/∗
∗ Die F u n k t i o n s o r g t f u e r den E i n t r a g d e r n e u e n D a t e n s a e t z e
∗
∗ Aufruf in Zeile 129
∗
∗/
function db_kommunikation() {
global $f_name, $f_art, $f_note, $f_kommentar;
/∗ Z e n t r a l e I n i t i a l i s i e r u n g der Verbindungsparameter
f u e r e i n e n s p a e t e r e n Gebrauch
∗/
$dbserver = ”db . n l i s e r v e r . de ”;
$user = ” n l i u s e r ”;
$password = ” k l e i n e s G e h e i m n i s ”;
$database = ” d b n l i ”;
/∗ Verbindung zur Datenebank h e r s t e l l e n , Verbindungsparameter
werden b e n u t z t ∗ /
$verbindung = mysql_connect( $dbserver, $user, $password );
/ ∗ P r u e f e n , ob V e r b i n d u n g h e r g e s t e l l t ∗ /
if( $verbindung ) {
/ ∗ Auswahl d e r D a t e n b a n k u n t e r B e n u t z u n g
d e s oben g e s e t z t e n P a r a m e t e r s ∗ /
mysql_select_db( $database );
/ ∗ V o r f o r m u l i e r u n g d e r SQL−A b f r a g e i n V a r i a b l e ∗ /
$sql =
”INSERT k n e i p e n ( Name , A r t , Note , Kommentar ) VALUES ( ”;
$sql = $sql.” ’ ”.$f_name.” ’ , ”;
/ / i s t Text
Anhang D - 31
Einführung in PHP
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Anhang D: Lösungen zu den Übungsaufgaben
$sql = $sql.” ’ ”.$f_art.” ’ , ”;
$sql = $sql.””.$f_note.” , ”;
$sql = $sql.” ’ ”.$f_kommentar.” ’ ) ”;
//
//
//
i s t Text
i s t Integer !!!
i s t Text
/ ∗ S c h i c k e n d e r A b f r a g e an a u s g e w a e h l t e D a t e n b a n k
und A u f f a n g e n d e s E r g e b n i s w e r t s
∗/
echo ” Die f o l g e n d e SQL−A b f r a g e w i r d nun an den ”.
” D a t e n b a n k s e r v e r g e s c h i c k t : ”.$sql.”<br><br >\n”;
$erg = mysql_query( $sql );
if( !$erg ) {
echo ”FEHLER : ”.mysql_error().”<br >\n”;
}
/ ∗ Verbindung zur Datenbank s c h l i e s s e n ∗ /
mysql_close( $verbindung );
}
else {
echo
” V e r b i n d u n g zum D a t e n b a n k s e r v e r i s t g e s c h e i t e r t .< br >\n”;
}
}
/∗
∗ Die F u n k t i o n p r u e f t d i e F o m u l a r d a t e n a u f G u e l t i g k e i t
∗
∗ Rueckgabe :
∗ 1
bei Erfolg
∗ −1
nicht alle Datenfelder ausgefuellt
∗ −2
N o t e n i c h t im g u e l t i g e n B e r e i c h
∗
∗ Aufruf in Zeile 124
∗
∗/
function pruefung() {
global $f_name, $f_art, $f_note, $f_kommentar;
$status = 0;
/ / S p a e t e r e r Rueckgabewert
/∗ Sind a l l e Formularfelder a u s g e f u e l l t ? ∗/
if( !empty( $f_name ) &&
!empty( $f_art ) &&
!empty( $f_note ) &&
!empty( $f_kommentar ) ) {
/ ∗ E r f u e l l t der E i n t r a g Note d i e Bedingung ? ∗ /
if( $f_note > 0 && $f_note < 7 ) {
$status = 1; / / a l l e B e d i n g u n g e n s i n d e r f u e l l t
}
else {
$status = -2;
}
}
else {
$status = -1;
}
return $status;
}
Anhang D - 32
Einführung in PHP
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
Anhang D: Lösungen zu den Übungsaufgaben
?>
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>Insert Tabelle kneipen mit Pruefung</title>
</head>
<body>
<?php
/∗
∗ PHP−V e r a r b e i t u n g d e r F o r m u l a r d a t e n , wenn d a s S k r i p t u e b e r
∗ den SUBMIT−Knopf m i t Namen ’ i n s e r t ’ a u f g e r u f e n w i r d .
∗
∗/
if( isset( $_POST[” i n s e r t ”] ) ) {
/ ∗ E i n t r a e g e n o r m a l i s i e r e n und i n V a r i a b l e n u e b e r n e h m e n ∗ /
$f_name = trim( $_POST[”name”] );
$f_art = trim( $_POST[” a r t ”] );
$f_note = trim( $_POST[” n o t e ”] );
$f_kommentar = trim( $_POST[” kommentar ”] );
/ ∗ Nur wenn P r u e f u n g d e r E i n g a b e ok w i r d d e r D a t e n s a t z
∗ i n d i e D a t e n b a n k uebernommen .
∗/
$rv = pruefung();
/ ∗ R u e c k g a b e w e r t von p r u e f u n g ( ) a u s w e r t e n ∗ /
switch( $rv ) {
case 1: / / a l l e s ok
db_kommunikation();
break;
case -1: / / D a t e n f e l d e r l e e r
echo
” S i e haben n i c h t a l l e D a t e n f e l d e r a u s g e f ü l l t .< br >\n”;
break;
case -2: / / N o t e n i c h t g u e l t i g
echo ” Die B e n o t u n g s p r e n g t den g ü l t i g e n Rahmen.< br >\n”;
break;
}
echo ”<hr >\n”;
}
?>
<!−− B e g i n n d e r F o r m u l a r a u s g a b e −−>
<p><font size=”6”>Kneipenführer</font></p>
<p><font size=”3”>Fügen Sie eine neue Kneipe in den
Kneipenführer ein.</font></p>
<form action=” v 4 a u f g 3 a . php” method=” p o s t ”>
<table border=”0” cellspacing=”0” cellpadding=”5”>
<tr>
<td>Name:</td>
<td>
<input type=” t e x t ” name=”name”>
</td>
</tr>
<tr>
<td>Art:</td>
Anhang D - 33
Einführung in PHP
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
Anhang D: Lösungen zu den Übungsaufgaben
<td>
<input type=” t e x t ” name=” a r t ”>
</td>
</tr>
<tr>
<td>Note:</td>
<td>
<input type=” t e x t ” name=” n o t e ”>
</td>
</tr>
<tr>
<td>Kommentar:</td>
<td>
<textarea name=” kommentar ”></textarea>
</td>
</tr>
<tr>
<td>
<input type=” s u b m i t ” name=” i n s e r t ” value=” A b s c h i c k e n ”>
</td>
<td> </td>
</tr>
</table>
</form>
<!−− Ende d e r F o r m u l a r a u s g a b e −−>
</body>
</html>
D.4.4
Aufgabe 4
Listing D.31: v4 aufg4 a.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!doctype html public ” −//W3C / / DTD HTML 4 . 0 / / EN”>
<html>
<head>
<title>SELECT aus Tabelle kneipen</title>
</head>
<body>
<?php
/∗ Z e n t r a l e I n i t i a l i s i e r u n g der Verbindungsparameter
f u e r e i n e n s p a e t e r e n Gebrauch
∗/
$dbserver = ”db . n l i s e r v e r . de ”;
$user = ” n l i u s e r ”;
$password = ” k l e i n e s G e h e i m n i s ”;
$database = ” d b n l i ”;
/∗ Verbindung zur Datenebank h e r s t e l l e n , Verbindungsparameter
werden b e n u t z t ∗ /
$verbindung = mysql_connect( $dbserver, $user, $password );
/ ∗ P r u e f e n , ob V e r b i n d u n g h e r g e s t e l l t ∗ /
if( $verbindung ) {
/ ∗ Auswahl d e r D a t e n b a n k u n t e r B e n u t z u n g
d e s oben g e s e t z t e n P a r a m e t e r s ∗ /
Anhang D - 34
Einführung in PHP
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 ?>
67
68 </body>
69 </html>
Anhang D: Lösungen zu den Übungsaufgaben
mysql_select_db( $database );
/ ∗ V o r f o r m u l i e r u n g d e r SQL−A b f r a g e i n V a r i a b l e ∗ /
$sql =
”SELECT k n e i p e n . Name , k n e i p e n . A r t , k n e i p e n . Kommentar , ”.
” n o t e n . Wort FROM k n e i p e n , n o t e n ”.
”WHERE n o t e n . Num=k n e i p e n . N o t e ”;
/ ∗ S c h i c k e n d e r A b f r a g e an a u s g e w a e h l t e D a t e n b a n k
und A u f f a n g e n d e s E r g e b n i s w e r t s
∗/
echo ” Die f o l g e n d e SQL−A b f r a g e w i r d nun”.
” an den D a t e n b a n k s e r v e r g e s c h i c k t : ”.
”< f o n t c o l o r =b l u e >”.$sql.”</ f o n t ><br><br >\n”;
$erg = mysql_query( $sql );
if( $erg ) {
while( $zeile = mysql_fetch_row( $erg ) )
{
echo ”Name : ”.$zeile[0].
” , A r t : ”.$zeile[1].
” , N o t e : ”.$zeile[2].
”<br >\n”;
}
}
else {
echo ” L e i d e r wohl n i c h t a l l e s übergekommen .< br >\n”;
}
/ ∗ Verbindung zur Datenbank s c h l i e s s e n ∗ /
mysql_close( $verbindung );
}
else {
echo ” Die V e r b i n d u n g zum D a t e n b a n k s e r v e r ”.
” i s t g e s c h e i t e r t .< br >\n”;
}
Anhang D - 35
Herunterladen