Datenbanken und Internet Robert Krah Robert Krah Datenbanken und Internet Einführung in SQL Apache-Server MySQL PHPMyADMIN Lehrgang: Medizinische Dokumentation 1 Datenbanken und Internet Robert Krah Inhaltsverzeichnis 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.7.1 1.8 1.8.1 1.9 1.10 1.11 1.11.1 1.12 1.13 1.14 Die mysql-Eingabeaufforderung .................................................................34 Rechte vergeben ........................................................................................34 SQL-Befehle: Datenbanken und Tabellen anlegen ....................................35 Datenbank anlegen:....................................................................................35 Datenbank wechseln ..................................................................................35 Tabelle erstellen (create table) ...................................................................35 Daten eingeben, ändern und löschen.........................................................36 Daten eingeben (insert into) .......................................................................36 Einzelne Felder eingeben ...........................................................................37 Werte in Feldern ändern (update)...............................................................37 Mehrere Felder mit einem SQL-Befehl eintragen: ......................................38 Daten in andere Tabellen schreiben...........................................................39 Löschen von Datensätzen ..........................................................................39 Löschen von Datenbanken und Tabellen ...................................................40 Löschen von Tabellen.................................................................................41 Tabellen ändern: alter table ........................................................................41 Umbenennen ..............................................................................................43 Kurzreferenz der mysql-Befehle .................................................................44 2 2.1 2.2 Einleitung: PHPMyAdmin............................................................................60 Verwendung von PHPMyAdmin .................................................................60 Datenbank mit PHPMyAdmin erstellen.......................................................61 3 3.1 3.2 3.3 3.4 3.5 3.6 Einlesen von Tabellen ................................................................................65 Übungen zur Datenbank Metallwaren: .......................................................68 Dump erzeugen ..........................................................................................71 Dump als Datei speichern...........................................................................72 Dump der kompletten Datenbank ...............................................................73 Dump einlesen............................................................................................73 Einlesen einer größeren Tabelle: ICD-10 Diagnosenthesaurus .................74 4 4.1 4.2 4.3 4.4 4.5 4.6 PHP als serverseitige Skriptsprache ..........................................................78 PHP in HTML-Dateien ................................................................................80 Das Hallo-Welt-Skript .................................................................................80 Kommentare ...............................................................................................81 die Funktion phpinfo() .................................................................................81 Variablen und Berechnungen in PHP .........................................................81 Arrays .........................................................................................................87 2 Datenbanken Die mysql-Eingabeaufforderung 1 Die mysql-Eingabeaufforderung MYSQL ist ein leistungsfähiges, relationales Client-Server-Datenbanksystem. Es wird vor allem für Internet-Datenbanken viel verwendet und bietet für den Anwender eine Reihe von Vorteilen, z. B. die, dass es im Rahmen der nicht-kommerziellen Verwendung frei verfügbar ist (GPL=GNU Public License im Sinne der Open Source-Idee wie bei Linux). GPL-Software ist frei verfügbar, aber daraus entwickelte Programme müssen ebenfalls wieder der Öffentlichkeit frei zugänglich gemacht werden. Für kommerzielle Anwendungen ist das ein wenig komplizierter (vgl. dazu. http://www.gnu.org/copyleft/gpl.html). Die Befehlseingabe am MYSQL-Prompt (Bereitschaftszeichen) ist „SQL pur“ und lässt sich deshalb besonders gut zum Üben von SQL-Befehlen verwenden1. Sie gelangen zum MYSQL-Prompt, indem Sie entweder a) Im Windows-Explorer im Ordner C:\apachefriends\xampp\mysql\bin die Datei mysql.exe per Doppelklick aktivieren, oder b) eine Verknüpfung auf dem Desktop einrichten, die den bei a) genannten Pfad als Ziel der Verknüpfung hat. So sieht die mysqlEingabeaufforderung aus: Drücken Sie Alt Return, um von der Fensterdarstellung zum Vollbild zu wechseln! MySQL verlassen Sie mit dem Befehl: mysql> exit; MYSQL verabschiedet sich Bye 1.1 Rechte vergeben Verlassen Sie dazu mysql. Geben Sie den Befehl: Start Ausführen Geben Sie ein: cmd (=command) Windows zeugt jetzt die Eingabeaufforderung an. Wechseln Sie in das Verzeichnis mysql\bin 1 Bei der Beispieltabelle Sammlung und den beschriebenen Übungen orientiere ich mich zum Teil an: SQL in 21 Tagen, ISBN: 3-8272-2020-3 34 Datenbanken Die mysql-Eingabeaufforderung Starten Sie jetzt mysql mit dem folgenden Befehl explitzit als root-user: C:\mysql\bin>mysql -u root –p u steht für user, p für Passwort Sie sehen: Enter password: Geben Sie ein:taw Jetzt sind Sie als der Root-User mit Passwort taw in der Datenbank MySQL mit allen Rechten (die vorher in PHPMyadmin vergeben wurden). 1.2 SQL-Befehle: Datenbanken und Tabellen anlegen Am Mysql-Prompt werden Befehle eingegeben. Sie können (müssen aber nicht) die ReturnTaste drücken, um die Eingabe auf mehrere Zeilen zu verteilen. Der Befehl wird mit einem ; (Semikolon) abgeschlossen – zwar funktionieren einige Befehle auch ohne Semikolon, aber besser ist es, sich generell daran zu gewöhnen. 1.3 Datenbank anlegen: Datenbanken werden mit dem Befehl CREATE DATABASE Datenbankname angelegt. Aufgabe: Legen Sie die Datenbank mit dem Namen UEBUNG an! create database uebung Geben Sie anschließend am Prompt-Zeichen den Befehl mysql> show databases; Sie sehen zum Beispiel folgendes Ergebnis: +-----------+ | Database | MYSQL zeigt an, welche Datenbanken existieren +-----------+ | uebung | | test | +-----------+ 1.4 Datenbank wechseln Mit dem Befehl use Datenbankname wird die aktuelle Datenbank gewechselt. Aufgabe: Geben Sie ein: mysql>use mysql; Database changed Aufgabe: Lassen Sie die Tabellen anzeigen: mysql> show tables; +-----------------+ | Tables_in_mysql | +-----------------+ In MYSQL gibt es eine Systemdatenbank mit dem | columns_priv | Namen mysql. Sie enthält alle Einstellungen ein| db | schließlich der Zugriffsrechte. | host | | tables_priv | | user | +-----------------+ 5 rows in set (0.00 sec) Aufgabe: Wechseln Sie wieder zur Datenbank UEBUNG. 1.5 Tabelle erstellen (create table) In der Datenbank UEBUNG soll jetzt die erste Tabelle angelegt werden. Der Name der Tabelle soll Sammlung sein. (Beispiel aus: SQL in 21 Tagen, Kap. 8) 35 Datenbanken Die mysql-Eingabeaufforderung mysql> create table sammlung( -> stueck varchar(30) NOT NULL, -> wert double, -> text varchar(50) -> ); Query OK, 0 rows affected (0.06 sec) Diese Tabelle wird eingerichtet: Aufgabe: Geben Sie jetzt den Befehl: mysql> show tables; +------------------+ | Tables_in_uebung | +------------------+ | sammlung | +------------------+ 1 row in set (0.05 sec) MYSQL zeigt an, dass die Tabelle existiert 1.6 Daten eingeben, ändern und löschen Daten über SQL-Befehle einzugeben ist zugegebenermaßen etwas mühselig. Niemand wird in der Praxis Tausende Datensätze über den Befehl insert into einfügen. Dennoch ist im sinnvoll für das verständnis von SQL, wenn man diese Befehlseingabe beherrscht. Sie werden später Möglichkeiten kennenlernen, auch im Rahmen von MYSQL mit sogenannten Frontends zu arbeiten, also Benutzeroberflächen, die „an vordester Front“ stehen. Es ist zum Beispiel auch möglich, Access als Eingabehilfe für MYSQL zu nutzen, indem ein ODBCTreiber eingerichtet wird. 1.7 Daten eingeben (insert into) Jetzt sollen Daten in die Tabelle eingegeben werden. Dies geschieht mit dem Befehl insert into. Die Syntax der Anweisung lautet: INSERT INTO Tabellenname (Spalte1, Spalte2...) VALUES (Wert1, Wert2...) Aufgabe: Geben Sie ein: mysql> insert into sammlung( -> stueck,wert,text) -> values( -> 'Wegweiser',300,'fehlt jetzt in Koeln' -> ); Query OK, 1 row affected (0.06 sec) Aufgabe: Lassen Sie jetzt die Tabelle anzeigen: mysql> select * from sammlung; +-----------+------+----------------------+ | stueck | wert | text | +-----------+------+----------------------+ | Wegweiser | 300 | fehlt jetzt in Koeln | +-----------+------+----------------------+ Man kann mit dem insert-Befehl auch Daten einfügen, ohne die Spalten dabei anzugeben. Dabei werden die Daten in der Reihenfolge, wie man sie schreibt, in die Spalten eingefügt: Aufgabe: Nehmen Sie den Datensatz auf: mysql> insert into sammlung -> values ('Kronleuchter',2000.00,'antikes Stück'); Query OK, 1 row affected (0.11 sec) Aufgabe: Schauen Sie nach, ob das Ergebnis stimmt: 36 Datenbanken Die mysql-Eingabeaufforderung mysql> select * from sammlung; +--------------+------+----------------------+ | stueck | wert | text | +--------------+------+----------------------+ | Kronleuchter | 2000 | antikes Stück | | Wegweiser | 300 | fehlt jetzt in Koeln | +--------------+------+----------------------+ 2 rows in set (0.05 sec) Aufgabe: Nehmen Sie zwei weitere Datensätze auf. Die Syntax ist wie vorher beschrieben. Das Ergebnis soll hinterher sein: mysql> select * from sammlung; +--------------+------+----------------------+ | stueck | wert | text | +--------------+------+----------------------+ | Kronleuchter | 2000 | antikes Stück | | Wegweiser | 300 | fehlt jetzt in Koeln | | Kette | 200 | Erbstueck | | Barbie | 250 | Geschenk von Susi | +--------------+------+----------------------+ 4 rows in set (0.00 sec) 1.7.1 Einzelne Felder eingeben Es ist auch möglich, einzelne Werte in einzelne Felder einzugeben, z. B. dann, wenn noch nicht alle Informationen vorliegen. Angenommen, in die Tabelle Sammlung soll ein Armband aufgenommen werden, es wird also zunächst nur die Spalte stueck mit Inhalt gefüllt: mysql> insert into sammlung -> (stueck) -> values('Armband'); Query OK, 1 row affected (0.17 sec) MYSQL zeigt dann an: mysql> select * from sammlung; +--------------+------+----------------------+ | stueck | wert | text | +--------------+------+----------------------+ | Kronleuchter | 2000 | antikes Stück | .... | Armband | NULL | NULL | +--------------+------+----------------------+ Aufgabe: Fügen Sie noch einen Datensatz an. Der Eintrag in die Spalte stueck soll nur ‚Uhr’ betragen’. Wenn später die anderen Felder eingegeben werden, dann muss mit dem update-Befehl und einer Where-Klausel gearbeitet werden, denn der Datenbank muss ja mitgeteilt werden, um welchen Datensatz es sich bei der Eingabe handelt. 1.8 Werte in Feldern ändern (update) Um Änderungen an den Daten vorzunehmen, brauchen Sie den Befehl update. Die Syntax lautet: UPDATE Tabellenname SET Spaltenname1 = Wert1 [, Spaltenname2 = Wert2]... WHERE Suchbedingung Beispiel: 37 Datenbanken Die mysql-Eingabeaufforderung UPDATE SAMMLUNG SET WERT = 900 WHERE STUECK = 'KETTE'; In der Tabelle Sammlung wird der Wert der Kette auf 900 erhöht Aufgabe: Führen Sie diese Änderung durch! Vorsicht: ohne where-Klausel werden alle Werte ersetzt: UPDATE SAMMLUNG alle Spalten hätten dann den Wert 555 SET WERT = 555; Aufgabe: 1) Ändern Sie den Wert der Barbie auf 350 2) Ändern Sie den Text (drittes Feld) im Datensatz, der die Kette beschreibt, auf: Kauf in Lissabon 3) Ändern Sie die Bezeichnung im Feld Stueck von Wegweiser auf Verkehrszeichen Aufgabe: Lassen Sie die Daten wieder anzeigen. mysql> select * from sammlung; +----------------+------+----------------------+ | stueck | wert | text | +----------------+------+----------------------+ | Kronleuchter | 2000 | antikes Stück | | Verkehrszeichen| 300 | fehlt jetzt in Koeln | | Kette | 900 | Kauf in Lissabon | | Barbie | 350 | Geschenk von Susi | | Armband | | NULL | | Uhr | | NULL | +----------------+------+----------------------+ 5 rows in set (0.00 sec) NULL steht bekanntlich nicht für den Zahlenwert 0, sondern für „Nicht vorhanden“. Wenn die Eintragung NULL als störend empfunden wird, dann kann man die Felder stattdessen mit einem Leerzeichen füllen. Jetzt sollen auch die fehlenden Einträge beim Armband und der Kette ersetzt werden. Aufgabe: Setzen Sie mit dem folgenden Befehl den Wert des Armbands auf 1000 fest. mysql> update sammlung -> set wert=1000 -> where stueck='Armband'; Query OK, 1 row affected (0.00 sec) Aufgabe: Beim Datensatz ‚Armband’ soll der text als ‚Gold mit Halbedelsteinen’ eingetragen werden. 1.8.1 Mehrere Felder mit einem SQL-Befehl eintragen: Im Datensatz, der Informationen zur Uhr aufnehmen sollte, sind noch Felder unausgefüllt. Diese sollen mit dem folgenden Befehl gefüllt werden: mysql> update sammlung -> set wert=600,text='geerbt von Onkel Heinz' -> where stueck='Uhr'; Query OK, 1 row affected (0.00 sec) Die zweite Zeile - -> set wert=600,text='geerbt von Onkel Heinz' zeigt, wie die Felder nacheinander, getrennt durch Kommas, gefüllt werden können. 38 Datenbanken Die mysql-Eingabeaufforderung 1.9 Daten in andere Tabellen schreiben Die Syntax, um alle Daten von einer Originaltabelle z. B. in eine Sicherungstabelle zu schreben, lautet: insert into sicherungstabelle select * from originaltabelle; Wenn also alle Felder der Tabelle Sammlung in die Tabelle Sicherung geschrieben werden sollen, lautet der Befehl also: insert into sicherung select * from sammlung; Dazu muss allerdings die Tabelle Sicherung erst angelegt worden sein. Sie soll dieselben Felder mit denselben Datentypen wie die Originaltabelle bekommen. Aufgabe: Legen Sie zunächst die Tabelle Sicherung an: mysql> create table sicherung( -> stueck varchar(30) not null, -> wert double, -> text varchar(50) -> ); Query OK, 0 rows affected (0.06 sec) Aufgabe: Lassen Sie jetzt die Daten in die Tabelle schreiben: mysql> insert into sicherung -> select * from sammlung; Query OK, 6 row affected (0.06 sec) Aufgabe: Sehen Sie jetzt nach, ob sich die Daten in der Tabelle Sicherung befinden: mysql> select * from sicherung; +--------------+------+--------------------------+ | stueck | wert | text | +--------------+------+--------------------------+ | Kronleuchter | 2000 | antikes Stück | | Wegweiser | 300 | fehlt jetzt in Koeln | | Kette | 900 | Kauf in Lissabon | | Barbie | 350 | Geschenk von Susi | | Armband | 1000 | Gold mit Halbedelsteinen | | Uhr | 600 | geerbt von Onkel Heinz | +--------------+------+--------------------------+ 1.10 Löschen von Datensätzen Die Syntax des Befehls, mit dem Sie Datensätze aus einer Tabelle löschen können, lautet: DELETE FROM Tabellenname WHERE Bedingung Aufgabe: Löschen Sie mit dem folgenden Befehl den Kronleuchter aus der Tabelle Sammlung: delete from sammlung where stueck=’Kronleuchter’; Aufgabe: Löschen Sie außerdem alle Daten, deren Wert unter 500 liegt: delete from sammlung where wert<500; 39 Datenbanken Die mysql-Eingabeaufforderung Jetzt ist das Ergebnis: mysql> select * from sammlung; +--------------+------+--------------------------+ | stueck | wert | text | +--------------+------+--------------------------+ | Kette | 900 | Kauf in Lissabon | | Armband | 1000 | Gold mit Halbedelsteinen | | Uhr | 600 | geerbt von Onkel Heinz | +--------------+------+--------------------------+ Damit die Daten wieder vorliegen, sollen sie nun aus der Sicherungstabelle zurückgeschrieben werden. Dabei würden allerdings Duplikate angelegt, also die zwei Datensätze, die noch vorhanden sind, wären anschließend doppelt vorhanden. Der Einfachheit halber löschen wir die beiden Datensätze und schreiben dann die Sicherungstabelle zurück. Aufgabe: Geben Sie zunächst ein: mysql> delete from sammlung; Query OK, 3 rows affected (0.05 sec) Sie sehen, dass ohne Angabe von where-Kriterien alles gelöscht wird. Aufgabe: Testen Sie: mysql> select * from sammlung; Empty set (0.00 sec) Aufgabe: Geben Sie zum „Zurückschreiben“ den Befehl ein: mysql> insert into sammlung select * from sicherung; Aufgabe: Sehen Sie dann mit dem select-Befehl nach, ob alle Daten in der Tabelle Sammlung und in der Tabelle Sicherung wieder da sind (5 Datensätze) 1.11 Löschen von Datenbanken und Tabellen Mit dem Befehl drop database <name> löschen Sie eine komplette Datenbank. Aufgabe: Erzeugen Sie eine Datenbank mit dem Namen Med_doku. create database Med_doku Schauen Sie jetzt nach, ob die Datenbank existiert: show databases; +-----------+ | Database | +-----------+ | Med_doku | | uebung | | mysql | | test | | waren | +-----------+ Aufgabe: Löschen Sie die Datenbank wieder: drop database Med_doku ; show databases Wenn Sie anschließend wieder +-----------+ nachsehen, ist die Datenbank gelöscht: | Database | +-----------+ | uebung | | mysql | | test | | waren | +-----------+ 40 Datenbanken Die mysql-Eingabeaufforderung Generell ist hier zu beachten, dass manche Datenbanksysteme kein Löschen einer kompletten Datenbank zulassen. Z. B. kann man in Access keine Datenbank löschen, man löscht einfach die Datei auf der Windows-Ebene. Wenn mysql bei einem Provider eingesetzt wird, um eine Internet-Datenbank aufzubauen und zu pflegen, dann ist es in der Regel nicht möglich, mehrere Datenbanken zu erstellen, sondern man bekommt genau eine Datenbank, deren Name oft aus dem Nutzernamen abgeleitet wird. Beispielsweise bei Lycos-Tripod (kostenlose MySQL-Datenbank, wenn der Benutzername rokr lautet, dann heißt automatisch die Datenbank rokr_de_db. Diese Datenbank kann nicht gelöscht werden. Innerhalb der Datenbank können Tabellen erstellt und gelöscht werden. 1.11.1 Löschen von Tabellen Eine Tabelle innerhalb der Datenbank kann gelöscht werden, wenn man sich in der Datenbank befindet, wenn also vorher mit use <Datenbank> die Datenbank ausgewählt wurde. Der Befehl ist ähnlich wie der zum Löschen einer Datenbank drop table <Name>; löscht die Datenbanktabelle. Die Tabelle Sicherung ist gewissermaßen doppelt vorhanden, kann also gelöscht und wieder neu erstellt werden. Aufgabe: Geben Sie ein drop table sicherung; und anschließend: show tables; um zu sehen, dass die Tabelle nicht mehr existiert. Bevor jetzt die Daten wieder in die Sicherungstabelle geschrieben werden, muss sie erst wieder mit create table erstellt werden: mysql> create table sicherung( -> stueck varchar(30) not null, -> wert double, -> text varchar(50) -> ); Query OK, 0 rows affected (0.06 sec) Aufgabe: Lassen Sie jetzt wieder die Daten in die Tabelle schreiben: mysql> insert into sicherung -> select * from sammlung; Query OK, 1 row affected (0.06 sec) 1.12 Tabellen ändern: alter table Mit dem Befehl alter table ist es möglich, die Struktur einer Tabelle im Nachhinein zu ändern. Die Syntax des Befehls lautet: ALTER TABLE Tabellenname <ADD Spaltenname Datentyp; | MODIFY Spaltenname Datentyp;> Man kann mit diesem Befehl also Spalten zu einer Tabelle hinzufügen oder verändern. Aufgabe: Zur Tabelle Sammlung soll eine Spalte Kaufdatum (Typ: Date) hinzugefügt werden: mysql> alter table sammlung -> add Kaufdatum date; Query OK, 5 rows affected (0.11 sec) 41 Datenbanken Die mysql-Eingabeaufforderung Es ist klar, dass die Felder zunächst natürlich noch leer sind: mysql> select * from sammlung; +--------------+------+--------------------------+-----------+ | stueck | wert | text | Kaufdatum | +--------------+------+--------------------------+-----------+ | Kronleuchter | 2000 | antikes Stück | NULL | | Kette | 200 | Erbstueck | NULL | |...... ... ... ... | +--------------+------+--------------------------+-----------+ 5 rows in set (0.05 sec) Aufgabe: Der Datensatz, in dem die Informationen über die Kette gespeichert sind, soll jetzt mit einem Datum, und zwar dem 12. Januar 2005,gefüllt werden. Das Datum muss in der Form Jahr-Monat-Tag eingegeben werden. mysql> update sammlung -> set kaufdatum='2003-01-12' -> where stueck='Kette'; Query OK, 1 row affected (0.00 sec) Schauen Sie nach: mysql> select * from sammlung; +--------------+------+--------------------------+----+------------+ | stueck | wert | text | ID | Kaufdatum | +--------------+------+--------------------------+----+------------+ | Kronleuchter | 2000 | antikes Stück | 1 | NULL | | Kette | 200 | Erbstueck | 2 | 2005-01-12 | | Barbie | 250 | Geschenk von Susi | 3 | NULL | | Armband | 1000 | Gold mit Halbedelsteinen | 4 | NULL | | Uhr | 600 | geerbt von Onkel Heinz | 5 | NULL | +--------------+------+--------------------------+----+------------+ Aufgabe: Setzen Sie jetzt noch folgende Datumsangaben ein: Kronleuchter 20.03.2002 Armband 30.12.1998 Bisher ist zu der Tabelle Sammlung noch kein ID-Feld vorhanden. Mit dem folgenden Befehl soll eine Spalte namens ID erstellt werden, Typ: Smallint, das Feld soll ein Autowert-Feld sein (=Auto-Increment). Diese Auto-Increment-Spalten müssen außerdem indiziert sein. Aufgabe: Nehmen Sie diese Änderung vor: mysql> alter table sammlung add ID smallint NOT NULL Auto_Increment, -> add index (ID); Query OK, 5 rows affected (0.11 sec) Sie sehen jetzt in der Tabelle: mysql> select * from sammlung; +--------------+------+--------------------------+------------+----+ | stueck | wert | text | Kaufdatum | ID | +--------------+------+--------------------------+------------+----+ | Kronleuchter | 2000 | antikes Stück | 0000-00-00 | 1 | | Kette | 200 | Erbstueck | 2003-01-12 | 2 | | Barbie | 250 | Geschenk von Susi | NULL | 3 | | Armband | 1000 | Gold mit Halbedelsteinen | 0000-00-00 | 4 | | Uhr | 600 | geerbt von Onkel Heinz | NULL | 5 | +--------------+------+--------------------------+------------+----+ 5 rows in set (0.11 sec) 42 Datenbanken Die mysql-Eingabeaufforderung Anschließend fällt auf, dass wir das neue ID-Feld nicht als Primärschlüssel gesetzt haben. Dies wird auch wieder mit alter table gemacht. Geben Sie dazu den Befehl ein: mysql> alter table sammlung -> add primary key (ID); Query OK, 5 rows affected (0.00 sec) 1.13 Umbenennen Mit dem Befehl alter table ist es möglich, den Namen von Tabellen zu ändern. Der folgende Befehl benennt die Tabelle Sammlung in Sachen um: mysql> alter table sammlung rename Sachen; Query OK, 0 rows affected (0.06 sec) Anschließend sehen Sie: mysql> show tables; +--------------------+ | Tables_in_sammlung | +--------------------+ | sachen | | sicherung | +--------------------+ 2 rows in set (0.05 sec) Sie können mit alter table aber auch Spalten umbenennen. Der folgende Befehl benennt die Spalte stueck in bezeichnung um. Zu beachten ist, dass man dabei den Datentyp angeben muss, denn er könnte auch geändert werden. mysql> alter table sachen change stueck bezeichnung varchar(30); Genauso könnte man die Feldlänge des Feldes von 30 auf 40 ändern: mysql> alter table sachen change bezeichnung bezeichnung varchar(40); Aufgabe: Nehmen Sie diese Änderungen vor! Lösung zum Einsetzen des Datums: mysql> update sachen -> set kaufdatum=2002-03-30 -> where bezeichnung='Kronleuchter'; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 1 mysql> update sachen -> set kaufdatum=1998-12-30 -> where bezeichnung='Armband'; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 43 Datenbanken Die mysql-Eingabeaufforderung 1.14 Kurzreferenz der mysql-Befehle show databases; Liste der Datenbanken anzeigen show tables; Tabellen anzeigen use database <DB_name>; Datenbank öffnen drop database <DB_name>; Datenbank löschen create database <DB_name>; Datenbank erstellen create table <Tab_name> (Felddefinitionen); Tabelle erstellen Beispiel: create table kunden( knr smallint not null primary key, name varchar(30), vorname varchar(30), ort varchar(30) ); drop table <Tab_name>; Tabelle löschen show columns from <name> Felddefinitionen anzeigen insert into <Tab_name> (<feldname1> ,<feldname2> …usw.) values( ’inhalt’, zahl, usw. Daten einfügen wenn alle Felder eingefügt werden, kann die Angabe der Felder wegfallen, ); z. B. insert into kunden (knr,name,vorname,ort) values( 123, "Schmitz", "Gerhard", "Köln" ); wenn nur bestimmte Felder eingetragen werden, müssen sie angegeben werden. Zeichenketten (Text) in einfachen oder doppelten Anführungszeichen Daten ändern update <Tab_name> set feld="das und das" In Datensätzen, die schon vorhanden sind, mit update ändern where (Bedingung); z. B. update kunde set ort="Bonn" where Kunde="Schmitz"; Neue Datensätze mit insert into (auch unvollständig) aufnehmen. Die fehlenden Felder später mit update ändern! 44 Datenbanken Die mysql-Eingabeaufforderung Daten in Sicherungstabelle Tab_name2 schreiben (alle Daten von Tab_name1 lesen und in Tab_name2 schreiben) Insert into <Tab_name2> Select * from <Tab_name1>; Vorher muss die Struktur von Tab_name2 erzeugt werden! delete from <Tab_name> Datensätze löschen where (Bedingung); z. B.: delete from kunde where knr=234; alter table <Tab_name> <add |modify <feldname1 datentyp> Feld hinzufügen bzw. ändern z. B.: alter table kunde add gebtag date Füge der Tabelle Kunde ein Feld Gebtag mit dem Datentyp date hinzu alter table kunde modify vkberater varchar(20) varchar(30) 45 Ändere in der Tabelle Kunde das Feld VKBerater von der Länge varchar(20) auf varchar(30) PHPMyAdmin Einsatz von MySQL unter Windows 2 Einleitung: PHPMyAdmin PHPMyAdmin ist eine Web-basierte Schnittstelle zu MySQL, einer relationalen Datenbank, die ursprünglich für Linux konzipiert wurde. PHPMyAdmin ist kostenlos; es stellt ein Tool dar, das mit dem Browser (Internet Explorer) geöffnet wird. Es kann lokal oder auch beim Provider genutzt werden und dient dazu, Datenbank-Tabellen zu erzeugen oder zu pflegen. PHPMyAdmin ist selbst eine Sammlung von PHP-Skripten, das heißt, es ist vollständig in PHP geschrieben. Der Quellcode kann so von jedermann eingesehen werden. 2.1 Verwendung von PHPMyAdmin Bisher können Sie PHPMyAdmin über die Xampp-Start-Datei aufrufen. PHPMyAdmin Das hat den Nachteil, dass rechts der Xampp-Teil einen Teil des Bildschirms ausfüllt. Besser ist es, eine Verknüpfung auf den Desktop zu legen. Aufgabe: Machen Sie einen Rechtsklick auf dem Desktop, Befehl: Neu, Verknüpfung. Geben Sie als Adresse ein: http://localhost/phpmyadmin/index.php Dann auf Weiter klicken. Im nächsten Dialogfeld nur die Bezeichnung PHPMyAdmin eintragen! Wenn Sie jetzt PHPMyAdmin über die Verknüpfung starten, müsset auf dem Bildschirm sichtbar werden: 60 PHPMyAdmin Einsatz von MySQL unter Windows 2.2 Datenbank mit PHPMyAdmin erstellen Jetzt können Sie in PHPMyAdmin eine neue Datenbank mit MySQL erstellen. Als Übung soll eine kleine Datenbank namens Obst erstellt werden. Wenn PHPMyAdmin gestartet wurde, sehen Sie auf dem Monitor die Aufforderung zum Anlegen einer neuen Datenbank: hier den Namen der neuen Datenbank einsetzen: Diese Datenbank soll die folgenden beiden Tabellen enthalten (der Einfachheit halber als Access-Tabellen abgebildet): PHPMyAdmin meldet, dass die Datenbank erzeugt wurde, wenn Sie auf Anlegen geklickt haben.. Sie enthält natürlich noch keine Tabellen. Jetzt können Sie eine Tabelle erstellen. Zunächst soll die Tabelle Kategorie mit nur zwei Feldern eingerichtet werden: Auf OK klicken, wenn fertig! Jetzt können Sie die Felder der Tabelle einrichten: „unsigned“ bedeutet „ohne Vorzeichen, nimmt also nur positive Werte auf. Primärschlüssel nicht vergessen! Klicken Sie dann auf die Schaltfläche Speichern. PHPMyAdmin meldet, dass die Tabelle erstellt wurde. Der SQL-Befehl, der dazu erforderlich war, wird so auch angezeigt (Abbildung nächste Seite) 61 PHPMyAdmin Einsatz von MySQL unter Windows Meldung nach der Erzeugung der Tabelle: Aufgabe: Klicken Sie dann auf Einfügen. Es werden immer zwei leere Datensätze angeboten. Das Feld kat_id ist auto_incremement. Das entspricht dem Autowert bei Access, wird also vom Programm fortlaufend nummeriert. Es fehlt noch ein Eintrag in der Tabelle, also auf klicken und dann auf OK. Fügen Sie jetzt noch die letzte Kategorie ein, nämlich Zitrusfrüchte. Nach dem dritten Datensatz auf zurück klicken! Bestätigen Sie mit OK. Wenn Sie dann auf klicken, werden die Datensätze gezeigt: 62 PHPMyAdmin Einsatz von MySQL unter Windows Klicken Sie auch einmal auf Druckansicht (unten) um folgendes Ergebnis zu erzielen: Erstellen Sie dann die zweite Tabelle der Datenbank (Sorten) Dazu links im Fenster auf den Datenbanknamen obst klicken Dann steht wieder Neue Tabelle erstellen zur Verfügung. (sorten, Felder: 3) Entscheiden Sie selbst, wie Sie bei der Struktur vorgehen. Geben Sie in diese Tabelle die folgenden Daten ein: Sie können jetzt über SQL die Daten abrufen. Zum Beispiel können Sie anzeigen lassen, welche Obstsorten welcher Kategorie zugehörig sind: Aufgabe: Klicken Sie oben auf SQL und führen Sie folgende Abfrage aus: select Sorten.Bezeichnung, Kategorie.Kategorie from Sorten, Kategorie where Kategorie.Kat_ID=Sorten.Kat_ID Als Ergebnis sehen Sie: 63 PHPMyAdmin Einsatz von MySQL unter Windows Aufgabe: Erstellen Sie in PHPMyAdmin die Datenbank edv . Diese Datenbank soll die folgenden Tabellen enthalten: Artikel Artikel_Lieferanten Auftragsposition Aufträge Lieferanten 64 PHPMyAdmin Einsatz von MySQL unter Windows 3 Einlesen von Tabellen Die Excel-Arbeitsmappe Metallwaren.xls soll verwendet werden, um das Einlesen von Tabellen über PHPMyAdmin zu demonstrieren. Bei dieser Vorgehensweise müssen die Tabellen in Excel als csv-Datei abgespeichert werden, als einzelne Textdateien mit Begrenzern zwischen den Feldern (in der Regel Semikolon). Gehen Sie so vor, um die Datenbank Metallwaren über PHPMyAdmin zu erstellen: An erster Stelle muss die Datenbank Metallwaren in PHPMyAdmin erstellt werden, falls noch nicht vorhanden. Tabelle Kunde in Excel ohne Zeilenüberschriften (Feldnamen) speichern: (Speichern unter, Wechseln Sie zu PHPMyAdmin: Jetzt ist es erforderlich – wie bei SQL allgemein – zuerst die Tabellen von der Struktur her zu definieren. Zur Tabelle Kunde: Definieren Sie die Felder der Tabelle Kunde jetzt so: PHPMyAdmin meldet: Klicken Sie jetzt auf die Schaltfläche her gespeicherte Textdatei einzulesen. . Dort bekommen Sie die Möglichkeit, die vor- Scrollen Sie nach unten, um Textdatei in Tabelle zu finden: 65 PHPMyAdmin Einsatz von MySQL unter Windows unten (hier) anklicken! 6. Dann muss die Datei angegeben werden: Klicken Sie auf Durchsuchen und browsen sich zur Datei Kunde.csv durch. 7. auf Abschicken klicken! PHPMyAdmin meldet den Erfolg: dann auf klicken 66 PHPMyAdmin Einsatz von MySQL unter Windows Zur Tabelle Waren: In Excel als csv-Datei so speichern: dabei ergibt sich folgendes Problem: im Editor, wenn sie als csv-Datei gespeichert ist: Dezimaltrennzeichen: Komma aber für SQL erforderlich: Punkt deshalb: erst in der Systemsteuerung die Währungstrennzeichen von Komma auf Punkt setzen Ergebnis in Excel: Tabelle Waren in PHPMyAdmin erzeugen: Datei einlesen (wie oben) Ergebnis dann: Tabelle Bestellung: Die beiden schon vorhandenen Bestellnummern sind 10 und 20, deshalb wird hier nicht auto_increment für das Primärschlüsselfeld genommen. 67 PHPMyAdmin Einsatz von MySQL unter Windows Vorsicht beim Datum. Hier muss zuerst umformatiert werden, sonst ergibt sich folgendes Bild: Weil SQL das Datum in der Form Jahr-Monat-Tag verlangt, wird das Jahr 2011 erkannt, wenn das Datum in Excel in der Form: 11.01.03 vorliegt In Excel erst in der Form JJJJ.MM.TT (Format Zellen, Zahlen, benutzerdefiniert) speichern! Dann ist die Datei in PHPMyAdmin so zu sehen: Die Tabelle Bestelldetails sieht nach dem Umwandeln so aus: 3.1 Übungen zur Datenbank Metallwaren: 1. Fügen Sie einen Datensatz zur Tabelle Artikel ein: 2. Ändern Sie den Verkaufspreis der Nägel auf 0.03 3. Exportieren Sie die Tabelle als csv-Datei für Excel (ohne „“ als Feldbegrenzer) 4. Führen Sie die folgenden Aufgaben (nächste Seite) als SQL-Abfragen aus. Dazu ist es sinnvoll, sich die Beziehungen der Tabellen untereinander anzusehen: MySQL unterstützt keine referentielle Integrität. Über die SQL-Abfragen werden aber die Verbindungen zwischen den Tabellen hergestellt, wenn die Felder der Tabellen (Primär- und Fremdschlüssel) gleichgesetzt werden. 68 PHPMyAdmin Einsatz von MySQL unter Windows SQL-Aufgaben für PHPMyAdmin /Datenbank Metallwaren a. Wie heißt der Kunde Segers mit Vornamen? b. Wer hat die Bestellung mit der Nummer 10 bestellt? c. Wer bestellte über 1000 Stück von Waren_ID 4? d. Der Kunde Boll heißt mit Vornamen nicht Anna, sondern Annegret (bitte ändern) e. Erhöhen Sie den Lagerbestand der Artikel, die über 20 ct kosten, um 20 % f. welcher Kunde (Vorname und Name) hat etwas bestellt, wovon der der Lagerbestand unter 1000 Stück lag? g. Die Menge, die in der Bestellung mit der Bestellnr 120 eingetragen wurde, soll nicht 1000, sondern 500 sein. h. Zählen Sie die Anzahl der Artikel, von denen mindestens 1000 Stück auf Lager sind. 69 PHPMyAdmin Einsatz von MySQL unter Windows Lösungen: a. SELECT vorname from kunde where name="Segers"; b. select ku.name from kunde ku, bestellung be where be.bestellnummer=10 and be.kundennummer=ku.kundennummer; c. select ku.name from kunde ku, bestellung be, bestelldetails bd where bd.menge>1000 and bd.bestellnr=be.bestellnummer and be.kundennummer=ku.kundennummer; d. update kunde set vorname="Annegret" where name="Boll"; e. update Waren set lagerbestand=lagerbestand*1.2 where vk_preis>0.2 f. select ku.vorname, ku.name from kunde ku, bestellung be, bestelldetails bd,waren w where w.lagerbestand<1000 and w.artikel_id=bd.waren_ID and bd.bestellnr=be.bestellnummer and be.kundennummer=ku.kundennummer; g. update bestelldetails set menge=500 where bestellnr=10 and waren_id=3 h. select count(*) from waren where lagerbestand>1000; 70 PHPMyAdmin Einsatz von MySQL unter Windows 3.2 Dump erzeugen Ein Dump ist eine vollständige Auflistung der SQL-Befehle, die man gebraucht hätte, um eine Datenbank anzulegen und die darin enthaltenen Daten einzufügen. Man benötigt einen Dump als Datensicherung, aber vor allem, um Datenbanken oder Datenbanktabellen zum Provider zu transferieren. Ein Dump sieht beispielsweise so aus: --------------- version 2.6.0-pl3 http://www.phpmyadmin.net Host: localhost Erstellungszeit: 28. Februar 2005 um 10:01 Server Version: 4.1.8 PHP-Version: 5.0.3 Datenbank: `metallwaren` -------------------------------------------------------Tabellenstruktur für Tabelle `waren` CREATE TABLE `waren` ( `Artikel_ID` bigint(20) NOT NULL default '0', `Artikel` varchar(50) default NULL, `VK_Preis` decimal(12,2) default NULL, `Lagerbestand` bigint(20) default NULL, PRIMARY KEY (`Artikel_ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; --- Daten für Tabelle `waren` -INSERT INTO `waren` (`Artikel_ID`, (1, 'Schrauben', 0.20, 10000); INSERT INTO `waren` (`Artikel_ID`, (2, 'Nägel', 0.02, 2000); INSERT INTO `waren` (`Artikel_ID`, (3, 'Bolzen', 0.10, 1500); INSERT INTO `waren` (`Artikel_ID`, (4, 'Nieten', 0.03, 20000); INSERT INTO `waren` (`Artikel_ID`, (5, 'Dübel', 0.25, 800); INSERT INTO `waren` (`Artikel_ID`, (6, 'Klammern', 0.10, 10000); INSERT INTO `waren` (`Artikel_ID`, (7, 'Bolzen M8', 0.00, 100); `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES `Artikel`, `VK_Preis`, `Lagerbestand`) VALUES Dies ist der Dump der Tabelle Waren. Es ist auch möglich, den Dump für die gesamte Datenbank zu erstellen. Gehen Sie so vor, um den Dump in PHPMyAdmin zu erzeugen: 1. Wählen Sie eine Tabelle. 2. Klicken Sie auf 3. Sie sehen dann die verschiedenen Optionen für den Export der Daten (Abb. nächste Seite) 71 PHPMyAdmin Einsatz von MySQL unter Windows In den meisten Fällen können die Standardvorgaben übernommen werden. Wenn Sie unten auf OK klicken, wird der Dump erzeugt. 3.3 Dump als Datei speichern Bisher wurde der Dump in einem Fenster des PHPMyAdmin sichtbar (wo man natürlich auch markieren und kopieren kann, um die erzeugten Befehle an anderer Stelle zu nutzen). Um den Dump als Datei abzuspeichern, ist es nur erforderlich, anzukreuzen. Dann wird ein Dialogfeld gezeigt, wie man es vom Download von Dateien aus den Internet kennt. 72 PHPMyAdmin Einsatz von MySQL unter Windows Nach der Bestätigung mit OK folgt die Frage, wohin die Datei zu speichern sei, und steht dann als Textdatei mit allen SQL-Befehlen zur Verfügung. 3.4 Dump der kompletten Datenbank Genauso wie eine einzelne Tabelle kann auch der Dump einer kompletten Datenbank durchgeführt werden. Dazu klicken Sie links im PHPMyAdmin auf den fett formatiert erscheinenden Namen der Datenbank, um dann die Übersicht über die Tabellen zu sehen: Wenn Sie jetzt auf Exportieren klicken, sieht das Ganze etwas anders aus: Es werden alle Tabellen aufgelistet, und im Dump werden nacheinander die Befehle zum Erzeugen der Tabellen angezeigt. Aufgabe: Erzeugen Sie den Dump der kompletten Datenbank metallwaren als Datei. Öffnen Sie dann die entstandene Datei mit Word oder dem Notepad-Editor (Beim Öffnen auf Alle Dateien stellen, weil sonst keine Datei mit der Ergänzung .sql angezeigt wird. 3.5 Dump einlesen In der jetzt beschriebenen Vorgehensweise soll gezeigt werden, wie Sie aus einem vorliegenden Dump die komplette Datenbank aufbauen können. Aufgabe: Kopieren Sie zunächst die Datei flora.sql. Erstellen Sie dann die Datenbank flora in PHPMyAdmin. Klicken Sie dann auf die Schaltfläche SQL Klicken Sie dann auf die DurchsuchenSchaltfläche. Wenn die Datei im Textfeld zu sehen ist, auf OK klicken. PHPMyAdmin meldet: 73 PHPMyAdmin Einsatz von MySQL unter Windows Sie verfügen dann über die komplette Datenbank Flora mit sechs Tabellen – eingelesen aus einer Textdatei von nur 18 KB. Auf die Wichtigkeit dieses Themas sei noch einmal hingewiesen: Um eine Datenbank im Internet zu betreiben, müssen die Daten zum Provider gebracht werden. Dies geschieht entweder über das Einlesen von Textdateien (csv-Dateien), nachdem die Struktur der Datenbank vorher erstellt wurde), oder über den Dump. Es ist auch eine Kombination beider Vorgänge möglich, nämlich zunächst die Struktur der kompletten Datenbank als Dump einzuspielen (also alle create table-Befehle) und dann die Daten über Textdateien einzulesen. Vom Datentransfer ist dies auch die Methode mit den wenigsten Daten, wenn csv-dateien verwendet werden, es treten allerdings dabei meiner Erfahrung nach eher Probleme auf, als wenn ein Dump eingespielt wird. 3.6 Einlesen einer größeren Tabelle: ICD-10 Diagnosenthesaurus Im Downloadbereich der Website des Deutschen Instituts für medizinische Dokumentation und Information (DIMDI) finden Sie zum Thema "Thesaurus" die zip-Datei x3gea2005.zip zum Herunterladen. Wenn Sie die Datei entpacken, erhalten Sie diese beiden Dateien: Inhalt der idt2004so.txt ….. 74 PHPMyAdmin Einsatz von MySQL unter Windows Dort, wo mehrere Semikola nebeneinander zu sehen sind, handelt es sich um ein leeres Feld. Wenn wir je Zeile 5 Semikola zählen, sind es also 6 Felder pro Datensatz. Nähere Aufschlüsse darüber bietet die Datei liesmich.txt. Für Interessierte: DKR2005_Endversion_040916_1500.doc aus dem Ordner 6304/datenbank kopieren (Deutsche Kodierrichtlinien, 235 Seiten, ebenfalls von www.dimdi.de) 75 PHPMyAdmin Einsatz von MySQL unter Windows Die Datei liesmich.txt enthält folgenden Text: ICD-10-GM-Diagnosenthesaurus Version 2004, Stand 15. August 2003 Diese Version beruht auf der Version 2004 der ICD-10-GM. Sie dient damit den Zwecken der § 295 und § 301 SGB V. Jeder Datensatz besteht aus 6 Feldern, die jeweils durch ein Semikolon getrennt sind. Die Felder enthalten folgende Daten: Feld 1: Art der Kodierung 0 = reiner Verweissatz Diese Datensätze haben keine Schlüsselnummer, sondern innerhalb des Textfeldes Verweise auf andere Begriffe, unter denen ihre Schlüsselnummern nachgewiesen sind. 1 = Kodierung nur mit einer Primärschlüsselnummer 2 = Kodierung mit einer Kreuz- und einer Sternschlüsselnummer 3 = Kodierung mit einer Primärschlüsselnummer und mit einer Zusatzschlüsselnummer außerhalb des Kreuz-Stern-Systems 4 = Kodierung mit einer Kreuz-, einer Stern- und einer Zusatzschlüsselnummer Feld 2: Id (DIMDI-interne Nummer, ohne Bedeutung) Feld 3: Primärschlüsselnummer (ggf. mit Kreuz) Feld 4: Sternschlüsselnummer (mit Stern) Feld 5: Zusatzschlüsselnummer (ggf. mit Ausrufezeichen) Feld 6: zugehöriger Text, ggf. mit Verweis Diese Datei ist für die Integration in Programme zur Diagnosenverschlüsselung gedacht. Copyright Deutsches Institut f. medizinische Dokumentation und Information Köln 2003 Sie können dieser Datei also entnehmen, dass der Inhalt für eine Tabelle von sechs Feldern gedacht ist, und erfahren etwas über den Zweck dieser Datenfelder. Nähere Informationen zum Kreuz-Stern-System entnehmen Sie bitte den Kodierrichtlinien (doc-Datei s. vorige Seite) Hier nur ein Beispiel:2 Beispiel 7 (aus DKR 0401d Diabetes mellitus) Ein Patient mit Diabetes Typ 1 mit peripheren vaskulären Komplikationen in Form einer Atherosklerose der Extremitätenarterien mit Ruheschmerz wird zur Bypass-Operation aufgenommen. Zusätzlich besteht eine Retinopathie mit erheblicher Einschränkung des Sehvermögens. Hauptdiagnose: E10.50† Primär insulinabhängiger Diabetes mellitus [Typ-1-Diabetes] mit peripheren vaskulären Komplikationen, nicht als entgleist bezeichnet Nebendiagnose(n): I79.2* Periphere Angiopathie bei anderenorts klassifizierten Krankheiten I70.22 Atherosklerose der Extremitätenarterien, Becken-Bein-Typ, mit Ruheschmerzen E10.30† Diabetes mellitus mit Augenkomplikationen, nicht als entgleist bezeichnet H36.0* Retinopathia diabetica 2 Kodierrichtlinien, S. 28 76 PHPMyAdmin Einsatz von MySQL unter Windows Die Struktur der Tabelle thesaurus, die wir erzeugen wollen, ist folgende: Aufgabe: Erstellen Sie eine neue Datenbank mit dem Namen icd10 . In dieser Datenbank wird dann die Tabelle mit dem Namen thesaurus erstellt Aufgabe: Lesen Sie jetzt die Textdatei idt2004so.txt in die leere Tabelle thesaurus ein. (Struktur, Textdatei in Tabelle einfügen) Verwenden Sie die nebenstehenden Einstellungen: PHPMyAdmin meldet: Aufgabe: Zu Testzwecken soll jetzt ein Dump aus dieser Datenbank erstellt werden. Verwenden Sie Exportieren in PHPMyAdmin ! Kreuzen Sie Senden an. damit auch eine Datei daraus entsteht. Sie sehen schon hier, dass das Zeitverhalten anders ist (19 sec. beim Testen auf meinem knapp vier Jahre alten Athlon, 1 GHz Takt) Die daraus entstandene Datei hat eine Größe von 4,6 MB gegenüber 2,3 MB der reinen Textdatei. Wenn jetzt versucht wird, diese Datei (in eine neue Datenbank zu Testzwecken) wieder einzulesen, bekommt man eine Fehlermeldung: Im Falle einer solch großen Datei ist es also besser, die Textdatei zu importieren. 77 PHPMyAdmin Einsatz von MySQL unter Windows 4 PHP als serverseitige Skriptsprache PHP wurde ursprünglich 1995 von Rasmus Lerdorf entwickelt, der einige Tools programmierte, um zu sehen, wie seine Online-Bewerbungen abgerufen wurden. Die Abkürzung PHP stand ursprünglich für Personal Home Page Tools. Später wurde sie als Akronym für Hypertext Preprocessor verwendet, übersetzt könnte man sagen „HypertextVorschalt-Prozessor“. Die Entwicklung ist mittlerweile bei PHP 5.0 angekommen, und an PHP kommt heute niemand mehr vorbei, der sich für Datenbanken im Web interessiert. Die Anwendung von PHP lässt sich so beschreiben: • Zusammenarbeit mit dem Webserver: z.B. als Modul fest eingebaut im Apache • request-response Prinzip:3 1. Client schickt Anfrage an den Webserver 2. Webserver reicht Anfrage an z.B. PHP weiter 3. PHP generiert Ausgabe (z.B. HTML-Code) 4. Webserver schickt Ausgabe an den Client 5. Webserver beendet die Verbindung zum Client Zweck des Einsatzes von PHP ist es, HTML-Seiten dynamisch zu erzeugen, d.h. das HTML entsteht beim Seitenabruf. Angenommen, jemand macht eine Anfrage an eine medizinische Datenbank, dann erhält er das Ergebnis als „pures“ HTML. Der Rechner des Client, also des betrachters der Website, kann mit PHP gar nichts anfangen, es gelangt auch gar nicht zu ihm. Im Hintergrund hat eine Datenbankauswertung stattgefunden, und PHP hat über MySQL-Funktionen und seine eigenen Ausgabebefehle dafür gesorgt, dass wieder reines HTML gesendet wird. Im folgenden soll zuerst PHP "pur" vermittelt werden, um dann später auf die Datenbankanbindung einzugehen. PHP-Skripte werden vom Webserver ausgeführt. Wenn lokal am Rechner PHP-Dateien erstellt und getestet werden, dann ist es erforderlich, sie im Internet-Explorer mit ihrer lokalen Adresse aufzurufen, also zum Beispiel: http://localhost/test.php (dazu muss sich außerdem die Datei im htdocs-Ordner befinden) Keinesfalls können die Dateien durch einen Doppelklick über Arbeitsplatz oder Windows Explorer aufgerufen werden, denn in diesem Fall wird nur der HTML-Anteil "verstanden", der Webserver (hier: Apache) "merkt" ja dann gar nichts davon, dass diese Datei aktiviert wurde. Es ist zu umständlich, jedes Mal die Adresse komplett einzugeben. Und weil sich außerdem die Dateien (als default-Einstellung) im htdocs-Ordner befinden müssen, ist es einfacher, wenn wir uns zunächst eine Oberfläche schaffen, über die wir durch Anklicken des Links die Dateien öffnen. Die Datei php.php enthält eine Tabelle mit Links, z. B. 1.php. Durch Anklicken wird die Datei 1.php im Ordner C:\ XAMPP\htdocs\phptest aufgerufen (bzw. bei einer XAMPP-Standardinstallation auch C:\Apachefriends\XAMPP\htdocs\phptest). Wir können die Dateien, die übungshalber erstellt werden sollen, nun nacheinander mit den Dateinamen 1.php, 2.ph, 3.php usw. im htdocs-Ordner, Unterordner phptest, erstellen und speichern (mit dem HTML-Editor, PHP-Coder oder welchen Editor Sie bevorzugen), dann von der einmal gestarteten Datei php.php aus die einzelnen Übungen über den Link starten und testen. 3 http://www.thinkphp.de/ 78 PHPMyAdmin Einsatz von MySQL unter Windows Die Datei php.php zeigt folgenden Aufbau: Die Datei php.php enthält das HTML-Grundgerüst, den Link zur CSS-Datei standard.css (die z. B. die Hover-Effekte beim Darüberstreichen mit der Maus schafft), die Tabelle und die Links. php.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>PHP-Testdateien</title> <link rel="stylesheet" href="standard.css" type="text/css"> </head> <body> <h1>Startseite PHP-Test</h1> <br> <h2>Link anklicken:</h2> <table bordercolor="#0000FF" border="1" > <tr> <td width="100" height="50"><a href="1.php">1.php</a></td> <td width="100"><a href="2.php">2.php</a> </td> <td width="100"><a href="3.php">3.php</a> </td> <td width="100"><a href="4.php">4.php</a> </td> <td width="100"><a href="5.php">5.php</a> </td> <td width="100"><a href="41.php">41.php</a> </td> </tr>.....usw für die anderen Tabellenzeilen..... </tr></table> </body> </html> 79 PHPMyAdmin Einsatz von MySQL unter Windows 4.1 PHP in HTML-Dateien PHP-Sprachelemente werden in die HTML-Datei eingebettet. Sie eröffnen PHP mit <?php Nun folgen die PHP-Befehle. Zur Übergabe an HTML schließen Sie wieder mit ?> Es ist ohne Weiteres möglich, mehrmals hintereinander in einer Datei PHP „auf- und zu“ zu machen (Beispiele und Gründe, wozu das gut ist, sehen Sie etwas später). 4.2 Das Hallo-Welt-Skript Aufgabe: Erstellen Sie die erste Datei zum Testen. Sie enthält den für den ersten Schritt mit einer Programmiersprache klassischen "Hallo-Welt" –Test. Sie macht nichts anderes, als den Text "Hallo Welt" auf den Bildschirm zu bringen: 1.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 1.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>Das Hallo-Welt-Skript</h1> <p> <?php echo "Hallo Welt" ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Aufgabe: Verwenden Sie den Befehl Ansicht Quelltext, um den HTML-Code und die Textausgabe der Datei zu sehen: 80 PHPMyAdmin Einsatz von MySQL unter Windows Vergleichen Sie die Stelle, wo hier Hallo Welt steht, mit dem PHP-Skript! 4.3 Kommentare Es ist sinnvoll, im Quellcode mit Kommentaren zu arbeiten. Das Programm wird dadurch lesbarer. Vor allem, wenn man sich erst nach einer Zeit wieder den Code ansieht, versteht man ihn viel besser, wenn man mit Kommentaren gearbeitet hat. Für andere, die ihren Code lesen sollen, gilt dies natürlich erst recht. Einzeilige Kommentare werden mit zwei // (Schrägstrichen) oder einer Raute gemacht: <?php echo "Hallo Welt" //Ausgabe des Hallo-Welt-Standardtextes $wert=3+4 #der Variablen $wert wird 3 + 4 zugewiesen. ?> Mehrzeilige Kommentare werden von /* und */ eingeschlossen. $wert=3+4 /*der Variablen $wert wird das Ergebnis der Berechnung von 3 + 4 zugewiesen.*/ 4.4 die Funktion phpinfo() phpinfo zeigt Ihnen Infos über die Konfiguration von PHP an. Durch Aufruf dieser Funktion kann man sich davon vergewissern, welche Einstellungen gelten und welche Zusatzmodule ggf. geladen worden sind. Aufgabe: Die zweite Datei soll die in PHP integrierte Funktion phpinfo() ausführen. 2.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 2.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>PHP-Info</h1> <p> <?php phpinfo(); ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Sie zeigt (hier: Ausschnitt) die verschiedenen Einstellungen, die wichtig für das Funktionieren später benutzter Funktionen in PHP sind. 4.5 Variablen und Berechnungen in PHP 81 PHPMyAdmin Einsatz von MySQL unter Windows Variablen sind ein sehr wichtiger Bestandteil jeder Programmiersprache. Sie dienen dazu, Werte zwischenzuspeichern, die später wieder benötigt werden. In PHP gilt generell die Regel, dass Variablen mit einem $-Zeichen beginnen. PHP unterscheidet zwischen Groß- und Kleinschreibung. Sonderzeichen (außer dem Unterstrich) dürfen für Variablennamen in PHP nicht verwendet werden. Es ist nicht erforderlich, Variablen vor Gebrauch zu deklarieren. Den Datentyp (Integer für Ganzzahlen, Double für Dezimalzahlen, String für Text (muss innerhalb von Anführungsstrichen stehen) und Boolean (logisch, kann den Wert true oder false annehmen) wird von PHP automatisch erkannt. Einer Variable wird der Wert durch ein = Zeichen zugewiesen. $zahl = 45 Die Variable $zahl erhält den Wert 45 $text = "Wolfgang" Die Variable $text bekommt den Inhalt "Wolfgang" zugewiesen Achtung: beim Vergleich muss ein doppeltes == Zeichen verwendet werden! Das einfache Gleichheitszeichen weist nur einen Wert zu. Generell gelten für Berechnungen die Rechenzeichen, die auch in Anwendungsprogrammen wie z. B. Excel verwendet werden: Verwenden Sie folgende Rechenzeichen: addieren + * / subtrahieren multiplizieren dividieren Außerdem gilt eine abgekürzte Schreibweise für das Erhöhen bzw. Vermindern um 1, wie es auch in einigen anderen Sprachen eingesetzt wird. Statt des Ausdrucks: schreibt man kürzer: $z=$z +1 $++ $x=$x-1 $x -- $y=$y+2 $y+=2 $w=$w-5 $w- =5 Aufgabe: Erstellen Sie die nächste Datei. Mit ihr wird getestet, wie eine Variable verwendet wird und eine einfache Rechnung ausgeführt wird: 3.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 3.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>PHP</h1> <p> <?php $c=3+4; echo $c; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> 82 PHPMyAdmin Einsatz von MySQL unter Windows </body> </html> Der Variable mit dem Namen $c wird das Ergebnis der Rechnung 3+4 zugewiesen. Danach erfolgt die Ausgabe echo $c . Sie sehen auf dem Bildschirm: Aufgabe: Erstellen Sie die nächste Übungsdatei. 4.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 4.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>PHP</h1> <p> <?php $a=5; $b=8; $c=$a+$b; echo $c; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Hier wird zunächst den Variablen $a und $b eine Zahl zugewiesen. Dann erfolgt die Addition und die Zuweisung des Ergebnisses in die Variable $c. Auf dem Bildschirm müsste zu sehen sein: Aufgabe: Erstellen Sie die Datei 5.php. Der Unterschied ist hier nur, dass in der AusgabeZeile die Verwendung von Variablen und Text zu sehen ist. Innerhalb der Anführungszeichen nach echo wird alles ausgegeben, sei es einfacher Text, Variablen oder auch HTML. 5.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 5.php --> 83 PHPMyAdmin Einsatz von MySQL unter Windows <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>PHP</h1> <p> <?php $a=5; $b=8; $c=$a+$b; echo "Die Summe von $a und $b ergibt $c"; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Auf dem Monitor sehen Sie: Aufgabe: Ändern Sie an der folgenden Datei nur die echo-Zeile und speichern Sie mit dem Namen 6.php . Hier soll gezeigt werden, wie innerhalb der Ausgabe auch HTMLTags verwendet werden können: 6.php ... echo "Die <i>Summe</i> von <b>$a</b> und <b>$b</b> <u>ergibt</u> <b>$c</b>"; ... Als Ausgabe sehen Sie: Aufgabe: Erstellen Sie nun die Datei 7.php. <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 7.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> 84 PHPMyAdmin Einsatz von MySQL unter Windows <body> <h1>Verkettung von Strings</h1> <p> <?php $text1="Der Anfang"; $text2="und die Fortsetzung"; echo "$text1 $text2"; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Die Ausgabe ist folgende: An diesem Beispiel ist zunächst noch nichts Neues. In der Fortsetzung sehen Sie, worauf das Ganze hinauslaufen soll. Aufgabe: Erstellen Sie Datei 8.php. Hier soll die Verkettung von Zeichen durch den PunktOperator gezeigt werden. Wozu in Javascript das Plus-Zeichen dient, wird in PHP der Punkt verwendet. Verändern Sie an der Datei 8.php gegenüber der Datei 7.php nur die echo-Zeile: echo ($text1 . $text2); Die Ausgabe ist dieselbe wie bei der zuvor erstellten Datei. Bei diesem Beispiel ist der Punkt als Verkettungsoperator tatsächlich gar nicht nötig, aber für die Ausgabe aus Funktionen wird dieses Verfahren benötigt. Außerdem wird es, wie im nächsten Beispiel zu sehen, verwendet, um mit einer verkürzten Schreibweise nach und nach Werte zu verketten, indem sie aneinandergefügt werden. 9.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 9.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>Verkettung von Strings</h1> <p> <?php $text="Der Anfang "; $text.="und die Fortsetzung"; echo ($text); ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Die Ausgabe wird wieder dieselbe sein wie bei den beiden Dateien vorher. – Hier geschieht folgendes; Zuerst ist in der Variablen $text nur "der Anfang". In der nächsten Zeile $text.="und die Fortsetzung"; wird dem bisherigen Inhalt von $text über den Punkt etwas hinzugefügt, nämlich der zweite Teil des Textes. Dann erfolgt wieder die Ausgabe des Textes. 85 PHPMyAdmin Einsatz von MySQL unter Windows Dieses Verfahren wird häufig verwendet, um nach und nach den Inhalt einer String-Variablen mit immer mehr Inhalt zu füllen. 86 PHPMyAdmin Einsatz von MySQL unter Windows 4.6 Arrays Im Unterschied zu den bisher verwendeten Variablen sind Arrays mehrdimensional. Das bedeutet, dass man in einem Array mehr als einen Wert speichern kann. Über einen Index (die Zahl in eckigen Klammern) sind die Werte aufzurufen. Aufgabe: Erstellen Sie die folgende Datei: 10.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 10.php --> <head> <link rel="stylesheet" href="standard.css" type="text/css"> <title></title> </head> <body> <h1>Arrays in PHP</h1> <p> <?php $vorname[0]="Herbert"; $vorname[1]="Johannes"; $vorname[2]="Dieter"; $vorname[3]="Petra"; $vorname[4]="Beate"; $vorname[5]="Gerd"; $vorname[6]="Karl-Heinz"; // den vierten Namen ausgeben echo $vorname[3]; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Da die Zählung im Array mit 0 beginnt, ist der vierte Vorname der, der dem Array mit $vorname[3]="Petra"; zugewiesen wurde. Der Monitor zeigt: Aufgabe: Arrays können auch in einer abgekürzten Form verwendet werden. Das soll das folgende Beispiel zeigen: 11.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 11.php --> <head> <title>Arrays</title> <link rel="stylesheet" href="standard.css" type="text/css"> </head> <body> <body> 87 PHPMyAdmin Einsatz von MySQL unter Windows <h1>Array in Kurzform</h1> <p> <?php $name=array("Schmitz","Meyer","Müller","Paulsen","Demorgitas","Lesotra", "Lohmann"); // Den fünften Namen ausgeben echo $name[4]; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Der Code 11.php führt zu dieser Ausgabe: Aufgabe: Erstellen Sie jetzt die Datei 12.php. Dem Array $tag werden die einzelnen Wochentage zugewiesen. Die in PHP integrierte date()-Funktion mit dem Zusatz "w" liefert den aktuellen Tag als Zahl, beginnend mit Sonntag=0. Das entspricht der Indizierung, die wir über den Array vornehmen: 12.php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <!-- 12.php --> <head> <title>Arrays</title> <link rel="stylesheet" href="standard.css" type="text/css"> </head> <body> <body> <h1>Tag mit Array ermitteln</h1> <p> <?php $tag=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag", "Samstag"); $tagzahl=date("w"); // Tag ermitteln echo "Heute ist $tag[$tagzahl]."; ?> </p> <a href="http://localhost/php.php">zurück zur Startseite</a> </body> </html> Die Ausgabe muss den aktuellen Tag zeigen (Donnerstag also nur, wenn tatsächlich Donnerstag ist) 88