Diplomarbeit Interaktiver Dialog der Skriptsprache PHP zu MySQL

Werbung
Diplomarbeit
Interaktiver Dialog der Skriptsprache PHP zu MySQL
und Oracle 9i Datenbanken
Diplomand:
Rückerl Roman
Matrikel-Nr.:
2040842
Semestergruppe:
I8IW.W
Anschrift:
Vilsstrasse 9
93059 Regensburg
Email:
[email protected]
Aufgabensteller/Betreuer:
Hr. Prof. Sauer
Zweitprüfer:
Hr. Prof. Dr. Kopp
Gliederung
1. Einleitung
4
1.1 Die Geschichte von PHP
4
1.2 Gründe für die Themenwahl
7
2. PHP
8
2.1 Voraussetzung und Installation
8
2.1.1 Der Apache-Webserver
9
2.1.2 Installation von PHP unter WindowsMe
15
2.2 Die Skriptsprache PHP
18
2.2.1 Was ist PHP?
18
2.2.2 Programmieren mit PHP
19
2.2.2.1 Variablen
22
2.2.2.2 Konstanten
25
2.2.2.3 Operatoren
25
2.3 Programmsteuerung
30
2.3.1 Beenden des Programms
30
2.3.2 Entscheidungen mit if
30
2.3.3 Entscheidungen mit switch
31
2.3.4 Schleifen mit while
32
2.3.5 Die do-while-Schleife
33
2.3.6 Die for Schleife
33
2.3.7 Die foreach-Schleife
33
2.3.8 Funktionen
34
2.4 Arrays
37
2.4.1 Indiziertes Array
37
2.4.2 Assoziative Arrays
38
1
2.5 Klassen in PHP
40
2.5.1 Definieren einer Klasse
40
2.5.2 Eigenschaften und Methoden
40
2.5.3 Verwenden einer Klasse
42
2.5.4 Vererbung
42
3. Die Datenbanken MySQL und Oracle 9i
3.1 MySQL
44
44
3.1.1 Voraussetzung und Installation einer MySQL-DB
44
3.1.2 MySQL-Monitor
45
3.1.3 PHPMyAdmin
47
3.1.4 PHP und Datenbanken
50
3.1.4.1 Verbindung zum Datenbankserver
50
3.1.4 Befehle an die Datenbank schicken
51
3.1.4.3 Datensätze der Abfrage ermitteln
52
3.1.4.4 Funktionen für MySQL
53
3.1.4.5 Ein allgemeines Beispiel für PHP in Verbindung mit
58
MySQL-Datenbanken
3.1.5 Anlegen einer Datenbank unter MySQL
60
3.1.6 Erstellen und Verwalten von Tabellen
62
3.1.6.1 Tabellen mit MySQL-Monitor anlegen
62
3.1.6.2 Tabellen mit PHPMyAdmin anlegen
64
3.1.6.3 Hinzufügen von Datensätzen
66
3.1.7 PHP-Skripte in Anwendung mit einer MySQL-Datenbank am
71
Beispiel der Datenbank Personalwesen
3.1.7.1 Das HTML-Formular PHP_Formular
71
3.1.7.2 Das PHP-Skript der SQL-Anweisungen
71
3.1.7.2.1 Hauptprogramm und Klassenvariablen
76
3.1.7.2.2 Konstruktor der Klasse mysql_db
78
3.1.7.2.3 Die Funktion connect_db()
78
3.1.7.2.4 Die Funktion query($sql)
79
3.1.7.2.5 Die Funktion echoerror()
80
2
3.1.7.2.6 Die Funktion geanderte_Dts($sql)
81
3.1.7.2.7 Die Funktion get_tablename($sql, $Art)
82
3.1.7.2.8 Die Funktion Create_Table($sql)
84
3.1.7.2.9 Die Funktion Drop_Table($sql)
85
3.1.7.2.10 Die Funktion Alter_Table($sql)
85
3.2 Oracle
87
3.2.1 Verbindung zur Oracle-Datenbank der Fachhochschule Regensburg
herstellen
87
3.2.2 PHP-Funktionen für Oracle-Datenbanken
96
3.2.3 Erstellen der Tabellen unter Oracle
101
3.2.4 Hinzufügen von Datensätzen unter Oracle
102
3.2.5 Ein allgemeines Beispiel für PHP in Verbindung mit
104
Oracle-Datenbanken
3.2.6 PHP-Skripte in Anwendung mit einer Oracle-Datenbank
106
3.6.1 Hauptprogramm und Klassenvariablen
107
3.6.2 Konstruktor der Klasse oracle_db
109
3.6.3 Die Funktion connect_db()
109
3.6.4 Die Funktion query($sql)
110
3.6.5 Die Funktion geanderte_Dts($sql)
111
3.6.6 Die Funktionen Create_Tavle($sql), Alter_Table($sql)
und Drop_Table($sql)
112
Abbildungsverzeichnis
115
Literaturverzeichnis
117
3
1. Einleitung
1.1 Die Geschichte von PHP
PHP ist der Nachfolger eines älteren Produktes, PHP/FI (1995, Rasmus Lerdorf).
Ursprünglich war PHP/FI ein Set von Perl Skripten zur Erfassung der Zugriffe auf einen
Webauftritt. Er nannte dieses Set von Skripten „Personal Home Page Tools“. Als dann mehr
Funktionalität benötigt wurde, schrieb Hr. Lerdorf eine viel größere Umsetzung in C, welche
auch mit Datenbanken kommunizieren konnte und den Benutzern die Entwicklung einfacher
dynamischer Webapplikationen ermöglichte. Rasmus Lerdorf entschloss sich, den Sourcecode
von PHP/FI zu veröffentlichen, so dass ihn jeder benutzen, von Fehlern bereinigen und
weiterentwicklen konnte.
PHP/FI stand für Personal Home Page / Forms Interpreter und beinhaltete manches an
Funktionalität des heutigen PHP. Es besaß Variablen wie in Perl, eine automatische
Interpretation von Formilarvariablen und eine in HTML eingebettete Syntax. Die Syntax
selbst war der von Perl ähnlich, wenn auch viel eingeschränkter, einfach und ziemlich
konsistent.
1997 war PHP/FI 2.0, die zweite Überarbeitung der C Implementierung, Kult für einige
tausend Benutzer weltweit (geschätzt). Etwa 50.000 Domains berichteten, PHP/FI 2.0
installiert zu haben, was mit ca. 1% der Domains im Internet zu Buche schlug. Obwohl
mehrere Leute diesem Projekt ein Stück Code beisteuerten, war es insgesamt immer noch ein
Ein-Mann-Projekt.
PHP 3.0 war die erste Version, die dem heutigen PHP sehr gleicht. Es wurde 1997 von Andi
Gutmans und Zeev Suraski neu geschrieben, nachdem PHP/FI 2.0 ihrer Meinung nach für die
Entwicklung ihrer e-Commerce Applikation viel zu schwach war. Auf die Basis der
bestehenden Benutzer von PHP/FI aufbauend, entschieden sich Hr. Gutmans, Hr. Lerdorf und
Hr. Suraski zur Kooperation und kündigten PHP 3.0 als den offiziellen Nachfolger von
PHP/FI 2.0 an, und die Entwicklung von PHP/FI 2.0 wurde größtenteils eingestellt.
4
Eine der größeren Stärken von PHP 3.0 waren die großen Erweiterungsmöglichkeiten.
Zusätzlich zu der soliden Infrastruktur für eine Menge an Datenbanken, Protokollen und APIs
lockten vor allem die Erweiterungsmöglichkeiten von PHP 3 Dutzende von Entwicklern an,
welche sich beteiligten und neue Erweiterungsmodule einbrachten. Möglicherweise war das
der Schlüssel zu dem gewaltigen Erfolg von PHP 3.0. Weitere besondere Merkmale waren die
Unterstützung für objektorientierte Syntax und die viel bessere, sowie konsistentere
Sprachsyntax.
Die gesamte neue Sprache wurde unter einen neuen Namen veröffentlicht, welche die im
Namen PHP/FI 2.0 vorhandene Implizierung einer eingeschränkten persönlichen Nutzung
beseitigte. Es wurde einfach „PHP“ genannt. PHP steht für PHP Hypertext Preprocessor.
Gegen Ende 1998 wuchs PHP auf eine installierte Basis von geschätzten zehntausenden
Benutzern und hunderttausenden Websites, auf denen PHP installiert war, heran. An seinem
Höhepunkt war PHP 3.0 auf etwa 10% der Webserver im Internet installiert.
PHP 3.0 wurde im Juni 1998 nach einer neunmonatigen öffentlichen Testphase offiziell
freigegeben.
Im Winter 1998, kurz nach der offiziellen Freigabe von PHP 3.0, begannen Andi Gutmans
und Zeev Suraski den Kern von PHP umzuschreiben. Die Ziele waren eine verbesserte
Leistung von komplexen Applikationen und eine verbesserte Modularität des Basiscodes.
Solche Applikationen wurden durch die neuen Leistungsmerkmale von PHP 3.0, der
Unterstützung einer großen Auswahl von Datenbanken und APIs von Drittanbietern, möglich
gemacht, aber PHP 3.0 war nicht dafür entworfen, solche komplexen Applikationen auch
effizient zu handhaben.
Die neue Engine, bezeichnet sich als „Zend Engine“ (aus den Vornamen Zeev und Andi
gebildet), entsprach diesen Zielen erfolgreich und wurde zum ersten mal 1999 eingeführt.
PHP 4.0, das auf dieser Engine - verbunden mit einer großen Auswahl an zusätzlichen
Leistungsmerkmalen - basiert, wurde im Mai 2000 offiziell freigegeben, fast zwei Jahre nach
seinem Vorgänger PHP 3.0. Zusätzlich zu der stark verbesserten Leistung inkludierte PHP 4.0
andere wichtige Leistungsmerkmale, wie Unterstützung für viele weitere Webserver, HTTP5
Sessions, Ausgabepufferung, sichere Wege im Umgang mit Benutzereingaben und
verschiedene neue Sprachkonstrukte.
PHP 4 ist die derzeit aktuellste freigegebene Version von PHP. Die Arbeit an der Modifikation und die Verbesserung der Zend Engine zur Integration der neuen für PHP 5.0
entworfenen Leistungsmerkmale hat bereits begonnen.
Heute wird PHP von hundertausenden von Entwicklern verwendet, und es wird von mehreren
Millionen Sites berichtet, auf welchen PHP installiert ist, was mit über 20% der Domains im
Internet zu Buche schlägt.
6
1.2 Gründe für die Themenwahl
Ich habe mich für dieses Thema aus mehreren Gründen entschieden. Der erste ist, dass PHP
im Informatikstudium derzeit nicht gelehrt wird. In meiner Tätigkeit als Werksstudent habe
ich auch noch keine Erfahrungen mit PHP sammeln können.
Zweitens da PHP nur in Verbindung mit einem Webserver läuft, bietet es Gelegenheit, sich
mit Installation und Konfiguration eines solchen Servers vertraut zu machen.
Für das Projekt war es notwendig, eine Internetanbindung über PHP zu einer MySQLDatenbank zu schaffen. Aufgrund der Projektvorgabe, laut der die Inhalte der Website
dynamisch eingefügt werden sollen, wobei diese in Tabellenform gespeichert werden können,
ist eine Datenbank ein naheliegendes Hilfsmittel. Die Daten können z.B. in einer MySQLDatenbank hinterlegt werden. Da ein Webserver kein Datenbank-Client ist, wird hier eine
Schnittstelle benötigt. Diese Schnittstelle ist PHP. Neben den Skripting-Eigenschaften eignet
sich PHP als MySQL-Client, um Daten in die Webseiten zu integrieren.
Die Erstellung einer solchen MySQL-Datenbank und das Modifiziern, Löschen und Abfragen
mittels PHP-Skript ist für mich von besonderen Interesse.
7
2. PHP
PHP ist eine Programmiersprache, die der Syntax von C und Java sehr ähnelt. Im Gegensatz
zu C und Java findet in PHP aber keine Übersetzung in einen binären Objektcode statt. Die
Programme liegen im Quelltext auf dem Server und werden in dem Moment, in dem sie
aufgerufen werden, von einem Servermodul interpretiert. Man bezeichnet eine solche
Programmiersprache auch als Skriptsprache.
Diese Vorgehensweise hat gegenüber binärem Code zwar Geschwindigkeitsnachteile, aber
PHP ist dafür plattformunabhängig und kann in HTML-Seiten eingebettet werden.
Im Internet läuft PHP in Verbindung mit einem Webserver. Dazu wird ein Modul geladen,
das die PHP-Anwendung ausführt. Vorraussetzung ist demnach, dass man einen Webserver
mit PHP-Modul besitzt oder ihn so konfigurieren kann.
Man kann PHP auch als CGI-Variante betreiben. CGI steht für Common Gateway Interface
und beschreibt die Verfahrensweise, wie der Webserver externe Programme aufruft und wie
letztendlich die HTML-Seite entsteht, die im Client angezeigt wird.
Die CGI-Variante ist aber im Webserver-Betrieb als ungünstiger zu bezeichnen, da sie mehr
Ressourcen verbraucht und langsamer läuft. Die Variante als Servermodul ist dem
vorzuziehen.
2.1 Voraussetzungen und Installation
Im Internet läuft PHP in Verbindung mit einem Webserver. Dazu wird ein Modul geladen,
das die PHP-Anweisung ausführt. Vorraussetzung ist demnach, dass man einen Webserver
mit PHP-Modul besitzt oder ihn so konfigurieren kann. Auf Servern im Internet wird oft
Apache mit PHP und MySQL betrieben.
8
PHP ist plattformunabhängig. Wird Windows verwendet, sollte es aber mindestens Windows
NT oder Windows 98 sein. Für die Beispielinstallation wurde WindowsMe verwendet.
Man kann PHP aber auch unter Linux bzw. Unix-Betriebssystemen installieren. Es gibt nur
wenige Funktionen, die unter Linux und Windows verschieden sind.
Es sollte ebenfalls ein TCP/IP-Protokoll installiert sein. Wird Linux benutzt, dann sollte es
eine Linux-Version mit einem Kernel ab Version 2.2 sein. Ein installiertes TCP/IP-Protokoll
sollte vorhanden sein. Außerdem werden ein C-Compiler, der Linker und die entsprechenden
Bibliotheken benötigt.
Wenn im Computer keine Netzwerkkarte eingebaut ist, muss unter Windows 9x und
Windows 2000 wenigstens das DFÜ-Netzwerk installiert sein, damit TCP/IP mit der IPAdresse 127.0.0.1 und dem Alias "localhost" verfügbar ist. Unter Windows NT installieren
Sie dazu den "Microsoft Loopback Adapter". Unter Linux sollte das "Loopback Device"
standardmäßig installiert sein.
Für die Installation von Apache, MySQL, PHP und PHPMyAdmin wurde ein Verzeichnis
C:\Web auf der Festplatte angelegt und alle Programme wurden in dieses Verzeichnis
installiert. Die festen Pfade werden in dieser Diplomarbeit fettgedruckt dargestellt..
2.1.1 Der Apache-Webserver
Um das TCP/IP-Protokoll unter Windows zu installieren, wechseln Sie zunächst ins
Arbeitsplatzmenü auf dem Desktop ihres Computers. Gehen Sie jetzt in die Systemsteuerung.
Doppelklicken Sie auf das Icon Netzwerk und auf den Button Hinzufügen.
9
Aktivieren des Buttons
Hinzufügen
(Abb.1: Hinzufügen eines Netzwerkprotokolls)
Wählen Sie nun die Eigenschaft „Protokoll“ aus. Wählen Sie als Hersteller Microsoft aus
und als Netzwerkprotokoll TCP/IP.
10
Auswahl des TCP/IPProtokolls
(Abb.2: Hinzufügen des TCP/IP-Protokolls)
Am Ende sollte dann Ihre Netzwerkumgebung folgendes Aussehen haben, je nachdem welche
anderen Protokolle Sie noch zusätzlich installiert haben.
11
(Abb.3: Netzwerkumgebung)
Ist das TCP/IP-Protokoll richtig installiert, kann mit der Installation des Apache-Webservers
begonnen werden.
Eine aktuelle Version des Apache-Webservers ist gegebenenfalls im Internet unter
http://www.apache.org herunterzuladen. In der Beispielinstallation wird die Version 2.0.43
verwendet. Starten Sie das Setup-Programm durch einen Doppelklick auf die Datei und folgen
Sie den Anweisungen.
12
(Abb.4: Start der Apache-Installation)
Netzwerkname
des PCs
(Abb.5: Netzwerknamen für den Apache-Webserver eintragen)
13
Tragen Sie unter Server Name nur den Netzwerknamen ihres PCs ein. Diesen erfahren Sie
in den Netzwerkeinstellungen.
Als Beispiel wurde eine benutzerdefinierte Installation durchgeführt und als Zielverzeichnis
C:\Web\Apache eingetragen. Danach kann der Apache-Webserver installiert werden.
Nachdem die Installation beendet ist, sollte Sie ihr System neu starten.
Gehen Sie nun in Ihr Startmenü, öffnen Sie den Münepunkt der Apache-Anwendungen
und danach Control Apache Server und führen Sie das Programm Start Apache
in Console aus.
Testen Sie die Apache Installation, indem Sie im Internet Explorer http://localhost oder
http://127.0.0.1 eintippen.
(Abb.6: Überprüfen der Apache-Installation)
14
Sollte die Testseite des Apache-Webservers nicht erscheinen, wurde offenbar der ApacheDienst nicht richtig eingerichtet.
Das kann jedoch in der MS-DOS-Eingabeaufforderung nachgeholt werden. Wechseln
Sie in das Installationsverzeichnis des Apache-Webservers. In der Beispielinstallation ist das
C:\Web\Apache\bin. Geben Sie apache -k start ein und bestätigen Sie die
Eingabe mit der Enter-Taste. Wiederholen Sie den Installationstest. Mit dem Befehl apache
-k stop beenden Sie den Apache-Webserver.
Nun sollte der Apache-Webserver auf ihren Computer installiert sein.
2.1.2 Installation von PHP unter WindowsMe
Sie können eine aktuelle Version von PHP aus dem Internet unter www.apache.org
herunterladen. Entpacken Sie dann diese Dateien in einen Ordner, der in der Beispielinstallation unter der Namen C:\Web\PHP angegeben wurde.
Als nächstes muss die Datei PHP.INI_DIST, die in der Beispielinstallation unter dem
Verzeichnis C:\Web\PHP zu finden ist, in das Windows-Verzeichnis (z.B. C:\Windows)
kopiert werden. Benennen Sie jetzt die Datei in PHP.INI um und entfernen Sie
gegebenenfalls den Schreibschutz.
Öffnen Sie die Datei PHP.INI mit einem Texteditor wie z.B. WordPad und nehmen Sie
folgende Änderungen vor:
?? Setzen Sie den Wert max_execution_time = 60, der es erlaubt, dass ein
PHP-Skript bis zu 60 Sekunden laufen darf.
?? Setzen Sie doc_root auf den htdocs-Ordner Ihrer Apache-Installation. Im
Beispiel ist das doc_root = C:\Web\Apache\htdocs. In diesem
Verzeichnis müssen die erstellten PHP-Dateien gespeichert werden.
?? Setzen Sie extensions_dir auf den Ordner PHP\extensions\. Im
Beispiel lautet die Zuweisung extensions_dir =
C:\Web\PHP\extensions\.
15
?? Aktivieren Sie (Enfernen des ’;’) im Abschnitt Windows Extensions
PHP_GD.DLL.
?? Setzen Sie display_errors = On, um Fehlermeldungen zu aktivieren.
Speichern und schließen Sie die Datei PHP.INI.
Verschieben Sie die Datei PHP4TS.DLL aus ihrem PHP-Verzeichnis in das SystemVerzeichnis von Windows (z.B. C:\Windows\System.)
Öffnen Sie die Datei HTTPD.CONF in ihrem Apache-Ordner, im Beispiel ist das
C:\Web\Apache\Conf\HTTPD.CONF, mit einem Texteditor und fügen Sie am Ende der
Datei folgende Zeilen an, die PHP als Module in Apache laden und Dateien, die auf .PHP,
.PHP3 und .PHP4 enden, auf den PHP-Parser umleiten.
?? LoadModule php4_module c:/web/php/sapi/php4apache.dll
Beachten Sie bitte, dass das Verzeichnis mit ’/’ und nicht mit ’\’ angegeben
werden muss.
?? AddType application/x-httpd-php .php
?? AddType application/x-httpd-php .php3
?? AddType application/x-httpd-php .php4
Starten Sie Ihren Apache-Webserver neu. Erstellen Sie mit einem Texteditor im Verzeichnis
HTDOCS Ihrer Apache-Installation die Datei Info.PHP, die folgenden Inhalt aufweist:
<?php
phpinfo();
?>
Geben Sie im InternetExplorer http://127.0.0.1/info.php oder http://localhost/info.php ein.
Wenn alle Schritte richtig vollzogen sind, sehen Sie die PHP-Info-Seite mit Angaben zur
PHP-Installation.
16
(Abb.7: Überprüfung der PHP-Installation)
17
2.2 Die Skriptsprache PHP
PHP ist eine Programmiersprache, die nicht in einen für den Computer ausführbaren
Programmcode übersetzt wird. PHP wird sozusagen interpretiert, ist also plattformunabhängig
und lässt sich leicht in Webseiten integrieren.
PHP wird zur Erzeugung von Server Pages verwendet. Server Pages sind HTML-Dateien mit
variablem Inhalt. Dieser variable Inhalt wird durch PHP erzeugt.
2.2.1 Was ist PHP?
PHP ist eine Skriptsprache, die serverseitig verarbeitet wird und deren Syntax direkt in
HTML-Dokumente geschrieben wird. PHP kennt außerdem das <BR>-Zeichen von HTML
das einen Zeilenumbruch hervorruft. Um PHP-Skripte auszuführen, wird ein Server benötigt,
der entsprechend konfiguriert ist.
Die meisten Webserver sind so konfiguriert, dass Sie den PHP-Dateien eine bestimme
Erweiterung geben müssen. Ohne diese würde der Webserver die Datei nicht an den PHPProzessor weiterleiten. Für gewöhnlich werden die Dateierweiterungen .PHP, .PHP3, .PHP4
und PHTML unterstützt.
PHP-Dateien können Sie mit jedem Texteditor schreiben. Empfehlenswert ist ein Editor mit
farblicher Syntaxhervorhebung, um einen besseren Überblick zu behalten. Der EditPlusText Editor eignet sich z.B. sehr gut dafür und kann unter der Adresse www.editplus.com
heruntergeladen werden. EditPlus ist eine Sharewareversion, die Sie nach 30 Tagen
registrieren müssen. Ein herkömmlicher Text Editor wie WordPad funktioniert aber auch.
18
Beachten Sie, dass die erstellten Dateien die Endung .PHP, .PHP3, .PHP4 oder PHTML
besitzen müssen. Speichern Sie alle Dateien in dem Apache-Server zugeordneten Verzeichnis.
Bei der Beispielinstallation ist das C:\Web\Apache\htdocs.
2.2.2 Programmieren mit PHP
Der PHP-Quellcode kann direkt in den HTML-Text geschrieben und zwischendurch von
HTML unterbrochen werden. PHP arbeitet den Code von oben nach unten ab. Innerhalb der
Begrenzungen von PHP darf kein reines HTML stehen. Sie benötigen eine Schreibweise, die
dem PHP-Prozessor mitteilt, wann PHP beginnt und endet.
Die gängigste Schreibweise ist der XML-Stil:
HTML-Quelltext
<?php
//PHP-Quelltext
?>
HTML-Quelltext
Kommentare
Kommentare sind ein wichtiges Werkzeug für den Programmierer. Kommentare werden in
PHP genauso wie in C++ erstellt.
<?php
/* Dies ist ein Kommentar*/
// Dies ist auch ein Kommentar
?>
Kommentare dürfen auch nach abgeschlossenen Anweisungen folgen.
<?php
echo(“Testausgabe“); // Kommentar
?>
19
Anweisungen
Anweisungen werden von oben nach unten abgearbeitet. PHP unterscheidet Zuweisungen,
Funktionsaufrufe, Bedingungen und Schleifen. Jede Befehlskette wird mit einem Semikolon
abgeschlossen.
Die erste Anweisung ist die echo-Anweisung. Mit diesem Befehl gibt der Browser einen
Text aus.
<HTML><HEAD><TITLE> Mein erstes Programm </TITLE><</HEAD>
<BODY>
<?php
echo(“Hello World!”); //Anweisung
?>
</BODY></HTML>
Ausgabe:
Hello World
Der echo-Befehl
Der echo-Befehl gibt Strings aus. Der Text, der ausgegeben werden soll, muss natürlich in
Anführungsstrichen stehen, da der Server sonst versucht, ihn als PHP-Befehl zu
interpretieren. Bei den Anführungsstrichen gibt es zwei verschiedene: einmal das einfache „ ’
“ und dass doppelte „ “ “. Es gibt auch einen Unterschied zwischen den beiden. Bei den
doppelten Anführungsstrichen versucht der Server den Text zu interpretieren, bei den
einfachen gibt er ihn dagegen einfach aus.
<?php
$var = 110;
echo(’Die Variable $var hat den Wert 110’ . “<BR>“);
echo(“Die Variable $var hat den Wert 110 <BR>“);
?>
Ausgabe:
Die Variable $var hat den Wert 110
Die Variable 110 hat den Wert 110
20
Unterdrücken von Sonderzeichen
Einige Ausdrücke können durch PHP fehlerhaft interpretiert werden, wie das folgende
Beispiel zeigt.
<?php
echo("$var ist eine "Variable".");
?>
Dieses Skript wird nicht ausgeführt, da die Anführungszeichen um das Wort „Variable“ als
PHP-Syntax gedeutet werden. Außerdem wird $var nicht ausgegeben, da diese Variable noch
keinen Inhalt besitzt. Es soll außerdem nur der String $var ausgegeben werden. Der Begriff
$var wird als Variable interpretiert.
Abhilfe erfolgt durch das Setzen eines Backslash \ vor das Sonderzeichen.
<?php
echo("\$var ist eine \"Variable\".");
?>
Ausgabe:
$var ist eine "Variable".
Blöcke und Strukturen
PHP-Skripts werden durch Kontrollstrukturen gesteuert. Im wesentlichen sind das Schleifen
und Bedingungen. Wie schon bei den PHP-Begrenzungen <?php ?> müssen auch Strukturen
begrenzt werden. Dazu werden geschweifte Klammern {} verwendet.
<?php
$variable = 1;
if ($variable ==1)
{
echo("Das ist eine If-Anweisung in PHP.");
}
?>
Jede Struktur, die von geschweiften Klammern eingeschlossen wird, ergibt einen
Anweisungsblock. Auch dieser darf von HTML unterbrochen werden.
21
Achten Sie darauf, dass der Block ordnungsgemäß durch eine geschweifte Klammer beendet
wird. Anweisungsblöcke dürfen auch verschachtelt werden.
PHP-Dateien einbinden
Soll ein PHP-Programm ein weiteres PHP-Programm einbinden, bietet PHP die Anweisungen
include und require. Damit sind Sie in der Lage, Programmstrukturen auszulagern oder
einfach Inhalte in Ihre Seite oder Ihr Skript zu implementieren.
Der Unterschied der beiden Befehle besteht in der Art der Einbindung. Include ruft eine
Datei nur dann auf, wenn es erwünscht wird. Steht diese Anweisung innerhalb eines Blocks,
der nicht abgearbeitet wird, so wird auch die Datei nicht eingebunden, welche in include
definiert wurde. Im Gegensatz dazu wird require immer ausgeführt, auch dann, wenn der
Befehl innerhalb einer nicht abzuarbeitenden Struktur steht.
<?php
include ("Dateiname");
require ("Dateiname");
?>
Wird eine Datei durch include() an mehreren Stellen des Skripts aufgerufen, wird diese
auch mehrmahls ausgeführt. Dateien, die require() einbindet, führt PHP nur einmal aus.
2.2.2.1
Variablen
Wertzuweisungen
Variablen setzen sich in PHP aus einem vorangestellten $-Zeichen, dem Namen der Variable
und dem Operator „=“ zusammen. Hinter dem Operator steht der Wert der Variable.
<?php
$variable1 = “Hello World!“; //String
$variable2 = 10; //Integer
$variable3 = 0.5; //Double
22
?>
$variable4 = True; //Boolean
$variable5 = Object; //Objekt
$variable6 = Array; //Feld
In PHP wird der Typ einer Variablen automatisch durch den zugewiesenen Wert bestimmt.
D.h. es ist nicht nötig, jeden Datentyp explizit zu deklarieren.
Werden unterschiedliche Datentypen miteinander verknüpft, wird dem entstandenen Wert
automatisch der sinnvollste Datenentyp zugewiesen.
<?php
$var1 = 10; //Integer
$var2 = 10.5; //Double
$c = $a + $b; //c ist vom Typ Double
?>
Globale Variablen
Um Variablen bekannt zu machen, wird das Schlüsselwort global verwendet. Damit
können Variablen und deren Werte strukturübergreifend benutzt werden.
<?php
$a = 100;
function show()
{
global $a;
echo ("Der Wert der Variablen \$a ist:" . $a);
}
show();
?>
Ausgabe:
Der Wert der Variablen $a ist: 100
Mit dem Operator „ , “ können mehrere Variablen global zusammengefasst bzw. definiert
werden.
<?php
global $a, $b, $c;
?>
23
Statische Variablen
Normalerweise verlieren Variablen nach Verlassen eines Strukturblocks, z.B. einer Funktion
oder einer Schleife, ihren in der Struktur neu berechneten Wert. Ist das nicht erwünscht,
können Sie die Variable mit static deklarieren.
<?php
?>
function show()
{
static $var = 100;
$var = $var + $var;
echo ("Der Wert der Variablen \$var ist: $var <BR>");
}
show();
show();
Ausgabe:
Der Wert der Variablen $var ist: 200
Der Wert der Variablen $var ist: 200
Die statisch deklarierte Variable behält ihren in der Struktur neu zugewiesenen Wert bei.
<BR> entspricht den New-Line-Zeichen.
Dynamische Variablen
PHP bietet Ihnen die Möglichkeit, eine Variable in einer anderen zu speichern. Im folgenden
Beispiel wird zuerst der Variablen $a der Wert name zugewiesen. Im zweiten Schritt wird
eine neue Variable dynamisch erzeugt, indem zwei $-Zeichen ($$) verwendet werden. Der
neuen Variablen wird der Wert lernen zugewiesen. Der Variablenname der dynamisch
erzeugten Variable hat den Wert der Variablen $a angenommen. Das bedeutet, dass die
dynamische Variable jetzt eigentlich $name heißt.
<?php
$a = "name";
$$a = "lernen";
echo ($name);
?>
24
Ausgabe:
lernen
Diese Art der Deklaration von Variablen ist auch mit Arrays möglich.
2.2.2.2
Konstanten
Wird eine Konstante deklariert, so ist sie global im gesamten Skript verfügbar. Das ist
sinnvoll, wenn ein Wert an mehreren Stellen des Skripts mehrmals benötigt wird. Damit Sie
bei Änderung des Wertes nicht das gesamte Skript nach dem Wert durchsuchen müssen, lohnt
sich die Definition einer Konstanten, um dann nur diesen Wert zu ändern.
Konstanten werden mit define(“Konstantenname“, “Konstanteninhalt“)
deklariert.
<?php
?>
define("Bearbeiter", "Hans Mustermann");
echo("Ihr aktueller Sachbearbeiter ist " . Bearbeiter);
Ausgabe:
Ihr aktueller Sachbearbeiter ist Hans Mustermann
Beim Aufruf einer Konstanten muss das $-Zeichen weggelassen werden.
2.2.2.3
Operatoren
Zuweisungsoperatoren
Mit dem Gleichheitszeichen = wird der Wert einer Variablen an eine andere Variable, dem
Operanden übergeben.
25
Operator
Ergebnis
$c = $a
Der Wert der Variable $a wird der Variable $c zugewiesen.
$a = 1
Der Variable $c wird die Speicheradresse für den Wert der Variablen $a
$c = &$a
zugewiesen.
Arithmetische Operatoren
In PHP stehen wie auch in allen anderen Programmiersprachen die vier Grundrechenarten zur
Verfügung, sowie die Modulo-Funktion.
Operator
Ergebnis
$c = $a -$b
Differenz von $a und $b
$a -= $b
Der Wert der Variablen $a wird durch Subtraktion um den Wert $b
verringert. Das Ergebnis wird in der Variablen $a gespeichert.
$c = $a + $b
Summe von $a und $b
$a += $b
Der Wert der Variablen $a wird durch Addition um den Wert $b erhöht. Das
Ergebnis wird in der Variablen $a gespeichert.
$c = $a * $b
Produkt von $a und $b
$a *= $b
Der Wert der Variablen $a wird durch Multiplikation um den Wert $b
erhöht. Das Ergebnis wird in der Variablen $a gespeichert.
$c = $a / $b
Quotient von $a und $b
$a /= $b
Der Wert der Variablen $a wird durch den Wert $b geteilt. Der Rest des
Ergebnisses wird in der Variablen $a gespeichert.
$ c = $a % $b
Rest der Division von $a und $b; entspricht der Modulo-Funktion
String-Operator
Verschiedene Zeichenketten lassen sich mit dem String-Operator miteinander verknüpfen.
Dieser Operator ist auch in der Lage, mehr als zwei Variablenwerte miteinander zu
verknüpfen.
26
Operator
Ergebnis
$c = $a . $b
Verknüpfung von Werten
$a .= $b
<?php
$a = "Beispiel ";
$b = "für den ";
$c = "String-Operator!";
$d. = $a . $b . $c;
echo($d);
?>
Ausgabe:
Beispiel für den String-Operator!
Vergleichsoperatoren
Vergleichsoperatoren überprüfen zwei Variablen auf Abhängigkeit. Trifft die zu
untersuchende Abhängigkeit zu, wird der Boolean-Wert 1 als wahr zurückgegeben,
andernfalls der Wert 0.
Operator
Ergebnis
$a == $b
Die Werte der Variablen $a und $b werden auf ihre Gleichheit überprüft.
$a != $b
Die Werte der Variablen $a und $b werden auf ihre Ungleichheit überprüft.
$a > $b
Für die Variable $b wird überprüft, ob ihr Wert kleiner ist als der Wert der
Variablen $a.
$a < $b
Für die Variable $a wird überprüft, ob ihr Wert kleiner ist als der Wert der
Variablen $b.
$a >= $b
Es wird geprüft, ob der Wert der Variablen $a größer oder genau gleich dem
Wert der Variablen $b ist.
$a <= $b
Es wird geprüft, ob der Wert der Variablen $a kleiner oder genau gleich dem
Wert der Variablen $b ist.
$a === $b
Die Variablen $a und $b werden überprüft, ob ihre Werte und ihre
Datentypen übereinstimmen.
$a !== $b
Die Variablen $a und $b werden darauf überprüft, ob ihre Werte und ihre
27
Datentypen verschieden sind.
<?php
$a = "PHP"
$b = "php"
if ($a != $b)
{
echo ("Die Variablen \$a und \$b haben unterschiedliche Werte.");
}
?>
Ausgabe:
Die Varaiablen $a und $b haben unterschiedliche Werte.
Logische Operatoren
Operator
Ergebnis
$a and $b
Ist wahr, wenn $a und $b wahr sind
$a or $b
Ist wahr, wenn entweder $a oder $b wahr ist oder beide wahr sind
$a xor $b
Ist wahr, wenn entweder $a oder $b wahr ist, aber nicht beide wahr sind
$a && $b
Ist wahr, wenn $a und $b wahr sind
$a || $b
Ist wahr, wenn entweder $a oder $b wahr ist
!$a
Ist wahr, wenn $a nicht wahr ist
Operatoren für In- und Dekrementierung
Durch Inkrementierung wird der Wert einer Variablen bequem um den Wert 1 erhöht.
Dekrementierung verringert den Wert einer Variablen um den Wert 1.
++$a
Der Wert der Variablen $a wird um den Wert 1 erhöht. Der neue Wert der
Variablen $a wird zurückgegeben.
$a++
Der Wert der Variablen $a wird zurückgegeben und dann um den Wert 1
erhöht.
--$a
Der Wert der Variablen $a wird um den Wert 1 verringert. Der neue Wert
der Variablen $a wird zurückgegeben.
28
$a--
Der Wert der Variablen $a wird zurückgegeben und dann um den Wert 1
verringert.
<?php
?>
$i = 0;
while ($i < 10)
{
$a .= $i . ", ";
}
echo($a);
Ausgabe:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
29
2.3 Programmsteuerung
2.3.1 Beenden des Programms
PHP stellt zwei Befehle zur Verfügung um die Programmabarbeitung an beliebiger Stelle
sofort zu beenden.
Exit
Der Befehl exit beendet die Abarbeitung aller PHP-Befehle der aktuellen Seite, nicht nur
des aktuellen Blocks.
Die
Ebenso wie exit, bricht die die Programmausführung ab.
2.3.2 Entscheidungen mit if
Nach dem Vorbild der Programmiersprache C beherrscht PHP die if-Anweisung.
<?php
?>
if (logischer Ausdruck)
{
// Anweisung 1
}
else
{
// Anweisung 2
}
Werden mehr Bedingungen in einer Struktur vereint, muss elseif verwendet werden.
Dieser Befehl steht immer im Zusammenhang mit einer Bedingung.
<?php
$a = 10;
30
$b = 20;
if ($a > $b)
{
echo ("\$a ist größer als \$b.");
}
elseif ($a == $b)
{
echo("\$a ist genauso groß wie \$b.");
}
else
{
echo ("\$a ist kleiner als \$b.");
}
$>
Ausgabe:
$a ist kleiner als $b.
Die elseif-Anweisung kann mehrmals hintereinander angewendet werden.
2.3.3 Entscheidungen mit switch
Muss eine Variable mehrfach getestet werden, dann bietet sich in PHP der switch-Befehl
an. Mit break kann die Entscheidung abgebrochen werden.
<?php
?>
$zahl = 4
switch ($zahl)
{
case 1: echo ("Der Wert der Zahl ist: " . $zahl); break;
case 2: echo ("Der Wert der Zahl ist: " . $zahl); break;
case 3: echo ("Der Wert der Zahl ist: " . $zahl); break;
case 4: echo ("Der Wert der Zahl ist: " . $zahl); break;
}
Ausgabe:
Der Wert der Zahl ist: 4
31
2.3.4 Schleifen mit while
Mit Hilfe von while wird ein Anweisungsblock definiert, der in Abhängigkeit von einer
Bedingung mehrfach abgearbeitet wird.
<?php
?>
$a = 10;
$b = 0;
while ($b < $a)
{
echo ("$a. Die Schleife wird 10x durchlaufen. <BR>");
}
Solange der Wert der Variablen $b kleiner als 10 ist, wird der Anweisungsblock ausgeführt.
Erst wenn der logische Ausdruck die Bedingung FALSE ergibt, wird die Schleife nicht weiter
ausgeführt.
2.3.5 Die do-while-Schleife
Im Gegensatz zur while-Schleife wird hier die Austrittsbedingung erst am Ende des
Anweisungsblocks untersucht. D.h., dass die Anweisungen mindestens einmal abgearbeitet
werden.
<?php
$austritt = 0;
$zaehler = 0;
do
{
echo ("$zaehler. Die Schleife wird 1x durchlaufen.<BR>");
$zaehler ++;
} while ($zaehler < austritt)
?>
32
2.3.6 Die for-Schleife
Die for-Schleife wird auch als Zählschleife bezeichnet. Im normalen Verwendungsfall durch
eine Zählvariable, die die Bedingung und die Veränderung des Zählers zur Laufzeit ermittelt.
<?php
for ($i = 1; $i <= 5; $i++)
{
echo ("Die Schleife wird zum $i. Mal durchlaufen.<BR>");
}
?>
Diese Schleife wird fünfmal durchlaufen. Der Zählvariable $i wurde der Startwert 1
zugewiesen. Sie wird durch die Bedingung überprüft. Solange die Bedingung zutrifft, wird die
Zählervariable in dem Beispiel erhöht und der Anweisungsblock ausgeführt.
2.3.7 Die foreach-Schleife
Die foreach-Schleife ist die Schleife für Arrays. Der Umgang mit Arrays erfährt durch die
Anwendung dieses Schleifentyps eine deutliche Erleichterung. Foreach arbeitet jedes
Element des Arrays nacheinander ab. Der Befehl ermittelt dabei die Anzahl der Elemente und
setzt den internen Zeiger in jedem Schleifendurchlauf um ein Element weiter. Es stehen zwei
Möglichkeiten zur Verfügung, um die Schleife aufzurufen.
<?php
?>
$array = array ("1","2","3");
foreach ($array as $element)
{
$element .= "0";
echo ("$element, ");
}
Ausgabe:
10, 20, 30,
33
Durch diese Schreibweise kann jedes Element des Arrays bearbeitet werden. An alle
Elemente wird in diesem Beispiel die Zahl 0 angehängt.
Mit der zweiten Schreibweise können die Schlüssel des Elements verarbeitet werden.
<?php
$array = array("1","2","3");
foreach ($array as $key => $element)
{
$element .= "0";
$key .= "x";
echo ("Schlüssel: $key, Element: $element<BR>");
}
?>
Ausgabe:
Schlüssel: 0x, Element: 10
Schlüssel: 1x, Element: 20
Schlüssel: 2x, Element: 30
Jedes Element wurde genauso behandelt wie im vorhergehenden Beispiel. Hinzugekommen
ist die Bearbeitung des Schlüssels, dem das Zeichen x angehängt wird.
2.3.8 Funktionen
Eine Funktion ist ein separater Programmteil, der eine besondere Aufgabe löst. Sie wird etwa
verwendet, um eine Formel zu berechnen. Ihr werden dazu die notwendigen Eingabewerte
übergeben; als Ausgabewerte erhält man das Ergebnis. Normalerweise wird eine Funktion in
Verbindung mit der gewünschten Rückgabe eines Wertes benutzt. In PHP ist eine Funktion
mehr. Sie stellt ein Modul dar, welches beliebig oft aufrufbar ist. In PHP sind bereits viele
spezielle Funktionen implementiert.
Durch function, den Funktionsnamen und die Parameter wird eine Funktion definiert.
<?php
function name( $Parameter, $Parameter, ...)
34
{
}
// Anweisung
return $varable; // Rückagebwert
?>
Sind keine Parameter vorhanden, bleibt der Inhalt der Klammern leer. Parameter übergeben
Werte entweder über Variablen oder auch direkt in die Funktionsstruktur. Durch die
Verwendung von return wird das Ergebnis aus der Struktur zurückgegeben.
An welcher Stelle sich Funktionen im Quelltext befinden, spielt in PHP4 keine Rolle. Wenn
PHP auf die Definition einer Funktion im Quelltext stößt, wird der Code übersprungen und
erst dann ausgeführt, wenn die Funktion aufgerufen wird.
<?php
$b = 13;
$c = test("20", $b); //Funktionsaufruf
echo($c);
function test ($a, $b)
{
if ($a < $b)
{
return $a + $b;
}
else
{
return $a - $b;
}
}
?>
Ausgabe:
7
By Value
Häufig werden Funktionen verwendet, um den Wert von Variablen zu verändern. Ist
erwünscht, dass eine Variable nur innerhalb einer Funktion verändert wird, verwendet man
die Schreibweise ($a, $b, ...). Die Funktion hat damit keinen Einfluss auf den Originalwert der
Variablen; nach Beendigung der Ausführung erhält man den ursprünglichen Wert zurück.
35
<?php
$a = 100;
addiere ($a);
echo ($a);
function addiere ($x)
{
$x += $x;
}
?>
Ausgabe:
100
Obwohl der Übergabeparameter innerhalb der Funktion verändert wird, hat das keinen
Einfluss auf den Originalwert. By Reference wird definiert, indem das &-Zeichen dem
Parameter vorangestellt wird.
By Reference
By Reference bedeutet, dass nicht der Wert des Parameters, sondern ein Verweis auf die
Speicherzelle übergeben wird. Damit hat die Funktion Zugriff auf die Originalvariablen.
<?php
?>
$a = 100;
addiere ($a);
echo($a);
function addiere (&$x)
{
$x += $x;
}
Ausgabe:
200
Die Veränderung des Parameters innerhalb der Funktion wirkt sich auf den Ausgangswert
aus.
36
2.4 Arrays
Für Daten, die ausgedruckt in einer Liste oder einer Tabelle ausgegeben werden, wurde der
Typ „Array“ entwickelt. Er speichert beliebig viele Werte in einer Variablen. Durch einen
Arrayschlüssel ist jeder Wert innerhalb der Variablen eindeutig einer Speicheradresse
zugeordnet.
2.4.1 Indiziertes Array
Indizierte Arrays verwenden Ganzzahlen als Schlüssel, die PHP vergibt. Durch zwei
verschiedene Möglichkeiten lassen sich Arrays definieren. In der ersten Schreibweise wird
der Schlüssel durch die eckigen Klammern manuell festgelegt.
<?php
$a[0] = "a";
$a[1] = "b";
$a[2] = "c";
$a[3] = "d";
echo ($a[3]); //Rückgabe eines Arrays
?>
Ausgabe:
d
Um Werte in einem Array hinzuzufügen, kann man beispielsweise so vorgehen.
<?php
$a[] = "a";
$a[] = "b";
$a[] = "c";
$a[] = "d";
echo ($a[3]);
?>
Diese Definition von Arrays ist jedoch sehr aufwendig. PHP kennt die Funktion array, die
einfacher zu handhaben und damit deutlich effektiver ist.
37
<?php
$b = "b";
$a = array ("a", $b, "c", "d");
echo ($a[3]);
?>
Ausgabe:
d
Beim Bestimmen eines Arrays muss jedoch die Zahl der zu speichernden Werte nicht
festgelegt werden.
<?php
$a = array ();
$a = "a";
$a = "b";
$a = "c";
$a = "d";
?>
Auf diese Art werden beliebig viele Werte an das Array angehängt.
2.4.2 Assoziative Arrays
Schlüsselnamen müssen nicht numerisch sein; sie können einen beliebigen Wert annehmen,
etwa eine Zeichenkette, die Assoziationen zum Schlüssel erzeugt. Diese assoziativen
Schlüssel heißen Hashes.
<?php
?>
$farbe["rot"] = "1";
$farbe["blau"] = "2";
$farbe["gelb"] = "3";
$farbe["schwarz"] = "4";
echo ($farbe[rot]); //Rückgabe eines Arrays
Ausgabe:
1
38
Die Veränderung des Wertes erfolgt auch hier durch Angabe des Schlüsselnamens.
Für die Erzeugung assoziativer Arrays besitzt die Funktion array eine erweiterte Syntax.
Durch den Operator => verweist der assoziative Schlüssel auf den Wert.
<?php
$farbe = array ("rot" => "1", "blau" => "2", "gelb" => "3", "schwarz" => "4");
echo ($farbe["blau"]);
?>
Ausgabe:
2
39
2.5 Klassen in PHP
2.5.1 Definieren einer Klasse
In PHP wird eine Klasse mit folgender Syntax definiert:
<?php
class Name extends Elternname
{
...
}
?>
Nach dem Namen der Klasse folgt hinter dem Schlüsselwort extends der Name der
übergeordneten Klasse. Eine Klasse muss nicht von einer übergeordneten Klasse abgeleitet
werden.
<?php
class Name
{
...
?>
}
2.5.2 Eigenschaften und Methoden
Eigenschaften einer Klasse werden in Variablen gespeichert, die im Block der Klasse angelegt
wurden.
<?php
class Name
{
var $fname;
}
?>
40
Eine Methode wird wie eine normale Funktion definiert, nur innerhalb der Klassenstruktur.
Methoden greifen auf die Eigenschaften der Klasse zu, indem Sie den reservierten Zeiger
$this verwenden.
<?php
class Name
{
var $fname;
function xyz ($wert)
{
$this->fname = $wert;
}
function Ausgabe ()
{
return $this->fname;
}
}
?>
Eine spezielle Methode der Klasse heißt Konstruktor. Er wird beim Initialisieren einer Klasse
automatisch aufgerufen und besitzt den gleichen Namen wie die Klasse.
<?php
class Name
{
var $fname;
function Name ($Anfangswert)
{
$this->fname = $Anfangswert;
}
function WertFestlegen ($wert)
{
$this->fname = $wert;
}
function Ausgabe ()
{
return $this->fname;
}
?>
}
41
2.5.3 Verwenden einer Klasse
Wurde eine Klasse einmal definiert, muss das Schlüsselwort new verwendet werden um
mehrere Instanzen der Klasse zu erzeugen.
<?php
include ("myclass.php");
$object1 = new Name ("Roland");
$object2 = new Name ("Katrin");
echo($object1->Ausgabe()); echo("<br>");
$object1->WertFestlegen("Dominique");
echo($object1->Ausgabe()); echo("<br>");
echo($object2->Ausgabe()); echo("<br>");
?>
Ausgabe:
Roland
Dominique
Katrin
2.5.4 Vererbung
Nun wird eine neue Klasse Adresse angelegt, um Vor- und Zunamen zu speichern. Sie erbt
die Eigenschaften und Methoden der Klasse Name.
<?php
include("myclass.php");
class Adresse extends Name
{
var $vname;
//Konstruktor der Klasse Adresse
function Adresse ($vor, $zu)
{
Name::Name($zu);
$this->vname = $vor;
}
function WerteFestlegen ($vor, $zu)
{
42
Name::WerteFestlegen ($zu);
$this->vname = $vor;
}
function Ausgabe()
{
$hilf = Name::Ausgabe();
return "$this->vname $hilf";
}
}
$MeinName = new Adresse ("Andreas", "Hackl");
echo ($MeinName->Ausgabe());
?>
Ausgabe:
Andreas Hackl
Die Klasse Adresse nutzt die Eigenschaften der Elternklasse Name. Die Syntax für die
Methoden der Elternklasse lautet:
ElternklasseName::Elternklassenfunktion (Parameter)
43
3.
Die Datenbanken MySQL und Oracle 9i
In diesem Kapitel wird der Zugriff auf eine MySQL- und eine Oracle-Datenbank mit PHP
erklärt. Die Programmschnittstellen die PHP für den Zugriff auf die bedien Datenbanken
besitzt sind sehr unterschiedlich und müssen deshalb separat erläutert werden.
3.1 MySQL
3.1.1 Voraussetzung und Installation einer MySQL Datenbank
MySQL ist genau wie PHP plattformunabhängig. D.h. Sie können MySQL unter einer
gängigen Windows-Version wie z.B. WindowsMe oder unter Linux oder UnixBetriebssystemen installieren. Die Installation unterscheidet sich aber von der Installation
unter Windows. Sonst werden keine Vorraussetzungen für MySQL benötigt.
Die neueste Version von MySQL können Sie aus dem Internet unter http://www.mysql.com/
herunterladen. Um MySQL zu starten, führen Sie das Setup-Programm (SETUP.EXE) aus
und installieren MySQL in ein beliebiges Verzeichnis. Im Beispiel wurde die MySQLInstallation in das Verzeichnis C:\Web\MySQL installiert.
Nachdem die Installation abgeschlossen ist, öffnen Sie mit einem Texteditor (WordPad) die
Datei My-Example.cnf in Ihrem MySQL-Verzeichnis und entfernen das
Kommentarzeichen # in der Zeile mit der Anweisung basedir. In der Beispielinstallation
ist die Datei unter C:\Web\MySQL\My-Example.cnf zu finden. Tragen Sie als
Verzeichnis hier Ihr MySQL-Verzeichnis ein (z.B. C:\Web\MySQL). Speichern Sie die
Datei als C:\My.cnf.
Sie können den Start von MySQL unter WindowsME mit Hilfe des Registry-Editors
automatisieren. Fügen Sie dazu unter
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
44
RunServices eine Zeichenkette mit dem Namen mysqld-max und dem Pfad der Datei
MySQLD-Max.exe ein. In der Beispielinstallation war das
C:\Web\MySQL\Bin\MySQLD-Max.exe.
Testen von MySQL
Nach dem nächsten Neustart können Sie testen, ob der Eintrag zu dem gewünschten Erfolg
geführt hat. Wechseln Sie dazu in der Eingabeaufforderung in das MySQL-Verzeichnis, dann
in das Unterverzeichnis bin und geben den Befehl mysqladmin ping ein. Z.B.
c:\Web\mysql\bin\mysqladmin ping.
3.1.2 MySQL-Monitor
Um eine MySQL-Datenbank abzufragen, zu aktulaisieren oder zu erstellen, benutzen Sie das
Kommandozeilen-Programm mysql.exe unter Windows. Korrekt heißt dieses Programm
MySQL-Monitor.
(Abb.8: MySQL-Monitor)
Starten Sie MySQL-Monitor ohne weitere Parameter, versucht es zur lokalen MySQLDatenbank (localhost) ohne spezifizierten Benutzer und ohne Passwort zu verbinden.
Das funktioniert nur, wenn der Zugriff ohne Passwort erlaubt ist, was aber nach der
Installation ohne weiteres Eingreifen der Fall ist.
45
Mit Hilfe des MySQL-Monitors ist es möglich, eine Verbindung zu jeder beliebigen MySQLDatenbank auf der Welt aufzubauen. Sie benötigen lediglich die entsprechenden Rechte und
Kennwörter.
(Abb.9: Information zu MySQL-Monitor)
In die Eingabezeile des MySQL-Monmitors geben Sie verschiedene Steuerkommandos ein,
die mit „\“ beginnen, oder beliebige 4SQL-Kommandos, die MySQL unterstützt.
MySQL-Kommando
Funktion
show database;
Gibt alle erzeugten Datenbanken zurück. Es sollte mindestens die
Datenbank mysql angezeigt werden.
use test;
Verwendet die Datenbank mit dem Namen test. Alle weiteren
SQL-Kommandos beziehen sich dann auf diese Datenbank.
show tables;
Zeigt alle erzeugten Tabellen der aktuell gewählten Datenbank an.
quit oder exit
Beendet MySQL-Monitor.
Das Kommandozeilen-Programm unterstützt zahlreiche Parameter, die Sie erhalten, wenn Sie
mysql –-help eintippen.
46
3.1.3 phpMyAdmin
Bei Webspace-Angeboten mit MySQL richten die Hosts die Datenbank fast immer so ein,
dass ein Zugriff nur von einer oder wenigen IP-Adressen möglich ist. Zu diesen Adressen
gehört normalerweise immer die des Webservers, aber nur selten der heimische PC. Es bleibt
daher nur die Möglichkeit, ein Programm auf dem Webserver zu installieren, das Vermittler
ist und gleichzeitig die Oberfläche zur Datenbank herstellt.
Um eine Datenbank sowie deren Tabellen komfortabel und einfach zu verwalten, gibt es von
PHP ein Programm, nämlich phpMyAdmin. PhpMyAdmin ist ein Set an PHP-Skripts, die
eine Menü- und Formulargesteuerte Verwaltung einer MySQL-Datenbank über das Internet
ermöglichen.
Damit phpMyAdmin richtig funktioniert, ist es erforderlich, dass der Webserver Dateien mit
der Erweiterung .PHP3 an die PHP-Engine weiterleitet, falls Sie keine spezielle Version von
PhpMyAdmin für PHP4 besitzen.
Sie können PHPMyAdmin im Internet unter der Adresse http://phpmyadmin.sourceforge.net/
herunterladen.
Installieren Sie phpMyAdmin in das Dokumenten-Verzeichnis des Webservers, so dass das
Verzeichnis phpmyadmin entsteht. Z.B. c:\Web\apache\htdocs\phpmyadmin.
Öffnen Sie die Datei confic.inc.php3 im Verzeichnis phpmyadmin mit einem
Texteditor, zum Beispiel WordPad. Stellen Sie wie in der unteren Abbildung die korrekten
Werte ein.
// The $cfgServers array starts with $cfgServers[1]. Do not use $cfgServers[0].
// You can disable a server config entry by setting host to ''.
$cfgServers[1]['host'] = 'localhost';
// MySQL hostname
$cfgServers[1]['port'] = '';
// MySQL port - leave blank for default port
$cfgServers[1]['adv_auth'] = false;
// Use advanced authentication?
$cfgServers[1]['stduser'] = '';
// MySQL standard user (only needed with
advanced auth)
$cfgServers[1]['stdpass'] = '';
// MySQL standard password (only needed with
advanced auth)
47
$cfgServers[1]['user'] = 'root';
$cfgServers[1]['password'] = '';
auth)
$cfgServers[1]['only_db'] = 'Verwaltung';
$cfgServers[1]['verbose'] = '';
show the hostname
$cfgServers[1]['bookmarkdb'] = '';
support
$cfgServers[1]['bookmarktable'] = '';
support
// MySQL user (only needed with basic auth)
// MySQL password (only needed with basic
// If set to a db-name, only this db is accessible
// Verbose name for this host - leave blank to
// Bookmark db - leave blank for no bookmark
// Bookmark table - leave blank for no bookmark
Sie starten phpMyAdmin durch die Eingabe von http://localhost/phpMyAdmin/index.php3.
(Abb.10: PhpMyAdmin)
Nach dem Start von phpMyAdmin erscheint das Begrüssungsfenster. PhpMyAdmin besteht
aus einem Frameset. Im linken Frame wechseln Sie die aktuelle Datenbank und Tabelle, im
rechten werden Abfragen ausgeführt.
48
Um alle Tabellen einer Datenbank zu sehen, klicken Sie im linken Rahmen auf den Namen
der Datenbank. Das entspricht dem MySQL-Befehl SHOW TABLES. Natürlich benötigen Sie
die entsprechenden Zugriffsrechte.
Datenbankbezogene Aktionen, wie beispielsweise das „Anlegen von Tabellen“ oder
„Abfragen von Tabellen“ werden im linken Rahmen ausgeführt, indem Sie auf die Tabelle
klicken, auf der sich die Aktion bezieht.
Grundsätzlich kann man mit MySQL-Monitor und PhpMyAdmin die gleichen Funktionen
ausführen. Gegebenenfalls unterscheidet sich die Vorgehensweise. Die Seite mit den
Tabellenübersichten einer Datenbank enthält ein SQL-Fenster, in das Sie beliebige SQLBefehle eintippen können. Damit sind Sie nicht an die manchmal gewöhnungsbedürftige
Menüführung von PhpMyAdmin gebunden.
49
3.1.4 PHP und Datenbanken
3.1.4.1
Verbindung zum Datenbankserver
Um PHP mit einer MySQL-Datenbank zu verbinden, braucht man zuerst eine Verbindung
zum Datenbankserver. Diese Verbindung ist Vorraussetzung, um eine bestimmte Datenbank
auf dem Datenbankserver auszuwählen.
Es stehen zwei Funktionen für diesen Zweck zur Verfügung: mysql_connect() und
mysql_pconnect(). Der Unterschied zwischen diesen beiden Funktionen besteht darin,
dass die Verbindung, die mysql_pconnect() erstellt, auch nach Ende des Programms
bestehen bleibt und bei einem erneuten Aufruf von mysql_pconnect() wieder genutzt
werden kann. Verbindungen, die mysql_connect() erstellt, verlieren nach Ablauf ihre
Gültigkeit.
Syntax:
int mysql_connect(string host, string benutzer, string
passwort);
Der Funktion werden drei Parameter übergeben, die den Namen des Datenbankservers, den
anzumeldenden Benutzer und dessen Passwort bestimmen. Der Rückgabewert ist ein
sogenannter Link-Identifizierer, der für andere MySQL-Funktionen benötigt wird. Die Syntax
von mysql_pconnect() ist gleich. Der Rückgabewert ist FALSE, wenn keine
Verbindung zum Datenbankserver hergestellt werden konnte.
Die Paramteter sind optional, Standardwerte sind host = localhost, benutzer = Benutzer und
Passwort = keins.
50
Auswählen der Datenbank
Auf der Grundlage einer bestehenden Verbindung kann das PHP-Programm eine Datenbank
auf dem Datenbankserver auswählen. PHP bietet für diesen Zweck die Funktion
mysql_select_db().
Syntax:
int mysql_select_db(string db_name [, int linkID]);
Als Parameter werden der Name der Datenbank und der Rückgabewert der Funktion
mysql_connect() übergeben. Diese Funktion liefert FALSE zurück, wenn die Datenbank
nicht ausgewählt werden kann. Der Parameter linkID kann entfallen, PHP nutzt in diesem
Fall den zuletzt erzeugten Link. Das gilt ebenso für alle anderen Funktionen, die linkID als
optionalen Parameter enthalten.
<?php
?>
$linkID = mysql_connect("localhost", "root", "");
if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt.");
if (mysql_select_db("Personalwesen", $linkID))
echo("Die Datenbank Personalwesen wurde ausgewählt.");
else
die ("Fehler beim auswählen der Personalwesen!");
3.1.4.2
Befehle an die Datenbank schicken
Wurde eine Verbindung zum Datenbankserver hergestellt und eine Datenbank auf diesem
Server ausgewählt, können SQL-Befehle an die Datenbank geschickt werden.
Für die Verwendung der Befehle INSERT, SELECT, UPDATE oder eines sonstigen SQLBefehles wird in PHP nur eine einzige Funktion verwendet.
Syntax:
int mysql_query(string sql [, int linkID]);
51
Der Funktion mysql_query() werden eine SQL-Zeichenfolge und die linkID der
Verbindung übergeben. Die SQL-Zeichenfolge soll aber kein abschließendes Semikolon
enthalten.
Der Rückgabewert ist eine ID, die Sie zum Abfragen der Ergebnismenge benutzen können. Ist
die SQL-Abfrage fehlerhaft oder haben Sie keinen entsprechenden Zugriff auf die
entsprechenden Tabellen, dann gibt diese Funktion den Wert FALSE zurück.
Senden des SQL-Befehls SELECT name, adresse FROM Kunden:
<?php
$linkID = mysql_connect("localhost", "root", "");
if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt.");
if (mysql_select_db("Personalwesen ", $linkID))
echo("Die Datenbank Personalwesen wurde ausgewählt.");
else
die ("Fehler beim auswählen der Personalwesen!");
// SELECT-Befehl
$abfrage = "SELECT * FROM job";
$resID = mysql_query($abfrage, $linkID);
if (!resID) die ("Es ist ein Fehler in der SQL-Anweisung azufgetreten.");
?>
3.1.4.3
Datensätze der Abfrage ermitteln
Nachdem eine Abfrage an den Datenbankserver mit mysql_query() gesendet wurde, wird eine
andere Funktion zum Erhalten der Daten vom Datenbankserver benötigt.
Diese Funktion darf jedoch nur benutzt werden, wenn die gesendete Abfrage auch eine
Ergebnismenge zurückliefert. Zum Abfragen der Daten eignet sich die Funktion
mysql_fetch_array().
Syntax:
Array mysql_fetch_array(int resID [, int ErgTyp]);
52
Mysql_fetch_array() wird mit dem Rückgabewert der Funktion mysql_query()
als erster Parameter aufgerufen. Der zweite optionale Parameter bestimmt, ob das Array ein
indiziertes Array (MYSQL_NUM), ein assoziatives Array (MYSQL_ASSOC) oder beides
(MYSQL_BOTH) ist.
Der Rückgabewert der Funktion ist ein Array, das die Zelleninhalte eines Datensatzes enthält.
Um mehrere Datensätze abzurufen, müssen die Funktionen erneut aufgerufen werden. Der
Rückgabewert der Funktion ist FALSE, wenn kein weiterer Datensatz verfügbar ist.
Bildschirmausgabe der Datensätze von SELECT name, adresse FROM Kunden.
<?php
$linkID = mysql_connect("localhost", "root", "");
if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt.");
if (mysql_select_db("Personalwesen ", $linkID))
echo("Die Datenbank Personalwesen wurde ausgewählt.");
else
die ("Fehler beim auswählen der Personalwesen!");
// SELECT-Befehl
$abfrage = "SELECT * FROM job";
$resID = mysql_query($abfrage, $linkID);
if (!resID) die ("Es ist ein Fehler in der SQL-Anweisung aufgetreten.");
?>
// Ausgabe der Datensätze
while ($zeile = mysql_fetch_array ($resID, MYSQL_BOTH))
{
echo ("Name: " .$zeile[0]);
echo (" - Adresse: " $zeile["adresse"] . "<br>\n");
Auf das erste Feld der Ergebnistabelle (Name) wird mit Hilfe des Index zugegriffen, auf das
zweite Feld (Adresse) assoziativ.
3.1.4.4
PHP-Funktionen für MySQL
In diesem Kapitel werden einige wichtige PHP-Funktionen für MySQL-Datenbanken
erläutert.
53
mysql_affected_rows
int mysql_affected_rows ([int resID])
Gibt eine Anzahl der Datensätze zurück, die nach einem UPDATE-, INSERT- oder DELETEBefehl betroffen waren. Der Parameter bestimmt die Ergebnis-ID von mysql_query().
mysql_close
int mysql_close ([int linkID])
Schließt eine mit mysql_connect() geöffnete Verbindung. Wird die linkID
weggelassen, wird die letzte geöffnete Verbindung geschlossen.
Eine Verbindung eines PHP-Skripts wird jedoch automatisch geschlossen, wenn das Skript
beendet ist.
mysql_create_db
int mysql_create_db(string dbName, [, int linkID])
Erstellen einer Datenbank mit den Namen dbName.
mysql_data_seek
int mysql_data_seek (int resID, int znummer)
Bewegt den Datensatzzeiger der Abfrage in resID nach zNummer.
mysql_db_query
54
int mysql_db_query(string database, string abfrage [, int
linkID])
Sendet einen SQL-Befehl, ermöglicht aber im Gegensatz zu mysql_query() zusätzlich die
Angabe eines Datenbankservers.
mysql_drop_db
bool mysql_drop_db(string dbname [, int linkID])
Löscht die Datenbank dbName in der Verbindung von linkID.
mysql_errno
int mysql_errno([int linkID])
Gibt eine Fehlernummer der letzten MySQL-Operation der Verbindung linkID zurück. Der
Rückgabewert ist 0, wenn kein Fehler auftrat.
mysql_error
string mysql_error([int linkID])
Gibt eine Fehlermeldung der MySQL-Operation zurück.
mysql_escape_string
string mysql_escape_string(string sql)
Maskiert Sonderzeichen in einem SQL-Befehl.
55
mysql_fetch_assoc
Wie mysql_fetch_array, der Ergebnistyp ist aber ausschließlich ein assoziatives Array.
mysql_fetch_field
Object mysql_fetch_field(int resID [, int feldNr])
Mit mysql_fetch_field() kann man sich anhand der resID ein Objekt mit
Feldinformationen aus einem Abfrage zurückgeben lassen. Gibt man den optionalen
Parameter Feld-Offset nicht an, so werden die Informationen des nächsten Feldes geliefert,
das noch nicht mit mysql_fetch_field() ausgegeben wurde.
Eigenschaft
Beschreibung
Object->table
Name der Tabelle, aus der das Feld stammt
Object->max_lenght
Maximale Spaltenbreite
Object->not_null
Enthält 1, wenn die Spalte keine NULL-Werte annehmen kann
Object->primary_key
Enthält 1, wenn die Spalte Primärschlüssel ist
Object->unique_key
Enthält 1, wenn die Spalte ein eindeutiger Schlüssel ist
Eigenschaft
Beschreibung
Object->multiple_key
Enthält 1, wenn die Spalte ein "gewöhnlicher" Schlüssel ist
Object->numeric
Enthält 1, wenn die Spalte numerisch ist
Object->blob
Enthält 1, wenn die Spalte ein BLOB ist
Object->type
Datentyp der Spalte
Object->unsigned
Enthält 1, wenn die Spalte keine negative Zahlen speichern kann
Object->zerofill
Enthält 1, wen die Spalte den Zusatz ZEROFILL hat
mysql_fetch_object
Wie mysql_fetch_array, aber der Rückgabewert besitzt eine Objektstruktur.
56
mysql_fetch_row
Wie mysql_fetch_array, aber der Rückgabewert ist ausschließlich ein indiziertes Array.
mysql_insert_id
int mysql_insert_id([int linkID])
Gibt den letzten eingefügten Autowert der Verbindung linkID zurück. Der Funktionsaufruf
muss unmittelbar nach dem INSERT-Befehl erfolgen. Er funktioniert nicht, wenn die
Autowert-Spalte den Datentyp BIGINT hat.
mysql_num_fields
int mysql_num_fields(int resID)
Gibt die Anzahl der Spalten der Abfrage resID zurück.
mysql_num_rows
int mysql_num_rows(int resID)
Gibt die Anzahl der Datensätze der Abfrage resID zurück, die eine SELECT-Abfrage war.
Setzt man vor eine der oben angegebenen Funktionen ein „@“, dann wird die Fehlerausgabe
der Funktion unterdrückt.
Beispiel:
<?php
$linkID = mysql_connect("localhost", "root", "");
if (!$linkID) die("Es wurde keine Verbindung zum Datenbankserver hergestellt.");
if (mysql_select_db("Personalwesen ", $linkID))
echo("Die Datenbank Personalwesen wurde ausgewählt.");
else
die ("Fehler beim auswählen der Personalwesen!");
57
// SELECT-Befehl
$abfrage = "SELECT * FROM job";
// verursacht mysql_query einen Fehler, dann wird die Ausgabe unterdrückt
$resID = @mysql_query($abfrage, $linkID);
if (!resID) die ("Es ist ein Fehler in der SQL-Anweisung azufgetreten.");
?>
3.1.4.5
Ein allgemeines Beispiel für PHP in Verbindung mit
MySQL-Datenbanken
In diesem Kapitel möchte ich ein kleines PHP-Skript vorstellen, mit dem Sie Daten aus einer
Tabelle ausgeben können. Das Skript greift auf die Datenbank „Personalwesen“ und die
Tabelle „Job“ zu und gibt den Inhalt der Tabelle in einer HTML-Tabelle aus.
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY BGCOLOR="#FFFFF">
<?php
// Verbidnung zu MySQL herstellen
$linkID = mysql_connect("","","");
if (!$linkID)
die("Es konnte keine Verbindung zu MySQL hergestellt werden.");
// Datenbank "Personalwesen" auswählen
if (mysql_select_db("Personalwesen", $linkID))
echo("Die Datenbank Personalwesen wurde ausgewählt.");
else
echo("Fehler!");
// einen SQL-Befehl an die Datenbank schicken
$abfrage = "SELECT * FROM job";
$resID = mysql_query($abfrage, $linkID);
if (!$resID)
die ("Es ist ein Fehler in der Abfrage aufgetreten.");
// Ausgabe der Datensätze in Tabellenform
echo("<table border cellpadding=\"3\"><tr>");
while($field=mysql_fetch_field($resID))
echo("<th>$field->name</th>");
while ($zeile = mysql_fetch_array($resID,MYSQL_BOTH))
{
echo("<tr>");
for($i=0; $i<mysql_num_fields($resID); $i++)
echo("<td>".htmlentities($zeile[$i])."</td>");
58
echo("</tr>\n");
}
echo("</table>");
?>
</BODY></HTML>
59
3.1.5 Anlegen einer Datenbank unter MySQL
Bevor Tabellen angelegt werden, ist es erforderlich eine Datenbank anzulegen.
Der dazugehörige Befehl in MySQL lautet:
CREATE DATABASE [IF NOT EXISTS] db_name;
IF NOT EXISTS dient zum Überprüfen, ob die Datenbank bereits existiert oder nicht.
Das Anlegen einer Datenbank in MySQL hat zur Folge, dass im Datenverzeichnis von
MySQL z.B. C:\WEB\MYSQL\DATA ein Unterverzeichnis mit dem Namen der Datenbank
erzeugt wird.
(Abb.11: Erstellen einer Datenbank mit MySQL-Monitor)
Datenbankbezogene SQL-Befehle in MySQL
Befehl
Funktion
DROP DATABASE db_name;
Dieser Befehl löscht die Datenbank db_name und alle darin
enthaltenen Tabellen.
USE db_name;
Wählt db_name als aktuelle Datenbank aus.
SHOW DATABASES;
Listet alle verfügbaren Datenbanken auf.
Für diese Diplomarbeit wurde die Datenbank Personalwesen aus dem Vorlesungsskript
Datenbanken von Prof. Sauer als beispielhafte Anwendung benutzt (http://rfhs8012.fh-
60
regensburg.de/~saj39122/DB/). Dazu muss zuerst die Datenbank mit dem CREATE
DATABASE Befehl erzeugt werden, wir die untere Abbildung zeigt.
61
3.1.6 Erstellen und Verwalten von Tabellen
Als nächstes müssen die Tabellen der Datenbank Personalwesen erzeugt werden.
Die Syntax dazu lautet:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(TABELLENDEFINITION, …)}
[TABELLENOPTIONEN]
[SELECT-Befehl]
Das reservierte Wort TEMPORARY erzeugt eine flüchtige Tabelle, die nur solange besteht wie
die Verbindung zur Datenbank. Der Befehl wurde jedoch beim Erstellen der Tabellen nicht
benötigt.
Durch die Angabe von IF NOT EXISTS wird keine Fehlermeldung ausgegeben, wenn die
Tabelle bereits existiert. Allerdings werden die Strukturen von alter und neuer Tabelle nicht
überprüft.
3.1.6.1
Tabellen mit MySQL-Monitor anlegen
Die zu erzeugenden Tabellen wurden mit einem Texteditor geschrieben und dann unter dem
Dateinamen C:\EIGENE DATEIEN\DB\TABLES.SQL gespeichert.
Die Tabellen haben folgenden Aufbau:
CREATE TABLE abteilung (abt_id VARCHAR(2) NOT NULL PRIMARY KEY
bezeichnung VARCHAR(40));
CREATE TABLE job (job_id VARCHAR(2) NOT NULL PRIMARY KEY,
titel VARCHAR (30), gehalt DOUBLE(8,2));
62
CREATE TABLE angestellte (ang_id VARCHAR (3) NOT NULL PRIMARY
KEY, name VARCHAR (10), gebdatum DATE, abt_id VARCHAR (2),
CONSTRAINT FKabt_id FOREIGN KEY(abt_id)
REFRENCES abteilung(abt_id) ON DELETE CASCADE,
job_id VARCHAR(2), CONSTRAINT FKjob_id1 FOREIGN KEY(job_id)
REFERENCES job(job_id) ON DELETE CASCADE);
CREATE TABLE qualifikation(ang_id VARCHAR(3) NOT NULL, FOREIGN
KEY(ang_id) REFERENCES angestellte(ang_id) ON DELETE CASCADE,
job_id VARCHAR(2) NOT NULL, CONSTRAINT FKjob_id2 FOREIGN
KEY(job_id) REFERENCES job(job_id) ON DELETE CASCADE,
CONSTRAINT PKquali PRIMARY KEY(ang_id,job_id));
Um die Tabellen anzulegen, wechseln Sie in das MySQL-Verzeichnis in meiner Installation
war das C:\WEB\MYSQL\BIN.
Die Tabellen werden mit dem MySQL-Monitor in einer Kommandozeile wie folgt angelegt:
\. C:\EIGENE~1\DB\TABLES.SQL
(Abb.12: Erstellen der Tabellen mit MySQL-Monitor)
63
3.1.6.2
Tabellen mit phpMyAdmin anlegen
PhpMyAdmin bietet drei gängige Möglichkeiten, Tabellen anzulegen. Zuerst muss
phpMyAdmin mit der URL http://localhost/phpmyadmin/index.php3 gestartet werden. Als
nächstes muss die Datenbank Personalwesen ausgewählt werden.
Variante 1
Eingeben eines SQL-Befehls in das SQL-Eingabefeld.
Variante 2
Durch klicken auf den Button Durchsuchen kann eine Datei ausgewählt werden, die SQLBefehle enthält (z.B. C:\EIGENE DATEIEN\DB\TABLES.SQL).
Variante 3
Die Tabellen können auch einzeln menügesteuert angelegt werden. Unter dem Menüpunkt
Neue Tabelle erstellen in Datenbank Personalwesen kann die Tabelle
mit der Anzahl der Felder festgelegt werden.
64
(Abb.13: Auswahl einer Datenbank mit PhpMyAdmin)
Bei Aktivieren des Buttons OK wird die Seite mit der Tabellendefinition angezeigt.
(Abb.14: Erstellen von Tabellen mit PhpMyAdmin)
Wurden alle CREATE TABLE-Befehle richtig ausgeführt, dann sollte die Datenbank
folgenden Aufbau haben:
65
(Abb.15: Tabellen der Datenbank „Personalwesen“ unter PhpMyAdmin)
3.1.6.3
Hinzufügen von Datensätzen
Es wurden nun alle vier Tabellen erzeugt. Nun können die dazugehörigen Datensätze mit dem
SQL-Befehl INSERT in die Tabellen eingefügt werden. Die dazugehörige Syntax lautet:
INSERT INTO tbl_name [(Spalte1, Spalte2, ...)] VALUES (Wert1,
Wert2, ...);
Die Daten werden in die Tabelle tbl_name eingefügt. Die Spaltennamen links von VALUES
stehen mit den Werten rechts von VALUES in Beziehung. Für jeden Attributnamen auf der
linken Seite muss auf der rechten Seite ein Wert stehen.
Werden auf der linken Seite keine Attributnamen angegeben, dann muss auf der rechten Seite
für jedes Attribut ein Wert angegeben werden.
Die dazugehörigen Daten können von der Hompage von Prof. Sauer unter http://rfhs8012.fhregensburg.de/~saj39122/DB/ heruntergeladen werden und dann entweder über eine Datei mit
den SQL-Monitor oder mit phpMyAdmin eingefügt werden. Es besteht außerdem die
Möglichkeit, die Daten per Hand mit phpMyAdmin zu erstellen.
Als Beispiel wurden die INSERT INTO-Befehle von aus dem Vorlesungsskript
Datenbanken von Prof. Sauer (http://rfhs8012.fh-regensburg.de/~saj39122/DB/) in die Datei
INSERTS.SQL geschrieben und dann über den SQL-Monitor erstellt.
66
insert into abteilung values ('KO','Konstruktion');
insert into abteilung values ('OD','Organisation und
Datenverarbeitung');
insert into abteilung values ('PA','Personalabteilung');
insert into abteilung values ('RZ','Rechenzentrum');
insert into abteilung values ('VT','Vertrieb');
insert into job values ('KA','Kaufm. Angestellter',3000.00);
insert into job values ('TA','Techn. Angestellter',3000.00);
insert into job values ('PR','Programmierer',3000.00);
insert into job values ('SY','Systemplaner',6000.00);
insert into job values ('IN','Ingenieur',6000.00);
insert into job values ('OR','Operateur',3500.00);
insert into angestellte values
('A1','Fritz','02.01.1950','OD','SY');
insert into angestellte values
('A2','Tom','02.01.1951','KO','IN');
insert into angestellte values
('A3','Werner','23.01.1948','OD','PR');
insert into angestellte values
('A4','Gerd','03.11.1955','VT','KA');
insert into angestellte values
('A5','Emil','02.03.1960','PA','PR');
insert into angestellte value
('A6','Uwe','03.04.1952','RZ','OP');
insert into angestellte values
('A7','Erna','17.11.1955','KO','TA');
insert into angestellte values
('A8','Rita','02.12.1957','KO','TA');
insert into angestellte values
('A9','Ute','08.09.1962','OD','SY');
insert into angestellte values
('A10','Willi','07.07.1956','KO','IN');
67
insert into angestellte values
('A12','Anton','05.07.1948','OD','SY');
insert into angestellte values
('A13','Josef','02.08.1952','KO','SY');
insert into angestellte values
('A14','Maria','17.09.1964','PA','KA');
insert into qualifikation values ('A1','SY');
insert into qualifikation values ('A1','PR');
insert into qualifikation values ('A1','OP');
insert into qualifikation values ('A2','IN');
insert into qualifikation values ('A2','SY');
insert into qualifikation values ('A3','PR');
insert into qualifikation values ('A4','KA');
insert into qualifikation values ('A5','PR');
insert into qualifikation values ('A6','OP');
insert into qualifikation values ('A7','TA');
insert into qualifikation values ('A8','TA');
insert into qualifikation values ('A9','IN');
insert into qualifikation values ('A9','SY');
insert into qualifikation values ('A10','IN');
insert into qualifikation values ('A11','KA');
insert into qualifikation values ('A12','SY');
insert into qualifikation values ('A13','IN');
insert into qualifikation values ('A14','KA');
(Abb.16: Insert-Befehle unter MySQL-Monitor)
Die Daten können über den Button Einfügen mit phpMyAdmin auch eingefügt werden.
68
(Abb.17: füllen der Tabellen mit Daten unter PhpMyAdmin)
Man kann sich nun mit phpMyAdmin die Tabelleninhalte anzeigen lassen. Die Tabelle
Angestellte sollte nun die folgenden Datensätze beinhalten:
(Abb.18: anzeigen der Tabelleninhalte unter PhpMyAdmin)
69
(Abb. 19: Datensätze der Tabelle „Angestellte“)
70
3.1.7 PHP-Skripte in Anwendung mit einer MySQL-Datenbank
am Beispiel der Datenbank Personalwesen
In diesem Kapitel wird anhand einer beispielhaften Anwendung PHP mit einem MySQLZugriff vorstellen. Dazu wurde ein HTML-Formular entwickelt, das an ein PHP-Skript eine
SQL-Anweisung abschickt und dann die SQL-Anweisung ausführt.
3.1.7.1 Das HTML-Formular PHP_Formular
(Abb.20: PHP-Formular)
In diesem Formular kann man anhand der Radiobuttons die SQL-Anweisung auswählen, die
von PHP verarbeitet werden soll. Wählt man den Button SELECT, kann im unteren Textfeld
71
ein Select-Befehl eingegeben werden. Durch Aktivieren des Buttons „Abschicken“ wird der
SELECT-Befehl an das PHP-Skript SQL.php3 weitergeleitet. Das PHP-Skript überprüft den
eingegebenen SELECT-Befehl auf seine Richtigkeit und gibt dann das Ergebnis in einer
Tabelle wieder aus.
Als Datenbank wurde die Datenbank Personalwesen von aus dem Vorlesungsskript
Datenbanken von Prof.. Sauer (http://rfhs8012.fh-regensburg.de/~saj39122/DB/) verwendet.
Die Anweisung SELECT * FROM JOB; bewirkt dann folgende Ausgabe:
(Abb.21: Ergebnis einer SELECT-Anweisung)
Das Feld Nr dient nur zur Übersicht für den Benutzer und ist kein Primärschlüssel der
Tabelle. Der eingegebene SQL-Befehl muss nicht mit Strichpunkt (;) beendet werden. Dieser
Strichpunkt kann auch weggelassen werden. Gross- und Kleinschribung muss auch nicht
72
beachtet werden. Es kann jeder beliebige SELECT-Befehl in das Textfeld des HTMLFormulars PHP_Formular eingegeben werden.
Es können auch komplexere SELECT-Anweisungen an die Datenbank geschickt werden.
Jeder Befehl unterstützt, der MySQL bekannt ist, wird unterstützt.
Z.B.
liefert
die
SELECT-Anweisung
SELECT
*
FROM
Angestellte,
Qualifikation WHERE Angestellte.ang_id = Qualifikation.ang_id
folgendes Ergebnis:
(Abb.22: Ergebnis einer komplexeren SELECT-Anweisung)
Code des Formulars
<title>PHP-Skripte in Anwendung mit einer MySQL-Datenbank</title>
<body bgcolor="#fffff#"><br>
<h1>PHP-Skripte in Anwendung mit einer MySQL-Datenbank</h1>
<form method="post" action ="SQL.php3">
<table>
<h2>Es werden folgende SQL-Anweisungen von PHP unterstützt</h2>
73
<table border="3">
<tr>
<th><input type ="radio" NAME = "Auswahl" VALUE = "Select" CHECKED> SELECT </th>
<th><input type ="radio" NAME = "Auswahl" VALUE = "Create" > CREATE-Table</th>
</tr>
<tr>
<th><input type ="radio" NAME = "Auswahl" VALUE = "Update" >UPDATE<BR>&nbsp
INSERT<BR> &nbsp DELETE</th>
<th><input type ="radio" NAME = "Auswahl" VALUE = "Drop" >DROP-Table<BR>
</tr>
<tr>
<th>&nbsp</th>
<th><input type ="radio" NAME = "Auswahl" VALUE = "Alter" > ALTER-Table</th>
</tr>
</table>
<BR><BR>Bitte geben Sie die SQL-Anweisung ein:<BR><BR>
<textarea name="Anweisung" rows="10" cols="95"></textarea><br>
<input type ="submit" Value ="Abschicken" size ="25">
<input type ="reset" Value = "Eingaben löschen" size = "25">
</form></body></head>
Durch den HTML-Befehl <form method="post" action ="SQL.php3"> werden
alle Eingaben des Formulars an die Datei SQL.php3 übergeben. Jeder Elementname wird in
das globale Feld $_Post geschrieben, das von PHP zum ermitteln der übergebenen
Variablen dient. Genauso gut kann der Inhalt des Formulars auch an dieselbe Datei geschickt
werden.
In PHP wird dann mit der foreach-Schleife, der Schleife für Felder, der Inhalt des Feldes
$_Post über den Feldschlüssel $var ermittelt und in ein Feld mit den Namen $array()
geschrieben.
Danach kann über den Feldindex des beschriebenen Feldes $array() der Inhalt in die
Variablen $Anweisung und $Auswahl geschrieben werden. In $Anweisung steht dann
der SQL-Befehl und in $Auswahl der Inhalt der Radiogruppe. Die einzelnen Buttons
können dann über den String wie z.B. „Select“ in PHP überprüft werden.
Die Befehle zum ermitteln der Inhalte des Post-Befehls lauten:
$array = array();
74
// ermitteln der Inhalte des Globalen Feldes $_Post, die über das HTML-Formular geschickt
// wurden
foreach ($_POST as $var => $value)
{
$array[] = $value;
}
// zuweisen der Feldinhalte
$Auswahl = $array[0];
$Anweisung = $array[1];
Der Befehl zum überprüfen des Inhalts der des ausgewählten Radiobuttons lautet dann:
if($Auswahl==“Select“)
{
// Anweisung
}
Tritt die If-Anweisung ein, so kann der SELECT-Befehl abgearbeitet werden. Das übernimmt
jedoch das PHP-Skript SQL.php3 und wird im nächsten Abschnitt ausführlich erklärt.
Die Inhalte der Post-Variable kann auch anders ermittelt werden. Man kann mit dem Befehl
$HTTP_POST_VARS auf den Inhalt zugreifen. $HTTP_POST_VARS ist ebenfalls ein Feld
und der Inhalt dieses Feldes kann z.B. mit $HTTP_POST_VARS[’Anweisung’]
ermittelt werden. Der Vorteil dieses Befehls ist, das die Inhalte nicht mehr durch eine Schleife
ermittelt werden müssen und diese Art der Ermittlung der Inhalte der Post-Variable ist
sicherer (siehe Diplomarbeit von Zimmermann Stefan unter der folgenden Seite:
http://rfhs8012.fh-regensburg.de/~saj39122/Meile.html).
Die Befehle haben dann folgendes aussehen:
// zuweisen der Feldinhalte
$Auswahl = $HTTP_POST_VARS['Auswahl'];
$Anweisung = $HTTP_POST_VARS['Anweisung'];
Der Feldinhalt muss jedoch nicht unbedingt in die Variablen geschrieben werden.
75
3.1.7.2
Das PHP-Skript der SQL-Anweisungen
Für die Implementierung der SQL-Anweisungen wurde eine Klasse mysql_db erstellt, die
folgendenen Inhalt umfasst:
-
Es soll eine automatische Verbindung zur Datenbank Personalwesen von Prof.
Sauer hergestellt werden.
-
Es sollen die Befehle SELECT, UPDATE, INSERT, DELETE, CREATE-TABLE,
ALTER-TABLE und DROP-TABLE ausgeführt werden.
-
Die eingegebenen SQL-Anweisungen müssen auf Fehler überprüft werden.
-
Bei allen Befehlen aus dem SELECT-Befehl soll der Name der
betroffenen
Tabelle mit ausgegeben werden.
-
Bei einem UPDATE-, INSERT- oder DELETE-Befehl soll die Tabelle komplett
ausgegeben werden.
3.1.7.2.1 Hauptprogramm und Klassenvariablen
Im Hauptprogramm der Datei SQL.php3 wird eine Instanz der Klasse mysql_db erzeugt.
Nun muss als nächstes der Inhalt des globalen Feldes $_Post, wie oben beschrieben
ermittelt werden. Danach wird anhand der Radiobuttons des Formulars die SQL-Anweiung
mit einer SWITCH-Anweisung ermittelt. Wird der Button SELECT ausgewählt, wird die
Funktion query() aufgerufen, die den SELECT-Befehl weiterverarbeitet. Bei der Auswahl
des Buttons UPDATE wird die Funktion geanderte_Dts() aufgerufen, die die SQLAnweisungen INSERT, UPDATE und DELETE verarbeitet usw.
Syntax:
$datenbank = new mysql_db;
$array = array();
// ermitteln der Inhalte des Globalen Feldes $_Post, die über das HTML-Formular geschickt
76
// wurden
foreach ($_POST as $var => $value)
{
$array[] = $value;
}
// zuweisen der Feldinhalte
$Auswahl = $array[0];
$Anweisung = $array[1];
// Select-Anweisung an die Datenbank schicken
switch($Auswahl)
{
case "Select" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->query($Anweisung);
break;
case "Update" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung
eingegeben.");
else $datenbank->geanderte_Dts($Anweisung);
break;
case "Create": if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->Create_Table($Anweisung);
break;
case "Alter" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->Alter_Table($Anweisung);
break;
case "Drop" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->Drop_Table($Anweisung);
break;
}
Es wurden nur drei Klassenvariablen benötigt. Die Verbindung zur Datenbank mit $linkID,
der Datenbankname $db und das Ergebnis der SQL-Anweisungen werden in die Variable
$resID gespeichert. Diese Variablen sind in jeder Funktion der Klasse zugänglich.
Syntax:
class mysql_db
{
var $linkID = false;
var $resID = false;
var $db = "Personalwesen";
....
}
77
3.1.7.2.2 Konstruktor der Klasse mysql_db
Der Konstruktor der Klasse mysql_db ruft die connect_db() Funktion auf, die die Verbindung
zur Datenbank herstellt.
Syntax:
// Konstruktor der Klasse mysql_db
function mysql_db()
{
$this->connect_db();
}
3.1.7.2.3 Die Funktion connect_db()
In dieser Funktion wird die Verbindung zu MySQL und zur Datenbank Personalwesen
hergestellt. Scheitert eine der beiden Anweisungen, wird eine Fehlermeldung ausgegeben, und
das Programm wird abgebrochen.
Syntax:
// Verbindung zur Datenbank
function connect_db()
{
// Verbindung zu MySQL herstellen
$this->linkID = mysql_connect("","","");
if (!$this->linkID)
{
die("Es konnte keine Verbindung zu MySQL hergestellt werden.<BR><BR>");
return false;
}
else
{
echo("Die Verbindung zu MySQL wurde hergestellt.<BR><BR>");
}
// Datenbank Personalwesen auswählen
78
if (mysql_select_db($this->db, $this->linkID))
echo("Datenbank “ . $this->db . “ wurde ausgewählt.<BR><BR>");
else
die("Es ist ein Fehler aufgetreten. Die Datenbank “ . $this->db . “ konnte nicht
ausgewählt werden. <BR><BR>");
}// Ende der Funktion connect_db
3.1.7.2.4 Die Funktion query($sql)
Zuerst werden alle Backslashes (\) in der SQL-Anweisung entfernt. Gibt man nämlich bei
einem SELECT-Befehl z.B. SELECT * FROM job WHERE job_id = ’KO’ ein, so
wird vor jedes Hochkommazeichen ein Backslash angehängt.
Der Befehl hat dann folgendes Aussehen:
SELECT * FROM job WHERE job_id = \’KO\’
Mit der STRING-Funktion stripslashes($string)
werden dann automatisch alle
Backslashes entfernt.
Als nächstes wird dann überprüft, ob sich im angegebenen SELECT-Befehl auch das Wort
SELECT befindet. Das geschieht mit der STRING-Funktion stristr($string,
$suchstring). Mit dieser Funktion kann innerhalb eines Strings nach einer bestimmten
Zeichenkette gesucht werden. Wird das Wort SELECT nicht gefunden, so wird das Programm
abgebrochen.
Nun wird der übergebende String $sql ausgeführt. Dann wird mit der Funktion
echoerror() die Richtigkeit der SQL-Syntax überprüft.
Ist kein Fehler aufgetreten, so wird das Ergebnis anhand einer Tabelle ausgegeben. Zuerst
werden die Feldnamen mit der Funktion mysql_fetch_field() geholt und als
Spaltenüberschrift deklariert. Danach werden die Datensätze in einem array gespeichert und
mit der Funktion mysql_num_fields() zeilenweise ausgegeben.
79
Syntax:
function query($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
// Suche nach dem Wort SELECT
$treffer = stristr($sql, "Select");
if ($treffer==false)
die("Sie haben keine korrekte SELECT-Anweisung eingegeben.");
$this->resID = mysql_query($sql, $this->linkID);
$this->echoerror();
echo("<table border cellpadding=\"3\"><tr>");
echo("<th>Nr</th>");
while($field=mysql_fetch_field($this->resID))
echo("<th>$field->name</th>");
$index = 0;
while ($zeile = mysql_fetch_array($this->resID,MYSQL_BOTH))
{
$index++;
echo("<tr><td>$index</td>");
for($i=0; $i<mysql_num_fields($this->resID); $i++)
echo("<td>".htmlentities($zeile[$i])."</td>");
}
echo("</tr>\n");
echo("</table>");
}// Ende der Funktion query
3.1.7.2.5 Die Funktion echoerror()
In dieser Funktion wird die MySQL-Funktion mysql_error() aufgerufen, die einen
englischen Fehlertext der zuvor ausgeführten Operation zurückgibt.
80
Syntax:
// Ausgabe bei einem Fehler
function echoerror()
{
// Tritt ein Fehler in der SQL-Anweisung auf, dann bricht das Programm ab
if( mysql_error())
{
echo( mysql_error()."<BR><BR>");
echo("Das Programm wurde abgebrochen.");
exit;
}
}// Ende der Funktion echoerror
3.1.7.2.6 Die Funktion geanderte_Dts($sql)
Wird ein UPDATE-, INSERT- oder DELETE-Befehl ausgeführt, dann wird die Funktion
geanderte_Dts($sql) aufgerufen. Der Funktion wird der String $sql übergeben, der
die SQL-Anweisung enthält.
Genau wie bei der Funktion query() werden zuerst alle Backslashes aus dem SQL-Befehl
entfernt und dann wird überprüft, ob sich eines der Wörter UPDATE, INSERT oder DELETE
in der SQL-Anweisung befindet.
Danach wird der SQL-Befehl an die Datenbank geschickt und es wird die Funktion
echoerror() aufgerufen. Als nächste wird die Anzahl der Datensätze, die beim Befehl
betroffen waren, zurückgegeben und es wird die Funktion get_tablename($sql,
„Update“) aufgerufen.
Syntax:
// Betroffene Datensätze bei einem UPDATE, INSERT oder DELETE ermitteln
function geanderte_Dts($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
// suche nach den Worten UPDATE, INSERT, DELETE
$feld = array("Update", "Insert", "Delete");
$falg = false;
81
foreach($feld as $element)
{
$treffer = stristr($sql, $element);
if ($treffer==true)
{
$flag = true;
break;
}
}
if ($flag==false)
die("Sie haben keine korrekte UPDATE-, INSERT-, oder DELETE-Anweisung
eingegeben.");
$this->resID = mysql_query($sql, $this->linkID);
$this->echoerror();
if (mysql_affected_rows()==1)
echo("Die SQL-Anweisung wurde durchgeführt. <BR> Es wurde
mysql_affected_rows() . " Datensatz betroffen.");
else
echo("Die SQL-Anweisung wurde durchgeführt. <BR> Es wurden
mysql_affected_rows() . " Datensätze betroffen.");
".
".
$this->get_tablename($sql,"Update");
}// Ende der Funktion geanderteDts
3.1.7.2.7 Die Funktion get_tablename($sql, $Art)
Diese Funktion ermittelt den Tabellennamen, der bei einem UPDATE, INSERT, DELETE,
ALTER-TABLE, DROP-TABLE oder CREATE-TABLE betroffen wurde. Bei einem
UPDATE, INSERT oder DELETE wird danach die Funktion query() aufgerufen, um das
geänderte Ergebnis anzeigen zu lassen.
Zuerst wird ein dynamisches Feld angelegt, in dem später alle Tabellennamen gespeichert
werden. Alle Tabellen werden mit mysql_list_tables() aufgelistet, und danach wird
die Anzahl der Tabellen der Datenbank mit mysql_num_rows() ermittelt. Als nächstes
wird eine Schleife über die Anzahl der Tabellen durchlaufen, und jeder Tabellenname wird in
das Feld $tabellen gespeichert.
82
Für jedes Element des Feldes $tabellen wird nun überprüft, an welcher Position es im
String $sql vorkommt. Danach wird der Tabellenname ermittelt. Kommt eine der Tabellen
im String vor, dann wird diese Tabelle ausgegeben. Die Art der Ausgabe wird mit einer
SWITCH-Anweisung ermittelt.
Syntax:
function get_tablename($sql,$Art)
{
// dynamisches Feld für die Tabellennamen anlegen
$tabellen = array();
// schreibe alle Tabellen in $result
$result = mysql_list_tables($this->db,$this->linkID);
$menge = mysql_num_rows($result);
// hole die einzelnen Tabellennamen aus $result
for($i = 0; $i < $menge; $i++)
{
$table_name = mysql_tablename($result,$i);
// schreibe die Tabellennamen in das Feld tabellen
$tabellen[] = $table_name;
}
foreach($tabellen as $element)
{
$treffer = strpos($sql,$element);
if ($treffer==true)
{
$flag = true;
$leerzeichen = strpos($sql, " ", $treffer);
$div = $leerzeichen - $treffer;
$tabelle = substr($sql,$treffer, $div);
break;
}
}
if ($flag == true)
{
switch($Art)
{
case "Update" : echo("<BR><BR>");
$this->query("Select * From " . $tabelle);
break;
case "Create" :
echo("Die Tabelle " . $tabelle. " wurde erfolgreich
erstellt.");
break;
case "Drop" :
echo("<BR><BR>Die Tabelle wurde erfolgreich
gelöscht.");
83
break;
case "Alter" :
echo("<BR><BR>Die Tabelle " . $tabelle. " wurde
erfolgreich geändert.<BR>");
$this->query("Select * From " . $tabelle);
break;
}
}
}// Ende der Funktion get_tablename
3.1.7.2.8 Die Funktion Create_Table($sql)
Zu Beginn der Funktion werden die Backslashes vom übergebenen String $sql
abgeschnitten. Danach wird in der SQL-Anweisung nach dem String CREATE gesucht.
Wurde der String gefunden, dann wird der Befehl ausgeführt. Die Funktion echoerror()
wird
aufgerufen
und
die
neu
erstellte
Tabelle
wird
mit
der
Funktion
get_tablename($sql) ausgegeben.
Syntax:
// In dieser Funktion wird eine neue Tabelle erzeugt
function Create_Table($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
$treffer = stristr($sql, "Create");
if ($treffer==false)
die("Sie haben keine korrekte CREATE-Anweisung eingegeben.");
$this->resID = mysql_query($sql, $this->linkID);
$this->echoerror();
$this->get_tablename($sql, "Create");
}// Ende der Funktion Create_Table
84
3.1.7.2.9 Die Funktion Drop_Table($sql)
Diese Funktion ist fast identisch mit der Funktion Create_Table($sql). Der
Unterschied der beiden Funktionen besteht nur darin, dass nach dem String DROP in der SQLAnweisung gesucht wird.
Syntax:
// In diese Funktion wird eine Tabelle gelöscht
function Drop_Table($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
$treffer = stristr($sql, "Drop");
if ($treffer==false)
die("Sie haben keine korrekte DROP-Anweisung eingegeben.");
$this->resID = mysql_query($sql, $this->linkID);
$this->echoerror();
$this->get_tablename($sql, "Drop");
}// Ende der Funktion Drop_Table
3.1.7.2.9 Die Funktion Alter_Table($sql)
Die Funktion Alter_Table($sql) entspricht ebenfalls bis auf eine Kleinigkeit der
Funktion Create_Table($sql). Es werden auch die Backslashes des String $sql
abgeschnitten und dann wird nach dem Wort ALTER im String gesucht. Die SQL-Anweisung
wird ausgeführt, und die betroffene Tabelle wird mit get_tablename($sql) ermittelt.
85
Syntax:
// In dieser Funktion wird eine Tabelle geändert
function Alter_Table($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
$treffer = stristr($sql, "Alter");
if ($treffer==false)
die("Sie haben keine korrekte ALTER-Anweisung eingegeben.");
$this->resID = mysql_query($sql, $this->linkID);
$this->echoerror();
$this->get_tablename($sql, "Alter");
}// Ende der Funktion Alter_Table
86
3.2 Oracle
3.2.1 Verbindung zur Oracle-Datenbank auf dem Server der
Fachhochschule Regensburg herstellen
Damit man mit PHP auf eine Oracle-Datenbank zugreifen kann, ist es notwendig, einen
Oracle-Server zu installieren. Da die Installation aber recht aufwendig ist, habe wird das PHPSkript auf den Oracle-Server der FH-Regensburg gestellt. Der Server der FH-Regensburg ist
in der Lage, PHP-Skripte an eine Oracle-Datenbank weiterzuleiten. Allerdings ist der Zugang
zum Server der FH-Regensburg und der dort installierten Oracle-Datenbank unbedingt
erforderlich.
Die Verbindung erfolgt mittels Secure-FTP-Zugriff. Man benötigt ein Programm wie z.B.
SSH
Secure
Shell,
das
Sie
im
Internet
unter
der
Seite
http://www.ssh.com/support/downloads herunterladen können. Nehmen Sie das Programm
„ssh Secure Shell for workstations“ und wählen dann den Link „Noncommercial downloads“. Das Programm ist freeware und somit kostenlos. Installieren
Sie das Programm auf ihrer Festplatte, z.B. in das Verzeichnis C:\Programm Files\SSH
SECURE SHELL.
Nun muss die Verbindung zum FH-Server hergestellt werden. Öffnen Sie dazu das Programm
„Secure File Transfer Client.“ Klicken Sie im Menü auf „File“ und dann auf „Connect“.
87
(Abb.23: Connect mit SSH herstellen)
Tragen Sie unter „Host Name“ tabaluga.fh-regensburg.de ein. tabaluga.fhregensburg.de ist der Zielrechner, auf dem Sie ihre HTML-Formulare und Ihre PHPSkripte ablegen müssen. Unter „User Name“ ist Ihr FH-Kürzel in der Form abc12345
einzutragen und unter „Port Number“ 22. Der Server mit der Oracle-Datenbank läuft unter
dem Betriebssystem Unix. Aktivieren Sie dann den Button „Connect“. Nun werden Sie nach
ihrem Unix-Passwort gefragt. Tragen Sie ihr Passwort ein und bestätigen Sie die Eingabe mit
„OK“.
88
Aktivieren des
Buttons
„Connect“
(Abb.24: FTP-Verbindung herstellen)
Nun haben Sie eine FTP-Verbindung zu einem Unix-File-Server der FH-Regensburg
hergestellt. Das angezeigte Fenster hat dann folgenden Aufbau:
-
im linken Fenster ist Ihr aktueller Windows-Desktop
-
im rechten Fenster Ihr Unix-Home-Directory
89
Windows-Desktop
Unix-Home-Directory
(Abb.25: Secure Shell File Transfer –Fenster)
Öffnen Sie nun in der Menüleiste das Menü „Window“ und dann auf „New Terminal“. Nun
haben Sie vor sich ein Unix-Terminalfenster. Erstellen Sie nun im Terminal einen Ordner mit
dem Befehl „mkdir public_html“ und drücken die Eingabetaste. Legen Sie danach die
Lese- und Schreibrechte dieses Ordners mit den Befehlen „chmod o+x .“ und „chmod
o+x public_html“ fest.
90
(Abb.26: Lese- und Schreibrechte festlegen)
Überprüfen Sie die Eingaben, indem Sie den Befehl „ls -lod . public_html“
eintippen. Bei den Eigenschaften des Ordners public_html muss am Ende ein „x“ stehen.
am Ende dieser
Zeichenfolge muss
ein „x“ stehen
(Abb.27: überprüfen der Schreibrechte)
91
Schließen Sie nun das Terminal. Klicken Sie danach auf den Button Refresh im „Secure
Shell File Transfer-Fenster“. Danach muss der Ordner public_html sichtbar
sein.
dieser Ordner muss
vorhanden sein
(Abb.28: überprüfen des Ordners public_html)
Öffnen Sie den Ordner public_html. Suchen Sie im linken Fenster Ihre PHP-Skripte und
kopieren Sie diese mittels „drag and drop“ in den Ordner public_html.
92
(Abb.29: kopieren der PHP-Skripte)
Nun können Sie über das Internet mit der URL
http://rfhs8012.fh-regensburg.de/~rur35679/PHP_Oracle_Formular.html
auf
das
HTML-
Formular zugreifen und die SQL-Anweisungen ausführen.
93
(Abb.30: HTML-Formular für die Eingabe der SQL-Anweisungen)
Wenn Sie die Anweisung SELECT * FROM job eingeben, liefert das Formular die
folgende Ausgabe:
94
(Abb.31: Ausgabe eines Select-Befehls)
95
3.2.2 PHP-Funktionen für Oracle-Datenbanken
Für den Zugriff auf die Oracle-Datenbank wurden folgende Funktionen von PHP benötigt:
ora_logon
int ora_logon ([string Benutzername, string Passwort])
Es wird eine Oracle-Verbindung hergestellt.
ora_open
int ora_open (int Verbindung)
Es wird ein Oracle-Cursor geöffnet.
Beispiel für ora_logon und ora_open:
<?php
//Verbindung zu Oracle herstellen
$linkID = ora_logon ("rur35679@rfhs8012_ora9i”, “rur35679”);
if (!$linkID)
die(“Es konnte keine Verbindung zu Oracle hergestellt werden.“);
else
echo(“Verbindung zu Oracle wurde hergestellt“);
//öffnet einen Oracle-Cursor
$cursor = ora_open ($linkID);
?>
ora_parse
96
int
ora_parse
(int
Cursor_id,
string
SQL-Anweisung,
int
aufschieben)
Es wird eine SQL-Anweisung analysiert.
ora_exec
int ora_exec(int cursor)
Es wird eine analysierte SQL-Anweisug bei einem Cursor durchgeführt.
Beispiel für ora_parse und ora_exec:
<?php
//Verbindung zu Oracle herstellen
$linkID = ora_logon ("rur35679@rfhs8012_ora9i”, “rur35679”);
if (!$linkID)
die(“Es konnte keine Verbindung zu Oracle hergestellt werden.“);
else
echo(“Verbindung zu Oracle wurde hergestellt“);
//öffnet einen Oracle-Cursor
$cursor = ora_open ($linkID);
// eine SQL-Anweisung analysieren
if (!ora_parse ($cursor, “SELECT * FROM dual”))
die (“Die SQL-Anweisung konnte nicht ausgeführt werden.“);
else
// eine analysierte SQL-Anweisung durchführen
ora_exec ($cursor);
?>
ora_close
int ora_close (int Corsor)
Es wird ein Oracle-Cursor geschlossen.
Beispiel:
<?php
97
// schließen des zuvor geöffneten Oracle-Cursors
ora_close($cursor);
?>
ora_ColumnName
string ora_ColumnType (int cursor, int column)
Es wird der Typ eines Ergebnisfeldes ermittelt.
ora_numcols
int ora_numrows (int cursor_ind)
Es wird die Menge der Felder eines Ergebnisses ermittelt.
ora_getcolumn
array ora_getcolumn (int Cursor, mixed Feld)
Es werden die Daten eines Feldes geliefert.
ora_numrows
int ora_numrows (int cursor_ind)
Es wird die Menge der Datensätze eines Ergebnisses ermittelt.
98
ora_fetch
int ora_fetch_into (int Cursor)
Es wird ein Datensatz eines Oracle-Cursors abgerufen.
Beispiel für die Ausgabe eines SELECT-Befehls:
<?php
// Verbindung zu Oracle herstellen, einen Cursor öffnen, SQL-Anweisung analysieren
// und die analysierte Anweisung ausführen (siehe oben)
....
// Anzahl der Spalten des SELECT-Befehls ermitteln
$spalten = ora_numcols($cursor);
$hilf = 0;
while($hilf <> $spalten)
{
// Spaltenüberschriften ermitteln
$name = ora_ColumnName($cursor, $hilf);
// ausgeben der eines einzelnen Spaltennamens, “\t“ setzt nach
// der Spaltenüberschrift einen Tabulator
echo($name . "\t\t");
$hilf++;
}
$index = 0;
// ermitteln der Datensätze beim Oracle-Cursor $cursor
while (ora_fetch($cursor))
{
$index++;
echo("<BR>$index");
for($i=0; $i < $spalten; $i++)
// hier wird der Inhalt eines Datensatzes der Spalte $i ausgegeben
echo(("\t\t" . ora_getcolumn($cursor, $i)));
}
echo("<BR>");
?>
Setzt man vor jede der oben aufgeführten Funktionen ein „@“, dann wird die Fehlerausgabe
der Funktion unterdrückt.
Beispiel:
<?php
...
// eine SQL-Anweisung analysieren; tritt ein Fehler auf, dann wird die Ausgabe
99
// unterdrückt.
if (!@ora_parse ($cursor, “SELECT * FROM dual”))
die (“Die SQL-Anweisung konnte nicht ausgeführt werden.“);
else
// eine analysierte SQL-Anweisung durchführen
ora_exec ($cursor);
?>
100
3.2.3
Erstellen der Tabellen unter Oracle
Die Tabellen unter Oracle unterscheiden sich von der Syntax zu den Tabellen unter MySQL.
Die Tabellen haben folgenden Aufbau:
create table abteilung (abt_id varchar2(2) not null,
bezeichnung varchar2(40));
create table job(job_id varchar2(2) not null,
titel varchar2(30), gehalt number(8,2));
create table qualifikation(ang_id varchar2(3), job_id
varchar2(2));
create table angestellte(ang_id varchar2(3) not null, name
varchar2(10), gebdatum date, abt_id varchar2(2), job_id
varchar2(2));
101
3.2.4
Hinzufügen von Datensätzen unter Oracle
Die Insert-Befehle der Datenbank „Personalwesen“ haben unter Oracle folgenden Aufbau:
insert into abteilung values('KO','Konstruktion');
insert into abteilung values('OD','Organisation und
Datenverarbeitung');
insert into abteilung values('PA','Personalabteilung');
insert into abteilung values('RZ','Rechenzentrum');
insert into abteilung values('VT','Vertrieb');
insert into job values('KA','Kaufm. Angestellter',3000.00);
insert into job values('TA','Techn. Angestellter',3000.00);
insert into job values('PR','Programmierer',3000.00);
insert into job values('SY','Systemplaner',6000.00);
insert into job values('IN','Ingenieur',6000.00);
insert into job values('OR','Operateur',3500.00);
insert into angestellte values('A1','Fritz','02-JAN50','OD','SY');
insert into angestellte values('A2','Tom','02-MAR51','KO','IN');
insert into angestellte values('A3','Werner','23-JAN48','OD','PR');
insert into angestellte values('A4','Gerd','03-NOV55','VT','KA');
insert into angestellte values('A5','Emil','02-MAR60','PA','PR');
insert into angestellte values('A6','Uwe','03-APR52','RZ','OP');
insert into angestellte values('A7','Erna','17-NOV55','KO','TA');
102
insert into angestellte values('A8','Rita','02-DEC57','KO','TA');
insert into angestellte values('A9','Ute','08-SEP62','OD','SY');
insert into angestellte values('A10','Willi','07-JUL56','KO','IN');
insert into angestellte values('A12','Anton','05-JUL48','OD','SY');
insert into angestellte values('A13','Josef','02-AUG52','KO','SY');
insert into angestellte values('A14','Maria','17-SEP64','PA','KA');
insert into qualifikation values('A1','SY');
insert into qualifikation values('A1','PR');
insert into qualifikation values('A1','OP');
insert into qualifikation values('A2','IN');
insert into qualifikation values('A2','SY');
insert into qualifikation values('A3','PR');
insert into qualifikation values('A4','KA');
insert into qualifikation values('A5','PR');
insert into qualifikation values('A6','OP');
insert into qualifikation values('A7','TA');
insert into qualifikation values('A8','TA');
insert into qualifikation values('A9','IN');
insert into qualifikation values('A9','SY');
insert into qualifikation values('A10','IN');
insert into qualifikation values('A11','KA');
insert into qualifikation values('A12','SY');
insert into qualifikation values('A13','IN');
insert into qualifikation values('A14','KA');
103
3.2.5
Ein allgemeines Beispiel für PHP in Verbindung mit
Oracle-Datenbanken
In diesem Kapitel möchte ich ein kleines PHP-Skript vorstellen, mit dem Sie Daten aus einer
Tabelle ausgeben können. Das Skript greift auf die Datenbank „Personalwesen“ und die
Tabelle „Job“ zu und gibt den Inhalt der Tabelle in einer HTML-Tabelle aus.
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY BGCOLOR="#FFFFF">
<?php
// Verbidnung zu Oracle herstellen; Benutzernamen und Passwort eintragen
$linkID = ora_logon("abc12345@rfhs8012_ora9i", " abc12345");
if (!$linkID)
die("Es konnte keine Verbindung zu Oracle hersgestellt werden.");
// öffnet einen Oracle-Cursor
$cursor = ora_open($linkID);
// einen SQL-Befehl an die Datenbank schicken
$abfrage = "SELECT * FROM job";
$resID = @ora_parse($cursor, $abfrage);
if (!$resID)
die ("Es ist ein Fehler in der Abfrage aufgetreten.");
ora_exec($cursor);
// Ausgabe der Datensätze in Tabellenform
echo("<table border cellpadding=\"3\"><tr>");
$spalten = ora_numcols($cursor);
$hilf = 0;
while($hilf <> $spalten)
{
$name = ora_ColumnName($cursor, $hilf);
echo("<th>$name</th>");
$hilf++;
}
while (ora_fetch($cursor))
{
$ spalten = ora_numcols($cursor);
echo("<tr>");
for($i=0; $i < $ spalten; $i++)
echo("<td>".htmlentities(ora_getcolumn($cursor, $i))."</td>");
echo("</tr>\n");
}
104
echo("</table>");
?>
</BODY></HTML>
105
3.2.6 PHP-Skripte in Anwendung mit einer Oracle-Datenbank
Für die Eingabe der SQL-Befehle wurde dasselbe HTML-Formular verwendet wie für den
Zugriff auf eine MySQL-Datenbank.
Es können die Befehle SELECT, INSERT, DELETE, UPDATE, CREATE-Table, ALTERTable und DROP-Table ausgeführt werden. Es darf jedoch nicht wie bei einer MySQLDatenbank ein Strichpunkt am Ende der SQL-Anweisung stehen.
(Abb.32: PHP_Oracle_Formular)
Durch Aktivieren des Buttons „Abschicken“ wird dann die SQL-Anweisung an das PHPSkript Oracle.php3 über den Server an die Oracle-Datenbank geschickt.
106
3.2.6.1
Hauptprogramm und Klassenvariablen
Im Hauptprogramm der Datei Oracle.php3 wird eine Instanz der Klasse oracle_db
erzeugt. Als nächstes wird über die globale Variable $_POST der Inhalt des HTMLFormulars PHP_Oracle_Formular.html ermittelt. Dazu wird ein dynamische Feld mit
den Namen $array erzeugt und mit der foreach-Schleife der Inhalt des Feldes $_POST
ausgelesen. Der ausgelesene Inhalt wird dem Feld $array angehängt. Zuletzt wird der
ausgelesene Inhalt den Variablen $Auswahl und $Anweisung zugewiesen. Danach wird
mit einer SWITCH-Anweisung ermittelt, welcher Radiobutton im HTML-Formular
ausgewählt wurde. Der dafür benötigte String steht in der Variablen $Auswahl.
Die Inhalte der Post-Variable kann auch anders ermittelt werden. Man kann mit dem Befehl
$HTTP_POST_VARS auf den Inhalt zugreifen. $HTTP_POST_VARS ist ebenfalls ein Feld
und der Inhalt dieses Feldes kann z.B. mit $HTTP_POST_VARS[’Anweisung’]
ermittelt werden. Der Vorteil dieses Befehls ist, das die Inhalte nicht mehr durch eine Schleife
ermittelt werden müssen und diese Art der Ermittlung der Inhalte der Post-Variable ist
sicherer (siehe Diplomarbeit von Zimmermann Stefan unter der folgenden Seite:
http://rfhs8012.fh-regensburg.de/~saj39122/Meile.html).
Die Befehle haben dann folgendes aussehen:
// zuweisen der Feldinhalte
$Auswahl = $HTTP_POST_VARS['Auswahl'];
$Anweisung = $HTTP_POST_VARS['Anweisung'];
Der Feldinhalt muss jedoch nicht unbedingt in die Variablen geschrieben werden.
Syntax:
$datenbank = new oracle_db;
$array = array();
// ermitteln der Inhalte des Globalen Feldes $_Post, die über das HTML-Formular geschickt
wurden
107
foreach ($_POST as $var => $value)
{
$array[] = $value;
}
// zuweisen der Feldinhalte
$Auswahl = $array[0];
$Anweisung = $array[1];
// Select-Anweisung an die Datenbank schicken
switch($Auswahl)
{
case "Select" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung
eingegeben.");
else $datenbank->query($Anweisung);
break;
case "Update" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->geanderte_Dts($Anweisung);
break;
case "Create": if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->Create_Table($Anweisung);
break;
case "Alter" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->Alter_Table($Anweisung);
break;
case "Drop" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingegeben.");
else $datenbank->Drop_Table($Anweisung);
break;
}
Es gibt vier Klassenvariablen in der Datei Oracle.php3. Die Verbindung zur Oracle wird
in der Variablen $linkID gespeichert. Der Datenbankname wird in der Variablen $db, der
Benutzername in der Variablen $uname und das Passwort in der Variablen $passw
gespeichert. Die Variable $cursor ist für den Oracle-Cursor zuständig.
Syntax:
class oracle_db
{
var $linkID = false;
var $cursor = false;
var $uname = "abc12345 @rfhs8012_ora9i";
var $passw = " abc12345";
...
}
108
Bitte beachten Sie, dass Sie den Benutzernamen und das Passwort noch eingeben müssen.
3.2.6.2
Konstruktor der Klasse oracle_db
Der Konstruktor der Klasse oracle_db ruft die Funktion connect_db() auf, die die Verbindung
zu Oracle herstellt.
Syntax:
// Konstruktor der Klasse oracle_db
function oracle_db()
{
$this->connect_db();
}
3.2.6.3
Die Funktion connect_db()
In dieser Funktion wird eine Verbindung zu Oracle hergestellt, wenn der Benutzername und
das Passwort richtig sind. Danach wird ein Oracle-Cursor geöffnet.
Syntax:
// Verbindung zur Datenbank
function connect_db()
{
// Verbindung zu Oracle herstellen
$this->linkID = @ora_logon($this->uname, $this->passw);
if (!$this->linkID)
{
die("Es konnte keine Verbindung zu Oracle hergestellt werden.<BR><BR>");
return false;
}
else
{
echo("Die Verbindung zu Oracle wurde hergestellt.<BR><BR>");
}
// öffnet einen Oracle-Cursor
$this->cursor = @ora_open($this->linkID);
109
}// Ende der Funktion connect_db
3.2.6.4
Die Funktion query($sql)
Diese Funktion verarbeitet die eingegebenen SELECT-Anweisungen. Zuerst werden die
Backslashes des eingegebenen SQL-Befehls abgeschnitten und dann wird nach dem Wort
SELECT im Parameter $sql gesucht. Danach wird mit der Funktion ora_parse()
überprüft, ob es sich auch um einen korrekten SQL-Befehl handelt. Sonst wird das Programm
mit einer Fehlermeldung abgebrochen. Danach wird der SQL-Befehl mit der Funktion
ora_exec() ausgeführt.
Als nächstes werden die Feldnamen des SQL-Befehls ermittelt und es wird eine
Spaltenüberschrift erstellt. Dafür ist die Funktion ora_ColumnName() zuständig. Mit der
Funktion ora_NumCols() werden die Felder des Ergebnisses der Abfrage ermittelt.
Danach werden die Daten des Ergebnisfeldes mit der Funktion ora_getcolumn()
ermittelt und in eine Tabelle geschrieben. Zuletzt wird der Oracle Cursor geschlossen.
Syntax:
// Select-Anweisungen an die Datenbank schicken
function query($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
// Suche nach dem Wort SELECT
$treffer = stristr($sql, "Select");
if ($treffer==false)
die("Sie haben keine korrekte SELECT-Anweisung eingegeben.<BR><BR>");
else
echo($sql . "<BR><BR>");
if(!@ora_parse($this->cursor, $sql))
die ("<BR><BR>Die Select-Anweisung konnte nicht korrekt ausgeführt
werden.");
ora_exec($this->cursor);
110
echo("<table border cellpadding=\"3\"><tr>");
echo("<th>Nr</th>");
$spalten = ora_numcols($this->cursor);
$hilf = 0;
while($hilf <> $spalten)
{
$name = ora_ColumnName($this->cursor, $hilf);
echo("<th>$name</th>");
$hilf++;
}
$index = 0;
while (ora_fetch($this->cursor))
{
$index++;
$ spalten = ora_numcols($this->cursor);
echo("<tr><td>$index</td>");
for($i=0; $i < $ spalten; $i++)
echo("<td>".htmlentities(ora_getcolumn($this->cursor, $i))."</td>");
echo("</tr>\n");
}
echo("</table>");
ora_close($this->cursor);
}// Ende der Funktion query
3.2.6.5
Die Funktion geanderte_Dts($sql)
Diese Funktion ermittelt die Anzahl der betroffenen Datensätze, die bei einem UPDATE-,
INSEERT- oder DELETE-Befehl betroffen sind. Dabei werden zuerst die Backslashes des
übergebenen Parameters $sql entfernt. Danach wird überprüft, ob eines der drei Worte in
der SQL-Anweisung vorhanden ist und ob die SQL-Anweisung korrekt ist. Als nächstes wird
die SQL-Anweisung ausgeführt. Mit der Funktion ora_numrows() wird die Anzahl der
betroffenen Datensätze ermittelt.
111
Syntax:
// Betroffene Datensätze bei einem UPDATE, INSERT oder DELETE ermitteln
function geanderte_Dts($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
// suche nach den Worten UPDATE, INSERT, DELETE
$feld = array("Update", "Insert", "Delete");
$falg = false;
foreach($feld as $element)
{
$treffer = stristr($sql, $element);
if ($treffer==true)
{
$flag = true;
break;
}
}
if ($flag==false)
die("Sie haben keine korrekte UPDATE-, INSERT-, oder DELETE-Anweisung
eingegeben.");
if(!@ora_parse($this->cursor, $sql))
die ("Die SQL-Anweisung konnte nicht korrekt durchgeführt werden.");
ora_exec($this->cursor);
if (ora_numrows($this->cursor)==1)
echo("Die SQL-Anweisung wurde durchgeführt. <BR> Es wurde
ora_numrows($this->cursor) . " Datensatz betroffen.");
else
echo("Die SQL-Anweisung wurde durchgeführt. <BR> Es wurden
ora_numrows($this->cursor) . " Datensätze betroffen.");
".
".
ora_close($this->cursor);
}// Ende der Funktion geanderteDts
3.2.6.6
Die Funktionen Create_Table($sql), Alter_Table($sql)
und Drop_Table ($sql)
Diese drei Funktionen sind bis auf eine Kleinigkeit identisch. In den Funktionen werden
zuerst alle vorkommenden Backslashes des Übergabeparameters entfernt. Dann wird nach
112
dem Wort CREATE oder ALTER oder DROP gesucht und die Anweisung wird auf Fehler
überprüft. Danach wird die Anweisung ausgeführt. Die Unterscheidung betrifft eigentlich nur
die Ausgaben.
Diese drei Anweisungen werden in separate Funktionen unterteilt, damit sie leicht
veränderbar sind.
// In dieser Funktion wird eine neue Tabelle erzeugt
function Create_Table($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
$treffer = stristr($sql, "Create");
if ($treffer==false)
die("Sie haben keine korrekte CREATE-Anweisung eingegeben.");
if(!@ora_parse($this->cursor, $sql))
die ("Die CREATE-Anweisung konnte nicht korrekt durchgeführt werden.");
ora_exec($this->cursor);
echo ("Die Anweisung " .$sql. " wurde korrekt durchgeführt");
ora_close($this->cursor);
}// Ende der Funktion Create_Table
// In dieser Funktion wird eine Tabelle gelöscht
function Drop_Table($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
$treffer = stristr($sql, "Drop");
if ($treffer==false)
die("Sie haben keine korrekte DROP-Anweisung eingegeben.");
if(!@ora_parse($this->cursor, $sql))
die ("Es ist ein Fehler in der DROP-Anweisung aufgetreten. Das Programm
wurde abgebrochen.");
ora_exec($this->cursor);
echo ("Die Anweisung " .$sql. " wurde korrekt durchgeführt");
ora_close($this->cursor);
113
}// Ende der Funktion Drop_Table
// In dieser Funktion wird eine Tabelle geändert
function Alter_Table($sql)
{
// schneidet die Backslashes bei der Eingabe ab
$sql = stripslashes($sql);
$treffer = stristr($sql, "Alter");
if ($treffer==false)
die("Sie haben keine korrekte ALTER-Anweisung eingegeben.");
if(!@ora_parse($this->cursor, $sql))
die ("Es ist ein Fehler in der ALTER-Anweisung aufgetreten. Das Programm
wurde abgebrochen.");
ora_exec($this->cursor);
ora_close($this->cursor);
}// Ende der Funktion Alter_Table
114
Abbildungsverzeichnis
Abb.1: Hinzufügen eines Netzwerkprotokolls
10
Abb.2: Hinzufügen des TCP/IP-Protokolls
11
Abb.3: Netzwerkumgebung
12
Abb.4: Start der Apache-Installation
13
Abb.5: Netzwerknamen für den Apache-Webserver eintragen
13
Abb.6: Überprüfen der Apache-Installation
14
Abb.7: Überprüfung der PHP-Installation
17
Abb.8: MySQL-Monitor
45
Abb.9: Information zu MySQL-Monitor
46
Abb.10: PhpMyAdmin
58
Abb.11: Erstellen einer Datenbank mit MySQL-Monitor
61
Abb.12: Erstellen der Tabellen mit MySQL-Monitor
63
Abb.13: Auswahl einer Datenbank mit PhpMyAdmin
65
Abb.14: Erstellen von Tabellen mit PhpMyAdmin
65
Abb.15: Tabellen der Datenbank „Personalwesen“ unter PhpMyAdmin
66
Abb.16: Insert-Befehle unter MySQL-Monitor
68
Abb.17: füllen der Tabellen mit Daten unter PhpMyAdmin
69
Abb.18: anzeigen der Tabelleninhalte unter PhpMyAdmin
69
Abb. 19: Datensätze der Tabelle „Angestellte“
70
Abb.20: PHP-Formular
71
Abb.21: Ergebnis einer SELECT-Anweisung
72
Abb.22: Ergebnis einer komplexeren SELECT-Anweisung
73
Abb.23: Connect mit SSH herstellen
88
Abb.24: FTP-Verbindung herstellen
89
Abb.25: Secure Shell File Transfer-Fenster
90
Abb.26: Lese- und Schreibrechte festlegen
91
Abb.27: überprüfen der Schreibrechte
91
Abb.28: überprüfen des Ordners public_html
92
Abb.29: kopieren der PHP-Skripte
93
Abb.30: HTML-Formular für die Eingabe der SQL-Anweisungen
94
Abb. 31 Ausgabe eines SELECT-Befehls
95
115
Abb.32 PHP_Oracle_Formular
106
116
Literaturverzeichnis
- Ulrich Günther: PHP, Ein praktischer Einstieg
- Rasmus Lerdorf, Kevin Tatroe: Programmieren mit PHP
- Matt Zandstra: Jetzt lerne ich PHP4
- Sven Letzel, Robert Gacki: Jetzt lerne ich MySQL & PHP
- Thomas Demmig: MySQL lernen, Anfangen, anwenden, verstehen
- Kevin Yank: PHP and MySQL, Schritt für Schritt zur datenbankgestützten Website
- www.PHP.net
- www.php-homepage.de
- www.php-archiv.de
- www.phpwelt.de
- SELFPHP: www.selfphp.com, www.selfphp4.de
117
Herunterladen