PHP und MySQL

Werbung
PHP und MySQL
E INFÜHRUNG
PHP und MySQL
Eine Einführung von Norbert Rogler
1/0
PHP und MySQL
E INFÜHRUNG
2/0
Copyright c 2004-2009
Norbert Rogler
D-95100 Selb
[email protected]
Dieser Text wurde ursprünglich in DocBook XML verfasst, dann mit dblatex nach LATEX übersetzt und dort
weiter bearbeitet. Er darf im Ganzen oder in Auszügen kopiert und im Sinne der
GNU/GPL (»GNU GENERAL PUBLIC LICENSE«)
weiterverwendet werden.
Es wird keinerlei GARANTIE für das Funktionieren der hier vorgestellten Methoden übernommen.
Jede HAFTUNG für SCHÄDEN, die aus der Anwendung dieser Methoden entstehen oder daraus, dass sich
diese Methoden nicht in der gewünschten Weise anwenden lassen, wird hiermit AUSGESCHLOSSEN.
Dieser Text enthält viele Links auf diverse Internet-Seiten. Dies ist einerseits bequem, andererseits ändert
sich da vieles oft sehr schnell. Sie müssen deshalb manchmal die neue URL selber suchen.
PHP und MySQL
E INFÜHRUNG
3/0
Inhaltsverzeichnis
Einleitung
1
2
3
4
5
5
Editoren
10
1.1
Linux und Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
1.2
Nur Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.3
Nur Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Erste PHP-Beispiele
13
2.1
Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
Zins-Projekt
15
3.1
Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.2
Vorbereitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3
Parameter mit der GET-Methode übergeben . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.4
Ablaufsteuerung von Programmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.4.1
Kontrollanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.4.2
Logische Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.4.3
Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Lesen von Text-Dateien
26
4.1
Zu den Zielen und Beispieldateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.2
Öffnen und Schließen von Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
Datenbanken (allgemein)
29
5.1
Datenbank-Management-Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.2
Realisierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.2.1
Dektop-Datenbank-Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.2.2
Client-Server-Datenbank-Systeme . . . . . . . . . . . . . . . . . . . . . . . . . .
30
PHP und MySQL
E INFÜHRUNG
4/0
5.3
5.4
6
7
Relationale Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
5.3.1
Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
5.3.2
NULL-Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.3.3
Schlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.3.4
Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
MySQL
33
6.1
Freie Datenbanksysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.2
Zur Einführung in MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.2.1
Programme zur Administration von MySQL . . . . . . . . . . . . . . . . . . . .
34
6.2.2
Starten des Kommandozeilen-Client . . . . . . . . . . . . . . . . . . . . . . . . .
34
6.2.3
MySQL-Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.3
Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
6.4
Lösungen der Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
PHP und MySQL
39
7.1
Die wesentlichen Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
7.2
Die mitgelieferten Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
7.3
Session-Verwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
7.4
Passwort-Schutz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
7.5
Lösungen der Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
Literaturverzeichnis
45
PHP und MySQL
E INFÜHRUNG
5/0
Einleitung
Einführung
Im Herbst 1994 begann Rasmus Lerdorf mit der Entwicklung von PHP. Die erste öffentlich verfügbare
Version erschien 1995 unter dem Namen
Personal Home Page Tool
Seitdem wird PHP kontinuierlich von verschiedenen Personen weiterentwickelt, wobei die Koordination
weiter bei Rasmus Lerdorf liegt. Der Name PHP wird heute als
PHP Hypertext Preprocessor
interpretiert. Inzwischen (2007) sind wir bei PHP 5.2 angelangt, wobei in PHP 5 vor allem die Unterstützung Objektorientierter Programmierung gegenüber PHP 4 stark verbessert wurde.
Der folgende einführende Text ist wörtlich übernommen aus
PHP kurz & gut
von Rasmus Lerdorf
O’Reillys Taschenbibliothek
c 2000 by O’Reilly Verlag GmbH & Co. KG
PHP und MySQL
E INFÜHRUNG
6/0
Beginn des Zitats:
PHP ist - kurz gesagt - eine serverseitige, in HTML eingebettete plattformunabhängige
Skriptsprache. Einfacher ausgedrückt: PHP ermöglicht es Ihnen, Anweisungen in HTMLCode einzufügen, um dynamische Inhalte zu erzeugen. Diese Anweisungen werden vom
Webserver eingelesen und verarbeitet. Der Browser, der die Seite anzeigt, bleibt davon
völlig unberührt. Der Webserver ersetzt den PHP-Code durch den Inhalt, der durch den
Code beschrieben wird.
PHP kann so konfiguriert werden, dass es entweder als Servermodul oder als eigenständiges CGI-Skript arbeitet. Zum jetzigen Zeitpunkt ist die Servermodulversion nur auf
Unix-Apache-Webservern produktiv einsetzbar.
Die CGI-Version ist dagegen auf allen Webservern lauffähig, sowohl auf Unix als auch
auf Windows 95/98/NT.
Für die Windows-Plattform (PHP-Version 4) werden die Servermodule dahingehend weiterentwickelt, dass sie mit ISAPI, NSAPI und WSAPI lauffähig sind, was bedeutet, dass
die Servermodule eventuell Microsofts IIS, Netscape Enterprise Server und O’Reillys
Webseite unterstützen werden. Für Details über die Verfügbarkeit von PHP siehe
http://www.php.net
Die Sprache PHP bedient sich der Konzepte anderer weitverbreiteter Sprachen wie C
und Perl. Falls Sie Erfahrungen in einer dieser Sprachen haben, werden Sie sich bei PHP
gleich heimisch fühlen. Als Ergänzung seines Grundwortschatzes bietet PHP eine große
Menge von Funktionen an, die alles von Array-Manipulationen bis hin zu regulären Ausdrücken unterstützen.
Eine der gebräuchlichsten Anwendungen von PHP ist die Datenbankanbindung. PHP unterstützt eine Vielfalt von Datenbanken direkt. Viele andere sind indirekt über die ODBCFunktionen von PHP verfügbar. Mit Hilfe dieser Datenbankanbindung ist es zum Beispiel
möglich, mit PHP ein Webinterface für die Produktdatenbank einer Firma zu erstellen.
Ende des Zitats.
Vorbereitungen und Installationen
Voraussetzungen
Dieser Text ist gedacht als Grundlage für einen einführenden Kurs in LAMP (»Linux Apache MySQL und
PHP«) oder in WAMP (»Windows Apache MySQL und PHP«) im Umfang von ungefähr 24 Stunden. Da
PHP auch mit anderen Web-Servern (z.B. dem »Internet Information Server« von Microsoft) und mit vielen
Datenbanksystemen gut zusammenspielt, geht es letztlich um die Erstellung
Dynamischer Web-Seiten mit PHP .
Es handelt sich hier nicht um ein eigenständiges Tutorial, sondern um einen Leitfaden, der eine Sammlung
von Beispielen und Verweise auf Materialien zur Verfügung stellt, die mir für einen solchen Kurs geeignet
erscheinen. Alle Beispiele und fast alle der referenzierten Materialien sind frei im Internet erhältlich.
Von den TeilnehmerInnen werden erwartet:
Grundkenntnisse in HTML.
PHP und MySQL
E INFÜHRUNG
7/0
Grundkenntnisse in strukturierter Programmierung.
Grundkenntnisse im Bereich Datenbanken und in SQL.
Wir gehen von folgender Ausstattung des Unterrichts-Raumes aus:
1. Allen TeilnehmerInnen steht ein eigener PC mit Linux oder Windows zur Verfügung.
2. Auf jedem Rechner ist ein Benutzer php eingerichtet. Diesem steht (wenigstens) ein leistungsfähiger
Editor zur Verfügung.
3. Auf allen Rechnern wird der Web-Server Apache 2.x installiert mit Unterstützung für PHP 5.
4. Auf allen Rechnern wird der Datenbankserver MySql installiert.
5. Unter Linux sollten der Web-Server und der Datenbank-Server beim Booten automatisch starten. Unter
Windows ist es empfehlenswert, diese Server nicht als Dienste zu starten.
Installieren unserer Arbeitsumgebung
Web-Server und Datenbanken
Um unsere WEB-Seiten der Öffentlichkeit zugänglich zu machen, werden wir meist einen Provider nutzen. Wenn wir PHP einsetzen wollen, muss dessen WEB-Server natürlich PHP unterstützen. Nachdem wir
in diesem Zusammenhang oft auch eine Datenbank nutzen wollen, sollte er uns einen Zugang zu einem
Datenbank-System zur Verfügung stellen. Der übliche Zugang geschieht heute über LAMP (Linux + Apache + MySQL + PHP). Zum Testen unserer WEB-Seiten brauchen wir keinen Provider, denn alle oben
genannten Programme können wir kostenlos auf unserem Rechner installieren. Es muss auch nicht Linux
sein, denn es geht (fast) genauso gut mit WAMP (Windows + Apache + MySQL + PHP).
LAMP
Alle neueren Linux-Distributionen bringen alles mit, was wir in diesem Kurs benötigen. Wir beziehen
uns hier auf SuSE 10.2. Die Installation unter anderen Versionen oder Distributionen kann ganz ähnlich
durchgeführt werden, wenn diese einigermaßen aktuell sind.
Unter SuSE 10.2 sind die Voraussetzungen 3. und 4. vorhergehender Liste erfüllt, wenn die Selektion Webund LAMP-Server installiert ist. Der Punkt 5. kann mittels
yast -> Netzwerkdienste -> HTTP-Server
eingerichtet werden. Übernehmen Sie alle Einstellungen, die der »HTTP-Server-Wizard« vorschlägt bis zur
letzten Seite. Bevor Sie auf Beenden klicken, sollten Sie die Option
Apache2-Server beim Systemstart starten
anklicken.
PHP und MySQL
E INFÜHRUNG
8/0
WAMP
Die »Apache Friends« stellen ein Paket XAMPP zusammen, das es ganz leicht macht, eine Plattform zu
installieren, die der entspricht, wie sie von vielen Providern unter Linux angeboten wird. (XAMPP gibt es
auch für Linux; das scheint mir allerdings ziemlich überflüssig zu sein, weil gängige Linux-Distributionen
alles mitbringen, was LAMP beötigt.)
Download für die Windows-Version von XAMPP:
http://www.apachefriends.org/de/xampp-windows.html
(Ich empfehle für Windows die »Installer-Version«.)
Wenn Sie auf Ihrem eigenen Rechner installieren, können Sie das Installations-Verzeichnis natürlich frei
wählen. Unter Vista sollten Sie dazu kein Unterverzeichnis von C:\Programme wählen, wie es frühere
Versionen von XAMPP vorgeschlagen haben. Im Kurs installieren wir in unserem Heimatverzeichnis.
Für eine Testumgebung sollten Sie keines der mitgelieferten Programme als Dienst installieren, sondern zur
Steuerung der Programme das mitinstallierte »XAMPP Control Panel« verwenden.
Testen der Web-Server-Installation
Starten des Web-Servers
Unter Linux sollte er gestartet sein und in Zukunft auch automatisch starten, Unter Windows müssen Sie
den Apache bei der hier vorgeschlagenen Installation manuell mit dem »XAMPP Control Panel« starten.
Starten Sie dann einen Web-Browser und geben Sie als URL ein:
http://localhost
(mittels localhost können Sie immer Ihren eigenen Rechner ansprechen). Es sollte eine HTML-Seite angezeigt werden, die Ihnen mitteilt, dass Ihr Server funktioniert.
Anmerkungen zum Literaturverzeichnis
Am Schluss dieses Skripts finden Sie ein kurzes Literaturverzeichnis, das ausschließlich Verweise auf deutsche Texte enthält. Diese werden in der Form [ ... ] referenziert. Mit Ausnahme der Bücher [RDB] und
[THEIS] können diese Texte frei aus dem Internet bezogen werden. Unter [SOURCE] finden Sie die neueste Version dieses Skripts und ein Archiv mit allen Beispielen, die in diesem Skript behandelt werden. Die
Dateinamen, die hinter vielen Aufgaben genannt sind, beziehen sich immer auf dieses Beispiel-Archiv.
Dieses Archiv kann unter Linux mit dem Befehl
tar -f php_kurs-source.tar.gz -z -x
entpackt werden. Unter Windows können Sie dieses Archiv mit neueren Versionen von WinZIP in zwei
Schritten entpacken: Das erste Entpacken liefert die Datei php_kurs-source.tar, und wenn Sie diese
mit WinZIP öffnen, können Sie nun alle oder nur die gewünschten Dateien extrahieren.
Basis desssen, was wir hier erarbeiten wollen, ist natürlich HTML, und das wird in sehr schöner Weise
in [SELFHTML] beschrieben. Das ist zwar primär eine Sprachreferenz, aber die vielen Beispiele machen
(denke ich) ein spezielles HTML-Tutorial fast überflüssig.
PHP und MySQL
E INFÜHRUNG
9/0
Es gibt inzwischen sehr viele PHP-Tutorials, auch in deutscher Sprache. Besonders gut gefällt mir
[PHPTUT], auf das ich im Folgenden auch immer wieder verweise.
Ein Tutorial will natürlich keine Sprach-Referenz ersetzen. Eine sehr übersichtlich gestaltete deutsche Referenz zu PHP stellt [SELFPHP] dar; es ist aber weder vollständig noch ganz aktuell. Die deutsche Übersetzung des offiziellen PHP-Manuals finden Sie unter [PHPDOC]. Dieses Manual ist gut und recht aktuell
übersetzt, es ist allerdings sehr umfangreich. Das sollte nicht abschrecken: man braucht nur ein bisschen
Übung im Umgang mit derart umfangreichen Dokumentationen. Sie sollten deshalb
[PHPTUT] -> 18. Aufbau des PHP-Handbuchs .
http://tut.php-quake.net/de/manual.html
zu Rate ziehen.
Die Themen Relationale Datenbanken und SQL werden sehr gut dargestellt in [RDB]. Dieses Buch ist in
seinen Formulierungen allerdings sehr konzentriert und deshalb nicht immer ganz leicht zu verstehen.
Leicht verständlich ist [SQLEINF], ein kurzer, an der Universität Hamburg veröffentlichter Artikel, der nur
einen kleinen Teil des komplexen Themas SQL abdeckt, der aber sehr schön fast alles beschreibt, was wir
in diesem Zusammenhang benötigen.
Das deutsche Referenzhandbuch [MYSQL] zu MySQL ist wieder erschreckend umfangreich, aber es ist
gut und aktuell ins Deutsche übersetzt. Und man soll (und kann) das auch nicht alles durcharbeiten, sondern es geht darum, möglichst schnell das zu finden, was man braucht. Einen guten Einstieg liefert wieder
[PHPTUT] in den Kapiteln 30 - 37.
Eine kleine, ausführlich kommentierte “Bibliothek” zur Zusammenarbeit von PHP und MySQL finden Sie
in
[SOURCE]->iadressen/mysql.php .
PHP und MySQL
E INFÜHRUNG
10 / 0
Kapitel 1
Editoren
PHP-Code muss immer ganz “klassisch” mit einem Editor “eingetippt” werden. (Grafische Werkzeuge
beim Programmieren waren bis jetzt nur erfolgreich beim Gestalten grafischer Oberflächen.) Dabei ist ein
Editor ein Textverarbeitungs-Programm, das nur die eingegebenen Zeichen in seine Dateien schreibt und
darüber hinaus nichts (im Gegensatz etwa zu Word, das normalerweise zusätzliche Informationen zur Formatierung speichert).
Nachdem beim Programmieren der Editor das wichtigste Werkzeug ist, sollten Sie verschiedene Editoren ausprobieren und herausfinden, welche Ihnen am besten liegen. Ich denke, Sie können sich dabei auf
kostenlose Editoren beschränken, denn es gibt da sehr gute Produkte. Für PHP-Programmierung sollte ein
Editor wenigstens die Sprachen
HTML, XHTML, JavaScript, PHP und SQL
unterstützen. Im Folgenden möchte ich einige Editoren nennen, die ich in diesem Zusammenhang für empfehlenswert halte.
1.1 Linux und Windows
Unter UNIX spielen Editoren schon immer eine ganz wichtige Rolle. Deshalb wurden dort auch die beiden
wohl leistungsfähigsten Editoren entwickelt:
vim und emacs.
Diese Editoren unterstützen alle gängigen Programmiersprachen und sind selber fast universell kofigurierbar und programmierbar. Die grafischen Versionen dieser Editoren heißen
gvim und xemacs
und können auch unter Windows (natürlich kostenlos) eingesetzt werden. Wohl jede Linux-Distribution
stellt diese Editoren zur Verfügung.
Download-Adressen (auch für die Windows-Versionen):
http://www.vim.org/download.php
http://www.xemacs.org/Download
Problem: Diese Editoren erfordern viel Zeit zur Einarbeitung.
PHP und MySQL
E INFÜHRUNG
11 / 0
1.2 Nur Linux
Die KDE-Editoren kwrite und kate sind gut geeignet zum Erstellen von Programmtexten und ermöglichen
unter LINUX das Editieren in MS-Windows-Art.
Speziell zum Arbeiten im WEB-Bereich sind die einfach zu bedienenten Editoren
Bluefish und Quanta Plus
zu empfehlen, die sich auch gut für PHP eignen. Wohl jede Linux-Distribution stellt diese Editoren zur
Verfügung.
1.3 Nur Windows
Sehr gut gefällt mir PSPad. Es unterstützt ganz viele Programmiersprachen, gestattet sehr rationelles Arbeiten, ist über den »Windows Scripting Host« programmierbar und kann noch vieles mehr.
Download-Adresse:
http://www.pspad.com/de
Konsultieren Sie auch
[PHPTUT] -> editor
http://faq.php-quake.net/#editor
Aufgabe 1.0 (Kurs-Verzeichnis einrichten)
Loggen Sie sich mit dem Benutzernamen php ein. Wir wollen alle unsere html-Dateien und php-Dateien
nur unterhalb eines Kurs-Verzeichnisses anlegen.
Linux
Unter SuSE-Linux werden Sie in Ihrem Heimatverzeichnis ein Verzeichnis public_html finden. Das
ist unser Kurs-Verzeichnis. Wenn Sie mit einer anderen Linux-Distribution arbeiten und dieses Verzeichnis
existiert nicht, legen Sie es bitte an.
Windows
Ihr xampp-Verzeichnis hat ein Unterverzeichnis htdocs. Legen Sie in diesem htdocs-Verzeichnis ein Unterverzeichnis kurs an. Das ist unser Kurs-Verzeichnis.
Aufgabe 1.1 (hallo.html)
Öffnen Sie in Ihrem Arbeitsplatz Ihr Kurs-Verzeichnis und legen Sie dort die Datei hallo.html an.
Unter Linux können Sie folgendermaßen vorgehen: Drücken Sie die rechte Maustaste und wählen Sie
Neu erstellen ... -> HTML-Datei
PHP und MySQL
E INFÜHRUNG
12 / 0
und geben Sie im folgenden Dialogfeld für den Namen der HTML-Datei ein
hallo.html
Klicken Sie nun mit der rechten Maustaste hallo.html und wählen Sie im Kontextmenü den Eintrag
Öffnen mit
und wählen Sie dort Ihren bevorzugten Editor.
Wenn Sie unter Windows das empfohlene pspad benutzen, dann starten Sie diesen Editor, Wählen Sie im
File-Menü
Neu ... -> HTML-Datei hallo.html
Ergänzen Sie den HTML-Text um einen Titel und einen kurzen Begrüßungstext.
Starten Sie einen Web-Browser und wählen Sie unter Linux die URL
http://localhost/~php/hallo.html
und unter Windows die URL
http://localhost/kurs/hallo.html
Sollten Sie eine Fehlermeldung erhalten, prüfen Sie bitte erst einmal nach, ob Ihr Web-Server gestartet ist.
Beim Aufruf unserer html- und php-Dateien werden wir im folgenden nur noch die URL angeben, die unter
Windows verwendet wird, also
http://localhost/kurs/Pfad
Linux-Benutzer sollten darin immer kurs ersetzen durch ~php.
PHP und MySQL
E INFÜHRUNG
13 / 0
Kapitel 2
Erste PHP-Beispiele
2.1 Aufgaben
Aufgabe 2.1 (hallo.php)
Öffnen Sie Ihr “Arbeitsplatz-Fenster”. Wechseln Sie in Ihr Unterverzeichnis kurs, öffnen Sie die Datei
hallo.html
mit Ihrem Editor und speichern Sie diese unter dem neuen Namen
hallo.php
Starten Sie Ihren Web-Browser und wählen Sie die URL
http://localhost/kurs/hallo.php
Die Ausgabe wird die Gleiche sein wie bei der Wahl von hallo.html.
Aufgabe 2.2 (hallo.php)
Ergänzen Sie in Ihrer hallo.php den Text im body folgendermaßen:
<center>
Anzeigen der PHP-Konfiguration
<br/><br/>
<?php
phpinfo();
?>
</center>
Lassen Sie sich die hallo.php erneut in Ihrem Web-Browser anzeigen.
Sehen Sie sich nun den Seiten-Quelltext an: Die Funktion phpinfo hat ganz schön viel HTML-Text
erzeugt!
Damit wir selber ähnlich leistungsfähige Funktionen in PHP schreiben können, müssen wir die Sprachregeln von PHP (die Syntax) und deren Bedeutung kennenlernen. Einige wesentliche Elemente werden Ihnen
im folgenden Abschnitt vorgestellt. Doch zunächst noch eine kleine Aufgabe.
PHP und MySQL
E INFÜHRUNG
14 / 0
Aufgabe 2.3 (hallo.php)
Ergänzen Sie in Ihrer hallo.php den Text im body folgendermaßen:
<center>
Anzeigen der PHP-Konfiguration
<br/><br/>
<?php
echo "Hallo, Kursteilnehmer!<br/>";
echo "So wird die PHP-Konfiguration angezeigt:<br/>";
echo "<br/><br/>";
phpinfo();
?>
</center>
Lassen Sie sich die hallo.php erneut in Ihrem Web-Browser anzeigen.
2.2 Zusammenfassung
Wir können in HTML-Seiten mitttels
<?php
...
?>
PHP-Code einfügen. Wenn unser Web-Server PHP unterstützt, ruft er im Falle von PHP-Dateien vor deren
Auslieferung den PHP-Interpreter auf, der Abschnitte der Form
<?php
...
?>
ersetzt durch den von ihm erzeugten Text. Meist werden dazu Anweisungen der Form
echo "Zeichenkette";
benutzt, die dafür sorgen, dass Zeichenkette in die HTML-Seite geschrieben wird. Jede einfache PHPAnweisung muss durch ein Semikolon abgeschlossen werden. Dies ist der Preis dafür, dass PHP eine formatfreie Programmiersprache ist; d.h.: Zwischen zwei Sprachelemente dürfen beliebig viele Leerzeichen,
Tabulatoren und Zeilentrenner eingefügt werden.
ACHTUNG Sie können PHP-Dateien auch direkt mit einem Web-Browser öffnen,
also mit einer URL vom Typ
file:/....php .
Es wird dann aber der PHP-Teil nicht ausgewertet.
PHP und MySQL
E INFÜHRUNG
15 / 0
Kapitel 3
Zins-Projekt
3.1 Ziel
Ziel dieses kleinen Projekts ist es, ein PHP-Programm zu erstellen, das mit folgendem Formular zur Eingabe
von Werten zum Erstellen einer Zinstabelle auffordert (hier sind schon Beispielwerte eingetragen):
Bild 3.1
Basierend auf dieser Eingabe sollte eine Zinstabelle der folgenden Form erstellt werden:
PHP und MySQL
E INFÜHRUNG
16 / 0
Bild 3.2
Wir legen hier weniger Wert auf das Aussehen, sondern konzentrieren uns auf die Sprache PHP. Bei der
praktischen Umsetzung unserer Beispiele sollten Sie schon versuchen, das optisch ansprechender zu gestalten, etwa durch Farben.
3.2 Vorbereitungen
Legen Sie in Ihrem Kurs-Verzeichnis ein Unterverzeichnis zins an und erstellen Sie dort die folgende
Datei vorlage.php:
PHP und MySQL
E INFÜHRUNG
17 / 0
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!-zinsN.php
-->
<html>
<head>
<title>Zinsberechnung</title>
</head>
<body>
<center>
<h3>Zinstabelle</h3>
<?php
?>
</center>
</body>
</html>
Diese Datei soll als Rahmen und Ausgangspunkt für unser Zins-Projekt dienen. Passen Sie den HTMLKommentar Ihren Vorstellungen an.
Wir wollen unsere Ziele in kleinen Schritten ansteuern, wobei jede Aufgabe in einer eigenen php-Datei
erledigt werden sollte, die aus der vorhergehenden mittels »Speichern unter« erzeugt wird. (Ähnlich sollten
Sie beim Programmieren immer vorgehen!)
Die Lösungen der folgenden Aufgaben finden Sie im beiliegenden Archiv [SOURCE] im Verzeichnis zins
unter den jeweils in Klammern angegebenen Dateinamen.
Aufgabe 3.1 (zins1.php)
Ziel: Eine unformatierte Zinstabelle mit fest vorgegebenen Werten. Das sollte dann ungefähr so aussehen:
Bild 3.3
PHP und MySQL
E INFÜHRUNG
18 / 0
Wir wollen auch dieses erste Ziel in kleinen Schritten ansteuern.
Kopieren Sie vorlage.php nach zins1.php. Ergänzen Sie den PHP-Abschnitt folgendermaßen:
<?php
/*
Kapital unformatiert.
*/
$kapital = 9000.0;
$zinssatz = 4.5;
$laufzeit = 12;
echo "1.Jahr: $kapital EUR <br/>";
?>
Testen Sie dieses Programm.
Zum Verständnis sollten Sie nun in [PHPTUT] die Kapitel
5. Kommentare
http://tut.php-quake.net/de/comments.html
und
6. Variablen
http://tut.php-quake.net/de/variables.html
lesen. Anschließend sollten Sie versuchen, auf der Basis userer echo-Anweisung in einer for-Schleife eine
Tabelle obiger Form zu erzeugen. Konsultieren Sie dazu
[SELFPHP] -> Funktionsreferenz -> Kontroll-Mechanismen -> for
http://www.selfphp.de/funktionsuebersicht/kontroll_mechanismen.php#for
oder (ausführlicher)
[PHPTUT] -> 16.Schleifen
http://tut.php-quake.net/de/loops.html
Aufgabe 3.2 (zins2.php)
Ziel: Das Kapital sollte in der Ausgabe auf zwei Stellen hinter dem Komma gerundet werden, und als
Dezimaltrenner sollte das Komma benutzt werden. Das sollte dann ungefähr so aussehen:
PHP und MySQL
E INFÜHRUNG
19 / 0
Bild 3.4
Benutzen Sie dazu in der echo-Ausgabe eine zusätzliche Variable $fkapital, in der Sie vorher die gewünschte Formatierung von $kapital speichern. Benutzen Sie zur Formatierung die Funktion
number_format .
Zur Verwendung dieser Funktion sollten Sie diese in
[SELFPHP] -> Funtionsreferenz
http://www.selfphp.de/funktionsreferenz/index.php
suchen.
Aufgabe 3.3 (zins3.php)
Erstellen Sie eine neue Version des Zinsprogramms, bei der die Ausgabe als HTML-Tabelle formatiert ist
(ähnlich wie in Bild 3.2, aber ohne DM-Spalte und ohne Farbänderung). Informieren Sie sich über HTMLTabellen in
[SELFHTML] -> tabellen
http://de.selfhtml.org/navigation/html.htm#tabellen
3.3 Parameter mit der GET-Methode übergeben
Eine Zinstabelle mit den immer gleichen Werten ist sicher nicht so sonderlich interessant. Nützlich wird so
etwas erst, wenn die Benutzer die Werte für Kapital, Zinssatz und Laufzeit selbst bestimmen können. Es
werden dazu die Werte von den Benutzern in ein Formular eingegeben und dem Server mit der nächsten
Anfrage übermittelt. Zur Übermittlung werden zwei Methoden verwendet - GET und POST. Wir wollen
uns hier die Standardmethode GET ansehen. Vergleichen Sie dazu
[PHPTUT] -> 23. GET-Variablen
http://tut.php-quake.net/de/get.html
PHP und MySQL
E INFÜHRUNG
20 / 0
Anmerkung
Werte aus Formularen wurden zunächst generell an globale PHP-Variablen übergeben. Dieses Verfahren
war einfach, aber fehlerträchtig und inkonsistent, und es gilt deshalb heute als obsolet. Damit Kompatibilität
gewahrt bleibt, kann es wieder „eingeschaltet“ werden: Es muss dabei in der /etc/php.ini die Option
register_globals = ON
gesetzt werden (Standard ist »register_globals = 0FF«). Veränderungen der php.ini werden erst nach
einem Neustart des ApacheApache übernommen.
Da die PHP-Entwickler aber inzwischen bessere Verfahren zur Verfügung gestellt haben, sollten wir diese
auch nutzen.
Der erste Schritt dabei war, dass die Werte aus Formularen abgelegt werden in globalen Arrays mit den
Namen
$HTTP_GET_VARS bzw. $HTTP_POST_VARS.
Auch die Verwendung dieser Arrays ist inzwischen obsolet.
Heute sollten stattdessen vordefinierte Arrays verwendet werden, die als Superglobal Arrays bezeichnet
werden. Funktionen können auf diese Superglobals zugreifen, ohne sie als global zu deklarieren. Für den
Zugriff auf Werte, die mittels Formularen übergeben werden, stehen die Superglobal Arrays
$_GET und $_POST
zur Verfügung.
Aufgabe 3.4 (zins4.php)
Ziel: Parameterüber mit der GET-Methode kennenlernen.
Ersetzen Sie die Variablendefinitionen
$kapital = 9000.0;
$zinssatz = 4.5;
$laufzeit = 12;
durch
$kapital = $_GET[’kapital’];
$zinssatz = $_GET[’zinssatz’];
$laufzeit = $_GET[’laufzeit’];
Rufen Sie Ihr Programm nun auf mit der URL
http://localhost/kurs/zins/zins4.php?kapital=9000.0\&zinssatz=4.5\&laufzeit=12
Testen Sie auch andere Werte in obiger URL.
PHP und MySQL
E INFÜHRUNG
21 / 0
Aufgabe 3.4a (eingabe.html)
Schreiben Sie in Ihrem zins-Verzeichnis eine HTML-Datei, die ein einfaches Formular für die Eingabe
von Kapital, Zinssatz und Laufzeit erzeugt. Dies könnte etwa so aussehen (auf ordentliche Formatierung
legen wir zunächst keinen Wert):
Bild 3.5
Sehen Sie sich die URL an, die beim Senden des Formulars aufgerufen wird.
Aufgabe 3.4b
Ergänzen Sie nun in Ihrer eingabe.html das einleitende <form>-Tag mit einem action-Attribut, das auf
Ihr letztes Zinsprogramm gerichtet ist, also in der hier verwendeten Nummerierung
<form action=’zins4.php’>
Wenn Sie nun dieses Formular absenden, sollte unsere Zinstabelle mit den von Ihnen eingegebenen Werten
erzeugt werden.
Aufgabe 3.5 (zins5.php)
Ziel: Ein- und Ausgabe sollen in einer einzigen php-Datei formuliert werden.
Anmerkung: Bei größeren PHP-Programmen ist es zwar sinnvoll, diese auf verschiedene Dateien zu verteilen. Das Hauptprogramm sollte aber immer in einer einzigen Datei enthalten sein - sonst werden komplexere
Interaktionen sehr unübersichtlich.
Speichern Sie Ihr letztes Zinsprogramm wieder unter einem neuen Namen, und kopieren Sie das ganze <form>-Element aus eingabe.html an den Beginn des php-Abschnitts. Entfernen Sie das actionAttribut, weil sich nun der GET-Aufruf immer auf die aktuelle php-Datei beziehen soll. Schließen Sie nun
das <form>-Element in eine echo- Anweisung ein, so dass Ihr php-Abschnitt beginnt mit
echo "
<form>
...
</form>
";
PHP und MySQL
E INFÜHRUNG
22 / 0
Wenn Sie dieses Programm ausführen, bekommen Sie evtl. Warnungen, die hier als Notice ausgegeben
werden. Diese weisen Sie darauf hin, dass die Variablen
$kapital, $zinssatz und $laufzeit
erst nach dem Absenden des Formulars definiert sind. Das Arbeiten mit undefinierten Variablen ist in PHP
kein Fehler (anfangs war dies in PHP gang und gäbe), sollte heute aber vermieden werden.
3.4 Ablaufsteuerung von Programmen
Programme arbeiten nicht einfach eine Folge von Befehlen ab, sondern sie können in verschiedenen Situationen ganz unterschiedliche Abläufe realisieren. Einige der dabei verwendeten Mechanismen sollen hier
dargestellt werden.
3.4.1 Kontrollanweisungen
Der Programmablauf beim strukturierten Programmieren wird gesteuert durch Kontrollanweisungen (man
spricht da auch von Kontrollstrukturen oder Kontroll-Mechanismen). Bis jetzt haben wir nur eine einzige
Kontrollanweisung kennengelernt, nämlich die for-Schleife.
Sie sollten sich an dieser Stelle ansehen
[PHPTUT] -> 10. Kontrollstrukturen
http://tut.php-quake.net/de/control.html
[PHPTUT] -> 15. Schleifen
http://tut.php-quake.net/de/loops.html
und
[SELFPHP] -> Funktionsreferenz -> Kontroll-Mechanismen
http://www.selfphp.de/funktionsreferenz/kontroll_mechanismen/index.php
Dort finden Sie alle Kontrollanweisungen, die PHP zur Verfügung stellt. Die wichtigsten sind dabei:
Als bedingte Anweisungen die
if-Anweisung
und die
if-else-Anweisung
und als Wiederholungs- oder Schleifen-Anweisung die
while-Anweisung.
Alle anderen Kontrollanweisungen, die PHP zur Verfügung stellt, dienen nur der Bequemlichkeit: Man
braucht sie nicht unbedingt, aber sie machen manches einfacher.
PHP und MySQL
E INFÜHRUNG
23 / 0
3.4.2 Logische Ausdrücke
Bei der Ablaufsteuerung von Programmen spielen Bedingungen eine entscheidende Rolle. Sie können wahr
oder falsch sein, und sie werden formuliert als logische Ausdrücke.
PHP unterstützt den Datentyp boolean mit den beiden Werten TRUE und FALSE. Beliebige Zahlen und
Zeichenketten dürfen in logischen Ausdrücken verwendet werden. Sie werden dabei automatisch in FALSE
oder TRUE umgewandelt, und zwar nach den folgenden Regeln:
Als FALSE werden bewertet:
Alle Zahlen, die gleich 0 sind.
Alle Zeichenketten, die leer sind (gleich “”), oder die gleich "0" sind.
Alle anderen Werte werden als TRUE gewertet.
Basis aller logischen Ausdrücke sind Vergleiche. Diese werden in ganz natürlicher Weise formuliert und
interpretiert – mit einer (fehlerträchtigen!) Ausnahme:
== fungiert als Gleichheitsoperator.
(das einfache Gleichheitszeichen = ist vergeben als Zuweisungsoperator, und Zuweisung ist etwas ganz
anderes als ein Vergleich). Lesen Sie dazu
[PHPTUT] -> 11. Vergleichsoperatoren
http://tut.php-quake.net/de/compare.html
Logische Verknüpfungen Bei der Bildung logischer Ausdrücke spielen die Verknüpfungen eine entscheidende Rolle. Sie sollten dies nachlesen in
[PHPTUT] -> 12. Logische Verknüpfungen
http://tut.php-quake.net/de/logical.html
PHP unterstützt bei den logischen Verknüpfungen auch die klassische C-Syntax, bei der anstelle von
AND der Operator &&
verwendet wird, und anstelle von
OR der Operator ||
3.4.3 Funktionen
Eine Funktion dient dazu, eine Reihe von Anweisungen, die eine bestimmte Aufgabe erfüllt, unter einem
Namen zusammenzufassen.
Beim Aufruf einer Funktion über ihren Namen wird die Reihe der darunter zusammengefassten Anweisungen ausgeführt, wobei die Ausführung durch die Übergabe von Parametern beeinflußt werden kann.
Eine Funktion kann einen Wert zurückgeben, aber sie muss dies nicht tun: In allen C-ähnlichen Sprachen
wird nicht unterschieden zwischen Funktionen und Prozeduren.
Größere Programme lassen sich nur durch die Verwendung von Funktionen übersichtlich formulieren.
Genaues dazu finden Sie in
[PHPTUT] -> 38. Funktionen
http://tut.php-quake.net/de/function.html
PHP und MySQL
E INFÜHRUNG
24 / 0
Aufgabe 3.6 (zins6.php)
Ziel:
Eingabe und Ausgabe sollen von den Funktionen eingabe und ausgabe erledigt werden. Solange die
Laufzeit nicht definiert oder <= 0 ist, wird die Eingabemaske angezeigt, ansonsten wird die Zinstabelle
ausgegeben.
Speichern Sie zunächst Ihre vorige Version unter einem neuen Namen (hier zins6.php) und arbeiten Sie
mit dieser Kopie weiter.
Umschließen Sie nun die echo-Anweisung, die das Eingabeformular erzeugt, mit
function eingabe()
{
...
}
und umschließen Sie den „Rest“, der die Ausgabetabelle erzeugt, mit
function ausgabe($kapital, $zinssatz, $laufzeit)
{
...
}
Jetzt haben Sie ein PHP-Programm, das nichts tut: Funktionsdefinitionen stellen nur ein »Werkzeug« zur
Verfügung, führen selber aber noch nichts aus. Deshalb brauchen wir nun ein Hauptprogramm, das unsere
Funktionen in der gewünschten Weise abruft.
Fügen Sie deshalb am Anfang Ihres PHP-Teils folgendes ein:
/*** Hauptprogramm ***/
if (isset($_GET[’laufzeit’]) AND $_GET[’laufzeit’] > 0)
ausgabe($_GET[’kapital’], $_GET[’zinssatz’], $_GET[’laufzeit’]);
else
eingabe();
/* Ende Hauptprogramm */
Anmerkung
Früher mussten PHP-Funktionen schon vor ihrem ersten Aufruf definiert sein. Deswegen konnte ein Hauptprogramm der hier verwendeten Art erst am Schluss des PHP-Teils eingesetzt werden. Inzwischen ist dies
glücklicherweise anders. Eine Programm-Code wird einfach übersichtlicher, wenn das Hauptprogramm als
»Ablaufplan« am Anfang steht.
Testen Sie Ihr Programm - wir sollten im Wesentlichen unser eingangs formuliertes Ziel erreicht haben.
Die Funktion isset sollte bei sauberer PHP-Programmierung immer eingesetzt werden, bevor man eine
Variable benutzt, die nicht im Programm selbst definiert ist. Vergleichen Sie dazu
[SELFPHP] -> Variablen-Funktionen -> isset
http://www.selfphp.de/funktionsreferenz/variablen_funktionen/isset.php
PHP und MySQL
E INFÜHRUNG
25 / 0
Aufgabe 3.7 (zins7.php)
Ziel: Ordentliche Formatierung der Eingabemaske, damit dies ungefähr so aussieht wie in Bild 3.1.
Dazu muss nur in der Funktion eingabe die Eingabemaske als HTML-Tabelle formuliert werden.
Aufgabe 3.8 (zins8.php)
Ziel: Konstanten kennen lernen - zusätzliche Spalte mit den „alten“ DM-Werten anfügen.
Das Einfügen einer Spalte mit den DM-Werten stellt sicher keine Schwierigkeit mehr dar. Wir wollen hier
vor allem den Gebrauch von Konstanten kennen lernen. Der Umrechnungskurs EUR -> DM bietet sich
dazu an. Informieren Sie sich in
[PHPTUT] -> 21. Konstanten
http://tut.php-quake.net/de/constants.html
Aufgabe 3.9 (zins9.php)
Ziel: Zins soll nicht mehr eingegeben werden, sondern sich an der Laufzeit orientieren. Etwa:
Laufzeit < 4
Laufzeit < 8
andernfalls
2.5 %
3.5 %
4.0 %
Aufgabe 3.10 (zins10.php)
Ziel: Statt der Laufzeit soll das gewünschte Endkapital eingegeben werden, das natürlich größer als das
(Anfangs-)Kapital sein soll. Nachdem die Zinstabelle hier unerwünscht lang werden kann, soll ihre Länge
durch eine Konstante MAX_JAHRE beschränkt werden.
PHP und MySQL
E INFÜHRUNG
26 / 0
Kapitel 4
Lesen von Text-Dateien
4.1 Zu den Zielen und Beispieldateien
Wir wollen uns in diesem Kapitel ansehen, wie der Inhalt einer Textdatei mittels PHP in eine HTML-Seite
eingelesen werden kann. Wir benützen dabei die Linux-Datei passwd, deren Zeilen Datensätze darstellen,
deren einzelne Felder durch jeweils einen Doppelpunkt getrennt sind.
Im ersten Schritt sollte das dann ungefähr so aussehen (die Ausgabe ist wesentlich verkürzt):
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:Daemon:/sbin:/bin/bash
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
In einem zweiten Schritt wollen wir diese Datei als übersichtliche Tabelle formatiert ausgeben: Das sollte
dann ungefähr so aussehen (die Tabelle ist wesentlich verkürzt):
Bild 5.1
Die bei den Aufgaben genannten Beispiel-Dateien finden Sie in [SOURCE] -> dateien.
Anmerkung: Die UNIX-Benutzerverwaltung ist in einer Text-Datenbank untergebracht. Die Datei passwd
stellt dabei eine Tabelle dar, und die Darstellung solcher Text-Dateien hat viel Ähnlichkeit mit der Darstellung von Datenbank-Abfragen. Insofern stellen die hier betrachteten einfachen Beispiele schon eine
Vorbereitung auf das Arbeiten mit Datenbanken dar.
PHP und MySQL
E INFÜHRUNG
27 / 0
Aufgabe 5.1 (lies1.php)
Kopieren Sie die Datei /etc/passwd in Ihr Arbeitsverzeichnis.
Für die Arbeit unter Windows: Sie finden eine passwd-Datei auch in [SOURCE] -> dateien.
Schreiben Sie den folgenden kurzen Text in eine Datei
lies1.php:
<html>
<head>
<title>passwd lesen</title>
</head>
<body>
<?php
/*
* Gibt Inhalt der passwd-Datei aus.
*/
$dateiname = "passwd";
$datei = fopen($dateiname, "r");
if (!$datei)
die("<h4>Datei $dateiname konnte nicht geoeffnet werden.</h4>");
while ($zeile = fgets($datei, 256))
echo "$zeile<br>";
fclose($datei);
?>
</body>
</html>
Testen Sie Ihr Programm lies1.php, und versuchen Sie es zu verstehen. Lesen Sie über die verwendeten
Funktionen nach in
[SELFPHP] -> Funktionsreferenz -> Dateisystem-Funktionen.
http://www.selfphp.de/funktionsreferenz/dateisystem_funktionen/index.php
4.2 Öffnen und Schließen von Dateien
Jeder Prozess verwaltet eine Datei-Liste für die von ihm geöffneten Dateien. Jeder Eintrag in dieser Liste hat
Platz für alle Informationen, die das Betriebssystem über eine Datei gespeichert hat, und für einen Zeiger
auf einen Datei-Puffer: das ist ein Speicherbereich, der für die Arbeit mit der jeweiligen Datei reserviert
ist. Beim Lesen aus der Datei werden die gelesenen Daten im Datei-Puffer zwischengespeichert, beim
Schreiben die zu schreibenden Daten.
Öffnen einer Datei
Wenn auf die gewünschte Datei in der gewünschten Weise (i.w. Lesen oder Schreiben/Anhängen) zugegriffen werden kann, wird ein Datei-Puffer reserviert und ein entsprechender Eintrag in der oben beschriebenen
PHP und MySQL
E INFÜHRUNG
28 / 0
Datei-Liste gemacht. Die zum Öffnen benutzte Funktion (hier fopen) gibt eine Ganzzahl > 0 zurück, die
den Listeneintrag kennzeichnet. Diese Zahl wird mit verschiedenen Namen belegt. Im Englischen spricht
man u.a. vom „File Handle“, vom „File Identifier“ oder vom „File Pointer“, im Deutschen oft vom „DateiHandle“ oder vom „Datei-Zeiger“. Im Weiteren greift der Prozess nur noch über dieses Datei-Handle auf
die geöffnete Datei zu.
Wenn auf die gewünschte Datei nicht in der gewünschten Weise zugegriffen werden kann (sei es, dass die
Datei überhaupt nicht existiert, oder dass wir nicht die gewünschten Zugriffsrechte besitzen), dann gibt die
Funktion fopen die Zahl 0 zurück (die hier ja auch als „falsch“ interpretiert wird).
Schließen einer Datei
Wenn die Datei zum Schreiben geöffnet ist, werden zunächst alle noch nicht geschriebenen Puffer-Inhalte
in die Datei geschrieben. Dann werden der Puffer-Speicher und der Eintrag in der Datei-Liste zum Überschreiben freigegeben.
Aufgabe 5.2 (lies2.php)
Ziel: Ausgabe der Datei passwd als Tabelle, die ungefähr so aussieht wie in Bild 5.1.
Speichern Sie dazu lies1.php unter einem neuen Namen. Realisieren Sie unser Ziel in folgenden Schritten:
Schritt 1: Erweitern Sie das Programm so, dass jede $zeile als Zeile einer Tabelle mit einer einzigen Spalte
ausgegeben wird.
Schritt 2:
Es müssen nun noch die Zeilen in Felder zerlegt werden, was technisch darauf hinausläuft, jeden Doppelpunkt zu ersetzen durch die Zeichenkette
</td><td>
Dies lässt sich mit verschiedenen PHP-Funktionen erledigen. Mein Vorschlag ist orientiert an der Arbeit
mit Datenbanken, bei der die abgefragten Datensätze oft als Arrays geliefert werden, wobei die Felder der
Datensätze in korrespondierenden Elementen der Arrays abgelegt werden. Benutzen Sie die Funktion
explode
dazu, einer Array-Variable $felder die durch Doppelpunkt getrennten Felder aus $zeile zuzuweisen, und
benutzen Sie dann die Funktion
implode
zur Erzeugung einer Zeichenkette mit den gewünschten Trennern. Lesen Sie die Beschreibung dieser Funktionen nach in
[SELFPHP] -> Funktionsreferenz -> String-Funktionen
http://www.selfphp.de/funktionsreferenz/string_funktionen/index.php
Schritt 3: Setzen Sie die Spaltenüberschriften ganz einfach mit einer oder mehreren echo-Anweisungen.
Vergleichen Sie auch hier die in
[SOURCE] -> dateien/lies2.php
gewählte Lösung.
PHP und MySQL
E INFÜHRUNG
29 / 0
Kapitel 5
Datenbanken (allgemein)
5.1 Datenbank-Management-Systeme
Ein Datenbank-Management-System (DBMS) ist ein Softwarepaket, das Daten in einem Computersystem
so verwaltet, dass diese Daten von verschiedenen Anwendungen genutzt werden können.
Anmerkung: Die Rechtschreibprüfung einer Textverarbeitung z.B. ist kein DBMS: sie verwaltet zwar Daten (Wörter, Regeln etc.), aber diese Daten können unmittelbar nur von dieser Textverarbeitung genutzt
werden.
Häufig wird statt Datenbank-Managment-System einfach von einem Datenbank-System gesprochen.
Eine Datenbank ist eine Sammlung von zusammengehörenden Daten, die von einem DBMS verwaltet wird.
Das DBMS verwaltet die Daten intern in Dateien, auf die von außen, also von Benutzern und anderen Programmen, nicht direkt zugegriffen werden darf. Zur Arbeit mit den Datenbanken stellt das DBMS Werkzeuge zur Verfügung.
Anwender, die mit Datenbanken arbeiten, benutzen in der Regel nicht direkt die vom DBMS zur Verfügung
gestellten Werkzeuge, sondern Programme, die mit dem DBMS kommunizieren, dessen Werkzeuge nutzen
und auf die speziellen Bedürfnisse der Anwender zugeschnitten sind.
5.2 Realisierungen
5.2.1 Dektop-Datenbank-Systeme
Das DBMS arbeitet auf dem Arbeitsplatzrechner. Auf nicht-vernetzten Rechnern ist dies die einzige Möglichkeit. Auch heute gehören die viele im PC-Bereich verwendeten DBMS zu dieser Kategorie (DBase,
FoxPro, Access, Paradox, . . . ). Dabei unterscheiden wir nochmal zwei Typen:
Stand-Alone-Datenbank-Systeme
Dies sind Desktop-Datenbank-Systeme, auf deren Datenbanken immer nur ein Anwender mit einer einzigen
Anwendung zugreifen kann. Die ersten auf PC’s realisierten Datenbank-Systeme gehörten natürlich zu
diesem Typ.
PHP und MySQL
E INFÜHRUNG
30 / 0
File-Share-Datenbank-Systeme
Dies sind Desktop-Datenbank-Systeme, auf deren Datenbanken mit mehreren Anwendungen (und im Netz
auch von verschiedenen Rechnern) gleichzeitig zugegriffen werden kann. Dabei werden die von einer
Anwendung gerade bearbeiteten Dateien oder Datensätze für andere gesperrt (File Locking bzw. Record
Locking). Die wichtigsten der im PC-Bereich eingeführten DBMS, die ursprünglich nur als Stand-AloneDatenbank-Systeme arbeiten konnten, sind heute netzwerkfähig, d.h.: sie können auch als File-Share-Datenbank-Systeme genutzt werden.
5.2.2 Client-Server-Datenbank-Systeme
Das DBMS arbeitet auf einem Server. Auf den Arbeitsstationen laufen nur Client-Programme, die dem
Server Befehle übermitteln und mit ihm Daten austauschen. Dies bringt u. a. folgende Vorteile:
Sicherheit und Zuverlässigkeit: Clients können nicht direkt auf die Daten zugreifen. Server kann eigene
Benutzerrechte verwalten.
Netzwerkbelastung: Gering, da nur Befehle und Ergebnisse übermittelt werden.
Die meisten der heute professionell genutzten Datenbank-Systeme sind als Client-Server-System realisiert
(DB2, Oracle, Informix, MS-SQL-Server, Sybase, MySQL, PostgreSQL, . . . ).
5.3 Relationale Datenbanken
Ein Relationales Datenbank-Management-System (RDBMS) ist ein DBMS, das Daten in Tabellen (Relationen) verwaltet und dabei ein mathematisches Regelsystem verwendet, dessen Entwicklung auf Überlegungen von E.F. Codd basiert, die er erstmals 1970 in dem Artikel „A Relational Model of Data for Large
Shared Data Banks“ veröffentlicht hat.
Eine relationale Datenbank ist eine Sammlung von Daten, die von einem RDBMS verwaltet werden.
Statt von einem Relationen Datenbank-Management-System wird häufig einfach von einem Relationalen
Datenbank-System gesprochen, und das Folgende bezieht sich immer auf diese Systeme.
5.3.1 Tabellen
Eine Tabelle besteht aus einer festen Anzahl von Spalten (Attributen) und einer variablen Zahl von Zeilen (Datensätzen). Spalten besitzen Namen und Wertebereiche, die Anzahl der Spalten wird als Degree
bezeichnet. Der Wertebereich eines Attributs wird auch als seine Domäne bezeichnet und entspricht in
herkömmlichen Programmiersprachen dem Datentyp. Jeder Datensatz wird durch die Spalten aufgeteilt in
einzelne Bestandteile, die als Datenfelder bezeichnet werden.
Die Struktur einer Tabelle wird durch ihre Spalten bestimmt und kann nach der Definition nicht mehr
verändert werden. Die Zahl der Zeilen einer Tabelle wird als Kardinalität bezeichnet. Diese Zahl wird sich
i. a. verändern und kann auch geich 0 sein, wenn die Tabelle leer ist.
Eine Tabelle muss zusätzlich den folgenden Forderungen genügen:
Keine doppelten Datensätze; d.h. es darf nie zwei verschiedene Zeilen in einer Tabelle geben, deren
Attribute alle den gleichen Wert haben.
PHP und MySQL
E INFÜHRUNG
31 / 0
Eine Reihenfolge der Datensätze ist nicht definiert; auf Zeilen kann nicht über Zeilennummern zugegriffen werden, sondern nur durch Suchen nach Inhalten, insbesondere über Schlüssel (s.u.).
Attributwerte sind atomar; d.h. sie lassen sich nicht weiter in verschiedene sinnvolle Bestandteile zerle-
gen (ein „Familenname“ ist atomar, ein Attribut „Name“ bestehend aus „Vorname“ und „Familienname“
ist nicht atomar).
5.3.2 NULL-Werte
In einer Datenbank kann es vorkommen, dass ein Wert nicht bekannt ist. In relationalen Datenbanken wird
dann der Wert NULL verwendet, der nichts mit der Zahl 0 zu tun hat.
5.3.3 Schlüssel
Wir werden hier nicht allgemeine Schlüssel, sondern nur speziell Schlüssel-Attribute betrachten. Unter dieser Einschränkung wird dann definiert: Ein Schlüssel ist ein Attribut, dessen Werte immer eindeutig sind;
d.h. es gibt nie zwei verschiedene Zeilen mit dem gleichen Schlüsselwert. Oft werden Attribute nur zu dem
Zweck eingeführt, als Schlüssel zu dienen: Artikel-Nummern, Kunden-Nummern etc. .
In jeder Tabelle muss genau ein Schlüssel als Primär-Schlüssel (Primary Key) ausgezeichnet werden. Ein
Primary Key darf keine NULL-Werte enthalten.
5.3.4 Werkzeuge
Das RDBMS stellt Werkzeuge zur Verfügung, um
neue (leere) Tabellen zu definieren,
Dateinsätze zu dieser Tabelle hinzuzufügen,
Daten in bestehenden Tabellen zu suchen,
einzelne Datenfelder zu ändern,
Datensätze zu löschen,
Tabellen komplett aus der Datenbank zu entfernen.
5.4 SQL
Um die Werkzeuge eines Datenbanksystems nutzen zu können, benötigt man Sprachen, über die das DBMS
angesprochen werden kann. Die dazu seit Jahren meist verwendete Sprache ist SQL (Structured Query
Language oder auch Standard Query Language, heute ein eigenständiger Begriff).
SQL ist besonders auf RDBMS zugeschnitten. Diese Sprache entstand aus einem Forschungsprojekt, das
Anfang der siebziger Jahre bei IBM begonnen wurde und das u.a. zum bekannten Datenbanksystem DB2
führte. Inzwischen bieten fast alle Datenbank-Hersteller SQL-Schnittstellen für ihre Datenbanksysteme an.
Während Programmiersprachen wie PASCAL, C, C++, Java etc. als Programmiersprachen der 3. Generation bezeichnet werden, ist SQL eine Programmiersprache der 4. Generation. Dies heißt nicht, dass SQL
PHP und MySQL
E INFÜHRUNG
32 / 0
moderner oder besser als die vorher genannten Sprachen ist, sondern: Sprachen der 3. Generation beschreiben, wie etwas gemacht werden soll, Sprachen der 4. Generation beschreiben nur noch, was gemacht werden
soll.
Angesichts der zunehmenden Verbreitung von SQL bemühte man sich um Standardisierung. 1986 wurde
ein erster ANSI-Standard SQL86 verabschiedet, der 1989 in einer leicht erweiterten Form auch als ISOStandard übernommen wurde. Dieser Sprachstandard wird als SQL-1 bezeichnet. Eine wesentliche Erweiterung dieses Sprachstandards wurde Anfang der 90er Jahre veröffentlicht und wird als SQL92 oder SQL-2
bezeichnet. 1999 wurde die neueste Standardisierung verabschiedet, die als SQL99 oder SQL-3 bezeichnet
wird.
PHP und MySQL
E INFÜHRUNG
33 / 0
Kapitel 6
MySQL
6.1 Freie Datenbanksysteme
Im Open-Source-Bereich gibt es inzwischen verschiedene leistungsfähige Datenbanksysteme. Die Zeitschrift iX enthält in der Ausgabe vom Februar 2004 einen interessanten Artikel, in dem die folgenden vier
Systeme verglichen werden:
Firebird, der freie Nachfolger von Borlands Interbase.
MaxDB, das inzwischen freie SAP-Datenbanksystem.
MySQL, das „Internet-Datenbanksystem“.
PostgreSQL, das an der Universität Berkley entstand.
MaxDB wird genau wie MySQL von der schwedischen Firma MySQL AB weiterentwickelt.
Alle diese Datenbanksysteme können direkt oder über Treiber von PHP aus angesprochen werden – genauso
wie die meisten der gängigen kommerziellen Systeme. Wenn wir uns hier speziell mit MySQL beschäftigen,
dann deswegen, weil dieses Datenbanksystem im Bereich der Web-Programmierung derzeit wohl die größte
Verbreitung hat. Persönlich schätze ich PostgreSQL mehr.
6.2 Zur Einführung in MySQL
Wenn Sie mit MySQL vertraut werden wollen, empfiehlt es sich, zunächst einmal
[MYSQL] -> 3 Einführung in MySQL: Ein MySQL-Tutorial
http://dev.mysql.com/doc/refman/5.1/de/tutorial.html
durchzuarbeiten. Die Administration des Systems wird ausführlich dargestellt in
[MYSQL] -> 5 MySQL-Datenbankverwaltung
http://dev.mysql.com/doc/refman/5.1/de/database-administration.html
Wir brauchen hier nur sehr wenig von diesem Wissen, sollten uns aber darüber im Klaren sein, dass wir
in MySQL nur ein wenig “hineinschnuppern”. Zum Thema SQL sollten Sie sich auf jeden Fall den kurzen
Artikel [SQLEINF] ansehen, der eine schöne Einführung in dieses komplexe Gebiet bietet.
PHP und MySQL
E INFÜHRUNG
34 / 0
6.2.1 Programme zur Administration von MySQL
Wie alle mir bekannten SQL-fähigen Datenbanksysteme stellt auch MySQL einen Kommandozeilen-Client
zur Verfügung, der einfach als mysql aufgerufen wird. Für ProgrammiererInnen ist dies das geeignetste
Werkzeug, weil in Programmen die Befehle für MySQL genauso formuliert werden wie auf dieser Kommandozeile.
Es gibt natürlich auch (inzwischen recht viele) grafische Verwaltungswerkzeuge. Ich möchte nur auf
phpMyAdmin
verweisen, das über
http://www.mysql.com
erhältlich ist, den meisten modernen Linux-Distributionen beiliegt und auch im Paket XAMPP enthalten
ist.
Wir wollen hier nur den Kommandozeilen-Client mysql betrachten. Wenn der MySQL-Server beim Booten
nicht automatisch gestartet wurde und XAMPP installiert wurde, müssen wir ihn mit dem »XAMPP Control
Panel« starten.
6.2.2 Starten des Kommandozeilen-Client
Linux
Starten Sie eine Konsole (ein Terminalprogramm) und rufen Sie am Prompt
mysql -u root
auf.
Windows
Starten Sie die Eingabeaufforderung cmd.exe. Klicken Sie mit der rechten Maustaste auf die obere Fensterleiste und wählen Sie im Kontextmenü Eigenschaften. Konfigurieren Sie das Fenster entsprechend Ihren
Vorstellungen. Setzen Sie insbesondere unter Layout die (maximale) Fenstergröße so, daß fast der ganze Bildschirm ausgefüllt wird. Beim Speichern wählen Sie die Option Einstellungen für alle Fenster dieses
Typs übernehmen. Wechseln Sie nun mittels cd in Ihr xampp-Verzeichnis, und dann in das Unterverzeichnis
mysql\bin. Jetzt können Sie (endlich) auch den Befehl
mysql -u root
eingeben. Damit der Aufruf in Zukunft einfacher wird, können Sie natürlich Ihr mysql\bin-Verzeichnis
in den Pfad aufnehmen oder eine Batch-Datei schreiben oder auf dem Desktop passende Verknüpfungen
anlegen.
PHP und MySQL
E INFÜHRUNG
35 / 0
6.2.3
MySQL-Benutzerverwaltung
MySQL hat eine eigene Benutzerverwaltung, die mit der Benutzerverwaltung des zugrunde liegenden Betriebssystems nichts zu tun hat. Nach der Installation ist unter MySQL der Benutzer
root@localhost
eingetragen und hat alle Rechte zur Verwaltung des MySQL-Servers. Mit dem Vorgehen im letzten Abschnitt haben Sie sich mit dieser Benutzerkennung eingeloggt, und Sie sollten sich nun am MySQL-Prompt
mysql>
befinden.
Setzen des root-Passworts
Damit Ihr MySQL-Server vor unberechtigten Zugriffen geschützt ist, sollten Sie nun sofort den root-Zugang
mit einem Passwort absichern. Wir wählen hier das Passwort mysqlRoot. Geben Sie dazu am MySQLPrompt Folgendes ein:
mysql> SET PASSWORD = PASSWORD(’mysqlRoot’);
Es sollte daraufhin eine Meldung der Form
Query OK, 0 rows affected (0.05 sec)
erscheinen.
Das zweimalige Auftreten von PASSWORD mag verwundern: PASSWORD(’mysqlRoot’) ist ein Funktionsaufruf, der als Ergebnis die Verschlüsselung von mysqlRoot liefert.
Loggen Sie sich nun aus mit
mysql> exit
oder
mysql> quit
Wenn Sie sich nun erneut mit
mysql -u root
in MySQL einloggen wollen, wird Ihnen der Zugriff verweigert. Um Ihr Passwort eingeben zu können,
müssen Sie nun
mysql -u root -p
aufrufen und an der der dann erscheinenden Eingabeaufforderung
Enter password:
PHP und MySQL
E INFÜHRUNG
36 / 0
Ihr Passwort eingeben.
Zum Aufruf von mysql: Es gibt da wieder viele Optionen. Meist ausreichend ist die Form
mysql [-h host] [-u user] [-p]
Genaueres finden Sie in
[MYSQL] -> 3.1 Verbindung zum Server herstellen und trennen
http://dev.mysql.com/doc/refman/5.1/de/connecting-disconnecting.html
Anmerkungen zur MySQL-Kommandozeile:
Die Eingabe von
mysql> ?
liefert eine Hilfetafel mit den internen Befehlen der MySQL-Kommandozeile. Wichtig ist da noch, wie wir
einen Befehl verlassen können, wenn wir uns “verhakt” haben, nämlich mit \c . Wenn dies nicht sofort
klappt, haben Sie wahrscheinlich Anführungszeichen nicht geschlossen. Erledigen Sie das vorher.
Bei Befehlen wird, wie allgemein in SQL, nicht zwischen Klein- und Großschreibung unterschieden. Bei
den Namen von Datenbanken und Tabellen sollten wir davon ausgehen, dass zwischen Klein- und Großschreibung unterschieden wird (ist abhängig vom Betriebssystem). Bei Benutzernamen und Passwörtern
wird zwischen Klein- und Großschreibung unterschieden.
Befehle dürfen i. allg. auf mehrere Zeilen verteilt werden. Solange der Befehl noch nicht beendet ist, werden
weitere Eingaben angefordert durch einen Sekundär-Prompt der Gestalt ->. Abgeschlossen werden Befehle
durch ein Semikolon. (Dieses abschließende Semikolon ist nicht Bestandteil der SQL-Anweisung, sondern
nur Trennzeichen auf der MySQL-Kommandozeile. Es ist auch dort nicht immer notwendig, aber es schadet
nie.)
mysql „merkt“ sich die eingegeben Befehle in einer Liste, in der Sie sich mit den Tasten Pfeil nach oben
und Pfeil nach unten bewegen können.
Anlegen eines Benutzers
Ziel: Es soll ein Benutzer php angelegt werden, der zur Arbeit in MySQL alle Rechte hat, der selber aber
keine Rechte vergeben darf. Er soll das Passwort Linux haben.
Starten Sie dazu den MySQL-Client als root, und geben Sie dann die folgenden Befehle ein:
mysql> GRANT ALL ON *.* TO php@localhost;
mysql> SET PASSWORD FOR php@localhost = PASSWORD(’Linux’);
Im Weiteren wollen wir uns immer als Benutzer php in mysql einloggen. Falls wir in unserem Betriebssystem als Benutzer php eingeloggt sind, genügt der Befehl
mysql -p
PHP und MySQL
E INFÜHRUNG
37 / 0
falls wir unter einem anderen Namen eingeloggt sind, verwenden wir
mysql -u php -p
Der MySQL-Client kann alle in einer Sitzung eingegebenen Befehle und deren Ausgaben in einer Datei
speichern. Dies hilft nicht nur beim Lernen, sondern auch bei der Administration (wir können verfolgen,
was wir so alles gemacht haben). Geben Sie dazu am MySQL-Prompt den Befehl
tee Dateiname
ein.
6.3 Aufgaben
Aufgabe 6.1
a. Legen Sie eine Datenbank mit dem Namen inet an.
b. Legen Sie in der Datenbank inet eine Tabelle mit dem Namen adressen an. Diese Tabelle soll nur die
folgenden beiden Spalten haben:
name mit maximal 30 Zeichen
email mit maximal 60 Zeichen
Die Spalte email soll als Primär-Schlüssel dienen.
Anmerkung: name soll immer einen Familiennamen und email eine zugehörige E-Mail-Adresse aufnehmen. In der Praxis wird man in eine solche Tabelle sicher mehr Spalten aufnehmen (wenigstens noch eine
Spalte für den Vornamen). Uns geht es hier nur um das Prinzip, und dabei sollen die Situation möglichst
übersichtlich und der Schreibaufwand möglichst klein gehalten werden.
Aufgabe 6.2
Fügen Sie in die Tabelle adressen ein paar Datensätze ein, und lassen Sie sich den Inhalt der Tabelle anzeigen.
6.4 Lösungen der Aufgaben
Lösung 6.1
a.
b.
mysql> CREATE DATABASE inet;
mysql> USE inet;
mysql> CREATE TABLE adressen (
-> name VARCHAR(30),
-> email VARCHAR(60) NOT NULL,
-> PRIMARY KEY (email)
-> );
PHP und MySQL
E INFÜHRUNG
38 / 0
Lösung 6.2
Zum Beispiel:
mysql> USE inet;
mysql> INSERT INTO adressen
-> VALUES(’maier’, ’[email protected]’);
PHP und MySQL
E INFÜHRUNG
39 / 0
Kapitel 7
PHP und MySQL
7.1 Die wesentlichen Operationen
Wenn wir mit einer Programmiersprache auf ein Datenbanksystem zugreifen wollen, das SQL “versteht”,
müssen wir wissen, wie sich die folgenden Aufgaben erledigen lassen:
1. Verbindung zu einer Datenbank aufnehmen.
2. SQL-Anweisungen übermitteln.
3. Abfrageergebnisse engegennehmen.
4. Verbindung zur Datenbank schließen.
PHP stellt zur Arbeit mit MySQL viele Funktionen zur Verfügung; siehe
[SELFPHP] -> Funktionsreferenz -> MySQL-Funktionen .
http://www.selfphp.de/funktionsreferenz/mysql_funktionen/index.php
Die oben genannten Aufgaben (und damit fast alle Arbeiten im Zusammenhang mit MySQL) lassen sich
mit wenigen Funktionen erledigen:
Zu 1.: Benutzt werden die Funktionen mysql_connect und mysql_select_db.
Die Funkfion mysql_connect gibt immer eine Ganzzahl zurück. Wenn die Verbindung nicht hergestellt
werden konnte, ist diese Rückgabe gleich 0 (FALSE). Im Erfolgsfalle ist diese Rückgabe > 0 und wird
als Verbindungs-Kennung bezeichnet. Die restlichen der hier verwendeten MySQL-Funktionen brauchen
diese Verbindungs-Kennung als Argument, weil eine geöffnete Verbindung nur noch über ihre Kennung
identifiziert wird. Man beachte die Analogie zur Arbeit mit Dateien.
Zu 2.: Benutzt wird die mysql_query. Diese gibt 0 (FALSE) zurück, wenn bei der Befehlsausführung
ein Fehler aufgetreten ist, ansonsten eine Ganzzahl > 0.
Zu 3.: Wenn mysql_query einen SELECT-Befehl übermittelte, der erfolgreich ausgeführt werden konnte, ist die positive Ganzzahl, die zurückgegeben wird, eine Ergebnis-Kennung. Ausgehend von dieser ErgebnisKennung können die Ergebnis-Zeilen ganz analog zu den Zeilen einer Textdatei gelesen werden. Wir benutzen zum Lesen die Funktion mysql_fetch_row, die jede gelesene Zeile (jeden „Datensatz“) als Array
zurückgibt. Wenn nichts mehr gelesen werden konnte, wird FALSE zurückgegeben.
Zu 4.: Die Funktion mysql_close schließt die Verbindung, deren Kennung als Argument übergeben
wird.
PHP und MySQL
E INFÜHRUNG
40 / 0
7.2 Die mitgelieferten Beispiele
Alle Beispiele zu diesem Kapitel finden Sie in
[SOURCE] -> iadressen .
Dabei ist mysql.php als kleine „Bibliotheks-Datei“ gedacht, die einige nützliche Funktionen zur Verfügung stellt. Wenn diese Funktionen in einer PHP-Datei benützt werden sollen, braucht diese Datei nur
mittels
include "mysql.php"
eingebunden werden.
Die restlichen Beispiele arbeiten mit der Datenbank inet und der Tabelle adressen, die wir im vergangenen
Kapitel angelegt haben.
Die wenigen SQL-Befehle, die wir hier benützen, finden Sie fast alle in [SQLEINF].
TIPP
Wenn Sie mit Programmen auf MySQL zugreifen, sollten Sie immer in einem Fenster (unter Linux am
besten in einer eigenen Arbeitsfläche) den MySQL-Client mysql laufen lassen, damit Sie die Wirkung Ihrer
Programme sofort überprüfen können. Außerdem können Sie so beim Programmieren die SQL-Befehle,
die das Programm absetzen soll, erst einmal direkt auf der MySQL-Kommandozeile ausprobieren.
Aufgabe 7.1
tabelle.php füllt die Tabelle adressen mit „zufällig“ gebildeten Datensätzen.
Testen Sie das Programm tabelle.php. Warum kommen dabei Warnungen
Datensatz konnte nicht eingefuegt werden.
wobei diese Warnungen umso öfter auftreten, je mehr Datensätze Sie mit tabelle.php schon eingefügt
haben?
Aufgabe 7.2
Mit welchem SQL-Befehl lassen sich alle Datensätze aus der Tabelle adressen löschen? (Es soll nicht die
ganze Tabelle gelöscht werden!)
Anmerkung: Sollten Sie dabei doch die ganze Tabelle adressen löschen, ist dies kein Problem: Wenn die
Tabelle adressen nicht existiert, wird sie von tabelle.php neu angelegt. Nur die Datenbank inet muss bei der
Ausführung dieses Programms existieren.
PHP und MySQL
E INFÜHRUNG
41 / 0
Aufgabe 7.3
a. Mit welchem SQL-Befehl lassen sich alle Datensätze aus der Tabelle adressen anzeigen, deren EMail-Adresse die Endung edu hat?
b. Speichern Sie tabelle.php unter einem neuen PHP-Namen. Modifizieren Sie diese Datei so, dass
am Schluss nur die Datensätze angezeigt werden, deren E-Mail-Adresse die Endung edu hat.
Aufgabe 7.4
Mit dem Programm tabelle.php können Sie leicht größere Tabellen erzeugen, anhand derer Sie einfache SELECT- und DELETE-Befehle üben können.
Speichern Sie tabelle.php unter neuen PHP-Namen und modifizieren Sie in diesen Kopien die Arrays
$names, $domains und $roots,
indem Sie etwa weitere Möglichkeiten einfügen. Diese modifizierten Programme sollten ohne weitere Änderungen funktionieren.
Versuchen Sie, zu verstehen, warum sich tabelle.php so einfach modifizieren lässt.
Machen Sie sich klar, wie wichtig es ist, Programme so zu schreiben, dass sie sich einfach modifizieren
lassen.
Aufgaben zu inet.php
In den folgenden Aufgaben wollen wir Operationen, die das Programm inet.php zur Verfügung stellt,
als eigenständige Programme realisieren.
Aufgabe 7.5
Ziel: Datensätze in die Tabelle adressen mit einer Eingabemaske eingeben.
Benutzen Sie dabei die Datei tabelle_ein0.php als Vorlage.
Aufgabe 7.6
Ziel: Datensätze in der Tabelle adressen suchen, wobei das Suchmuster mit einer Eingabemaske eingegeben
wird.
Benutzen Sie dabei die Datei tabelle_suche0.php als Vorlage.
Aufgabe 7.7
Modifizieren Sie in einer Kopie von mysql.php die Funktion zeige so, dass vor der Ausgabe jedes
Datensatzes eine checkbox angezeigt wird. Konsultieren Sie dazu
[SELFHTML]
und
[SOURCE] -> formulare/formular_demo.php .
PHP und MySQL
E INFÜHRUNG
42 / 0
Aufgabe 7.8
Ziel: Datensätze aus der Tabelle adressen durch Anklicken entsprechender Checkboxen löschen.
Benutzen Sie dabei die Datei tabelle_loesche0.php als Vorlage.
7.3 Session-Verwaltung
Sie sollten nun zunächst das etwas umfangreichere Programm inet.php ausprobieren. Es werden dabei
zunächst einfach Methoden kombiniert, die wir alle schon kennengelernt haben.
Vor dem doch schon recht großem Umfang dieses Programms sollten Sie nicht erschrecken. Sie haben
gelernt: Wenn man dies alles schrittweise aufbaut und jede Aufgabe einer eigenen Funktion zuweist, entwickelt sich so etwas recht natürlich, und wenn man dann alles noch ordentlich kommentiert, bleibt es auch
verständlich.
Eines allerdings haben wir noch nicht angesprochen: Wenn wir Datensätze löschen und dann ZurueckBlättern - woher weiß unser Programm noch, welche Auswahl wir eingangs getroffen hatten?
Im „klassischen“ Programmieren ist so etwas ganz selbstverständlich: Ein Prozess behält seine Informationen im Speicher.
Bei der Web-Programmierung haben wir eine grundsätzlich andere Situation: Jeder Eingabe über ein Formular folgt ein Neustart unseres Programms - es weiß zunächst nichts mehr von der vorhergehenden Kommunikation.
Deshalb müssen hier zwischen den Instanzen eines Programms, die mit dem gleichen Client kommunizieren, Informationen festgehalten und von Instanz zu Instanz weitergereicht werden. Man spricht hier von
einer Session.
Wenn also ein Programm von einem Client aufgerufen wird, muss es feststellen können:
Hat er mit mir (in letzter Zeit) kommuniziert?
Welche Informationen haben wir ausgetauscht?
Prinzipiell gibt es da drei Möglichkeiten, die miteinander kombiniert werden können:
1. Session-Informationen werden beim Aufruf der Web-Seiten und deren Auslieferung ausgetauscht.
2. Session-Informationen werden auf der Festplatte des Clients gespeichert.
3. Session-Informationen werden auf der Festplatte des Servers gespeichert.
Punkt 2. wird mittels Cookies realisiert, und für die Kombination von 2. und 3. stellt PHP inzwischen
leistungsfähige Funktionen zur Verfügung. Siehe dazu
[PHPTUT] -> 43. Sessions .
http://tut.php-quake.net/de/sessions.html
Wir wollen uns hier nur den Punkt 1. ansehen, der zum Zwischenspeichern kleiner Informationsmengen der
wohl geeignetste ist. HTML bietet dazu die ’hidden’-Felder an. Die Funktion setHidden in inet.php
zeigt, wie Informationen auf diesem Weg rationell ausgetauscht werden können.
PHP und MySQL
E INFÜHRUNG
43 / 0
7.4 Passwort-Schutz
Nicht alle sollen alle unsere Web-Seiten lesen können. Der übliche Schutz benutzt Passwörter zur Authentifizierung. Es gibt verschiedenste Methoden, eine solchen Authentifizierung einzurichten.
Der Web-Server selbst kann diesen Schutz übernehmen - das muss allerdings mit Administratorrechten für
den Web-Server eingerichtet werden.
Wenn wir ohne solche Privilegien unsere Seiten schützen wollen, können wir dafür direkt innerhalb unserer
PHP-Programme sorgen.
[SOURCE] -> iadressen/ineta.php
zeigt eine Möglichkeit. Damit nicht bei jedem Aufruf erneut die Authentifizierung verlangt wird, muss auch
dabei mit Methoden der Session-Verwaltung gearbeitet werden. Wir verwenden auch hier hidden-Felder.
Ein Passwort-Schutz dieser Art wird »pur« in
[SOURCE] -> iadressen/auth.php
dargestellt.
Einen leistungsfähigeren Ansatz finden Sie in
[PHPTUT] -> 40. Loginskript .
http://tut.php-quake.net/de/login.html
7.5 Lösungen der Aufgaben
Lösung 7.1
Unter unseren 100 „zufällig“ erzeugten Datensätzen sind mit großer Wahrscheinlichkeit einige mit einem
schon vorhandenen email-Feld. Da die Spalte email als Primary Key deklariert ist, werden solche Datensätze
nicht aufgenommen.
Lösung 7.2
DELETE FROM adressen
Lösung 7.3
1. SELECT * FROM adressen WHERE email LIKE ’%.edu’
2. Ersetzen Sie im Hauptprogramm in der Funktion zeige die SELECT-Anweisung durch die unter 1.
genannte Version.
Lösung 7.5
Siehe [SOURCE] -> iadressen/tabelle_ein.php
PHP und MySQL
E INFÜHRUNG
44 / 0
Lösung 7.6
Siehe [SOURCE] -> iadressen/tabelle_suche.php
Lösung 7.7
Siehe [SOURCE] -> iadressen/mysql1.php
Lösung 7.8
Siehe [SOURCE] -> iadressen/tabelle_loesche.php
PHP und MySQL
E INFÜHRUNG
45 / 0
Literaturverzeichnis
[MYSQL]
MySQL-Referenzhandbuch
http://dev.mysql.com/doc/refman/5.1/de
[PHPDOC]
PHP-Handbuch
http://de.php.net/manual/de
[PHPTUT]
Progman, quakenet:#php Tutorial
http://tut.php-q.net
[RDB]
Hermann Sauer, Relationale Datenbanken
[SELFHTML]
Stefan Münz, SELFHTML
http://de.selfhtml.org
[SELFPHP]
Damir Enseleit, Matthias Hupp SELFPHP
http://www.selfphp.info
[SOURCE]
Norbert Rogler, PHP-Kurs: Quelltexte
http://www.nrogler.de
[SQLEINF]
SQL-Einführung:
http://print-www.informatik.uni-hamburg.de/Dokumentation/sql-basic.phtml
[THEIS]
Thomas Theis, PHP 5 & MySQL 5
Herunterladen