118
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

Diplomarbeit Interaktiver Dialog der Skriptsprache PHP zu ...fbim.fh-regensburg.de/~saj39122/meile/rueckerl/daten/diplomarbeit.pdf · Diplomarbeit Interaktiver Dialog der Skriptsprache

  • Upload
    ngodat

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

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

1

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

2

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 44

3.1 MySQL 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

3

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

4

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.

5

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, HTTP-

6

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 Modifi-

kation 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.

7

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 MySQL-

Datenbank 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 MySQL-

Datenbank 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.

8

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.

9

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 IP-

Adresse 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.

10

(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.

Aktivieren des Buttons Hinzufügen

11

(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.

Auswahl des TCP/IP-Protokolls

12

(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.

13

(Abb.4: Start der Apache-Installation)

(Abb.5: Netzwerknamen für den Apache-Webserver eintragen)

Netzwerkname des PCs

14

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)

15

Sollte die Testseite des Apache-Webservers nicht erscheinen, wurde offenbar der Apache-

Dienst 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 Beispiel-

installation 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\.

16

?? 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 System-

Verzeichnis 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.

17

(Abb.7: Überprüfung der PHP-Installation)

18

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 PHP-

Prozessor 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 EditPlus-

Text 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.

19

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 ?>

20

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

21

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.

22

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

23

$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; ?>

24

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); ?>

25

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.

26

Operator Ergebnis

$c = $a Der Wert der Variable $a wird der Variable $c zugewiesen.

$a = 1

$c = &$a

Der Variable $c wird die Speicheradresse für den Wert der Variablen $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.

27

Operator Ergebnis

$c = $a . $b

$a .= $b

Verknüpfung von Werten

<?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

28

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.

29

$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,

30

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;

31

$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

32

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) ?>

33

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,

34

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, ...)

35

{ // 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.

36

<?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.

37

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.

38

<?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

39

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

40

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; } ?>

41

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; } } ?>

42

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) {

43

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)

44

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 Unix-

Betriebssystemen 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 MySQL-

Installation 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\

45

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 MySQL-

Datenbank (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.

46

Mit Hilfe des MySQL-Monitors ist es möglich, eine Verbindung zu jeder beliebigen MySQL-

Datenbank 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.

47

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)

48

$cfgServers[1]['user'] = 'root'; // MySQL user (only needed with basic auth) $cfgServers[1]['password'] = ''; // MySQL password (only needed with basic auth) $cfgServers[1]['only_db'] = 'Verwaltung'; // If set to a db-name, only this db is accessible $cfgServers[1]['verbose'] = ''; // Verbose name for this host - leave blank to show the hostname $cfgServers[1]['bookmarkdb'] = ''; // Bookmark db - leave blank for no bookmark support $cfgServers[1]['bookmarktable'] = ''; // Bookmark table - leave blank for no bookmark support

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.

49

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 SQL-

Befehle eintippen können. Damit sind Sie nicht an die manchmal gewöhnungsbedürftige

Menüführung von PhpMyAdmin gebunden.

50

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.

51

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 SQL-

Befehles wird in PHP nur eine einzige Funktion verwendet.

Syntax:

int mysql_query(string sql [, int linkID]);

52

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]);

53

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.

54

mysql_affected_rows

int mysql_affected_rows ([int resID])

Gibt eine Anzahl der Datensätze zurück, die nach einem UPDATE-, INSERT- oder DELETE-

Befehl 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

55

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.

56

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.

57

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!");

58

// 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>");

59

echo("</tr>\n"); } echo("</table>"); ?> </BODY></HTML>

60

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-

61

regensburg.de/~saj39122/DB/). Dazu muss zuerst die Datenbank mit dem CREATE

DATABASE Befehl erzeugt werden, wir die untere Abbildung zeigt.

62

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));

63

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)

64

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 SQL-

Befehle 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.

65

(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:

66

(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.fh-

regensburg.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.

67

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');

68

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.

69

(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)

70

(Abb. 19: Datensätze der Tabelle „Angestellte“)

71

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 MySQL-

Zugriff 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

72

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

73

beachtet werden. Es kann jeder beliebige SELECT-Befehl in das Textfeld des HTML-

Formulars 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>

74

<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();

75

// 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.

76

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 SQL-

Anweisungen 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

77

// 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";

.... }

78

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

79

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.

80

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.

81

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;

82

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.

83

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.");

84

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

85

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 SQL-

Anweisung 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.

86

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

87

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 PHP-

Skript 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 „Non-

commercial 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“.

88

(Abb.23: Connect mit SSH herstellen)

Tragen Sie unter „Host Name“ tabaluga.fh-regensburg.de ein. tabaluga.fh-

regensburg.de ist der Zielrechner, auf dem Sie ihre HTML-Formulare und Ihre PHP-

Skripte 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“.

89

(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

Aktivieren des Buttons „Connect“

90

(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.

Windows-Desktop

Unix-Home-Directory

91

(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.

(Abb.27: überprüfen der Schreibrechte)

am Ende dieser Zeichenfolge muss ein „x“ stehen

92

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.

(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.

dieser Ordner muss vorhanden sein

93

(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.

94

(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:

95

(Abb.31: Ausgabe eines Select-Befehls)

96

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

97

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

98

// 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.

99

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

100

// 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); ?>

101

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));

102

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-JAN-

50','OD','SY');

insert into angestellte values('A2','Tom','02-MAR-

51','KO','IN');

insert into angestellte values('A3','Werner','23-JAN-

48','OD','PR');

insert into angestellte values('A4','Gerd','03-NOV-

55','VT','KA');

insert into angestellte values('A5','Emil','02-MAR-

60','PA','PR');

insert into angestellte values('A6','Uwe','03-APR-

52','RZ','OP');

insert into angestellte values('A7','Erna','17-NOV-

55','KO','TA');

103

insert into angestellte values('A8','Rita','02-DEC-

57','KO','TA');

insert into angestellte values('A9','Ute','08-SEP-

62','OD','SY');

insert into angestellte values('A10','Willi','07-JUL-

56','KO','IN');

insert into angestellte values('A12','Anton','05-JUL-

48','OD','SY');

insert into angestellte values('A13','Josef','02-AUG-

52','KO','SY');

insert into angestellte values('A14','Maria','17-SEP-

64','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');

104

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"); }

105

echo("</table>"); ?> </BODY></HTML>

106

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, ALTER-

Table und DROP-Table ausgeführt werden. Es darf jedoch nicht wie bei einer MySQL-

Datenbank 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 PHP-

Skript Oracle.php3 über den Server an die Oracle-Datenbank geschickt.

107

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 HTML-

Formulars 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

108

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 eingege- ben.");

else $datenbank->geanderte_Dts($Anweisung); break;

case "Create": if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingege- ben.");

else $datenbank->Create_Table($Anweisung); break; case "Alter" : if (!$Anweisung) echo("Es wurde keine SQL-Anweisung eingege-

ben."); 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"; ...

}

109

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);

110

}// 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);

111

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.

112

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

113

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);

114

}// 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

115

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

116

Abb.32 PHP_Oracle_Formular 106

117

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