Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL...

30
PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea Heymann-Reder & Lars Schulten 2. Auflage Behandelt PEAR, PHP 5 & MySQL 4.1

Transcript of Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL...

Page 1: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

PHP und

MySQL

Webdatenbank-Applikationen mit

Hugh E. Williams & David LaneDeutsche Übersetzung von

Dorothea Heymann-Reder & Lars Schulten

2. Auflage

Behandelt PEAR,

PHP 5 & MySQL 4.1

Page 2: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea
Page 3: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

Beijing · Cambridge · Farnham · Köln · Paris · Sebastopol · Taipei · Tokyo

Webdatenbank-Applikationen mitPHP und MySQL

Hugh E. Williams & David Lane

Deutsche Übersetzung vonDorothea Heymann-Reder & Lars Schulten

Page 4: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.Alle Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind möglicherweise eingetragene Warenzeichen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen der Hersteller. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung,Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Kommentare und Fragen können Sie gerne an uns richten:O’Reilly VerlagBalthasarstr. 8150670 KölnTel.: 0221/9731600Fax: 0221/9731608E-Mail: [email protected]

Copyright der deutschen Ausgabe:© 2005 by O’Reilly Verlag GmbH & Co. KG1. Auflage 20032. Auflage 2005

Die Originalausgabe erschien 2004 unter dem TitelWeb Database Applications with PHP and MySQL, 2nd Edition bei O’Reilly Media, Inc.

Die Darstellung eines Schnalbeltiers im Zusammenhang mit dem Thema Webdatenbanken mit PHP und MySQL ist ein Warenzeichen von O’Reilly Media, Inc.

Bibliografische Information Der Deutschen BibliothekDie Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.

Übersetzung und deutsche Bearbeitung: Dorothea Heymann-Reder, Bornheim & Lars Schulten, KölnLektorat: Alexandra Follenius, KölnKorrektorat: Friederike Daenecke, ZülpichSatz: G&U e.Publishing Services GmbH, FlensburgUmschlaggestaltung: Ellie Volckhausen, Hanna Dyer & Clay Fernald, BostonProduktion: Karin Driesen, KölnBelichtung, Druck und buchbinderische Verarbeitung: Druckerei Kösel, Krugzell; www.koeselbuch.de

ISBN 3-89721-387-7

Dieses Buch ist auf 100% chlorfrei gebleichtem Papier gedruckt.

Page 5: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Inhalt | V

First

Max.Linie

Max.Linie

Inhalt

Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IX

1 Datenbank-Anwendungen und das Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Das Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Dreischichtige Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Die Skriptsprache PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Einführung in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Bedingungen und Verzweigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Umgang mit Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Benutzerdefinierte Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Ein Beispiel-Skript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

3 Arrays, Strings und der Umgang mit Daten in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Datum und Uhrzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Integer und Floats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4 Einführung in die objektorientierte Programmierung mit PHP 5 . . . . . . . . . . . . . . . . 113Klassen und Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Exceptions auslösen und abfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Page 6: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

VI | Inhalt

Links

Max.Linie

Max.Linie

5 SQL und MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Grundlagen von Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Der Befehlsinterpreter von MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Datenbanken und Tabellen verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Daten einfügen, ändern und löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Abfragen mit SQL SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Join-Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Fallstudie: Ein neuer Wein wird hinzugefügt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

6 Webdatenbanken abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Eine MySQL-Datenbank mit PHP abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181Benutzereingaben verarbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199MySQL-Funktionsreferenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

7 PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Kernkomponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

8 In Webdatenbanken schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268Das Einfügen, Aktualisieren und Löschen bei Datenbanken . . . . . . . . . . . . . . . . 268Probleme bei Schreiboperationen auf Datenbanken . . . . . . . . . . . . . . . . . . . . . . . 289

9 Validierung mit PHP und JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305Prinzipien der Validierung und Fehlermeldung . . . . . . . . . . . . . . . . . . . . . . . . . . 305Serverseitige Validierung mit PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308JavaScript und die Validierung auf der Client-Seite . . . . . . . . . . . . . . . . . . . . . . . 329

10 Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Session-Management kurz vorgestellt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364PHP-Session-Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Fallstudie: Sessions zur Validierung verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . 374Wann Sessions verwendet werden sollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Die Session-API von PHP und ihre Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . 387

11 Authentifizierung und Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398HTTP-Authentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399HTTP-Authentifizierung mit PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403Formularbasierte Authentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416Daten im Web schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430

Page 7: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Inhalt | VII

Rechts

Max.Linie

Max.Linie

12 Fehler, Debugging und Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Häufige Programmierfehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441Selbst definierte Fehlerbehandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

13 Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Berichte erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Erstellung von PDFs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462PDF-PHP-Referenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

14 Fortgeschrittene objektorientierte Programmierung mit PHP 5 . . . . . . . . . . . . . . . . . 494Der Umgang mit Klassenhierarchien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494Klassentypen-Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Abstrakte Klassen und Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Beispiel: Versandkostenrechner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506

15 SQL für Fortgeschrittene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517SHOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518Fortgeschrittene Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519Manipulation von Daten und Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545Automatisierung von Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554Tabellentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557Sicherung und Wiederherstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564Benutzer und Berechtigungen verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570Tuning von MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574

16 Hugh and Dave’s Online-Wines: Eine Fallstudie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585Funktions- und Systemanforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586Anwendungsüberblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589Allgemeine Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

17 Kunden verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629Überblick über den Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630Validierung der Kundendaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632Das Kundenformular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638

18 Der Warenkorb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643Überblick über den Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Die Homepage der Weinhandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646Die Warenkorb-Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651

Page 8: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

VIII | Inhalt

Links

Max.Linie

Max.Linie

19 Bestellung und Lieferung bei der Online-Weinhandlung . . . . . . . . . . . . . . . . . . . . . . 666Überblick über den Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667Kreditkarten und Lieferungsanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669Bestellungen abschließen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672HTML- und E-Mail-Bestätigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

20 Suchen und Authentifizieren bei der Online-Weinhandlung . . . . . . . . . . . . . . . . . . . . 691Überblick über den Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692Suchen und Stöbern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697Authentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

A Installation unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718

B Installation unter Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740

C Installation unter Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751

D Webprotokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768

E Modellierung und Entwurf von relationalen Datenbanken . . . . . . . . . . . . . . . . . . . . . 780

F Session-Management in der Datenbank-Schicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802

G Quellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818

H Die verbesserte MySQL-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837

Page 9: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

| IX

First

Max.Linie

Max.Linie

Vorwort

Es gibt massenweise Material zu PHP und MySQL. Warum also noch dieses Buch auf denMarkt bringen? Wir haben uns dazu entschlossen, nachdem wir im Jahre 1999 einenPHP-Kursus für Diplomanden abgehalten hatten. Dort stellte sich heraus, dass die Manu-als von PHP und MySQL, ebenso wie die meisten Bücher, dem Leser zwar erklären, wie erbestimmte Tools benutzen soll, aber nichts über die Prinzipien der Webprogrammierungaussagen. Wir erkannten, dass Webadministratoren und -programmierer mehr wissenmüssen als nur, welche PHP-Funktionen es gibt und wie man SQL-Abfragen schreibt.Diese Lücke schließt das vorliegende Buch: Es beschreibt die Programmierung von Web-datenbank-Anwendungen und bringt Ihnen dabei auch die Prinzipien nahe.

Sie erfahren, was zu tun ist und warum, und überdies, wie diese Aufgaben mit PHP undMySQL gelöst werden. Die Informationen dieses Buchs bekommen Sie nirgends sonst.Hoffentlich werden Sie dieses Wissen künftig bei der Entwicklung Ihrer Webtoolsanwenden können. Darüber hinaus lernen Sie jedoch PHP und MySQL in aller Ausführ-lichkeit kennen. Am Ende dieses Buchs sind Sie in der Lage, einen Online-Shop, ein Por-tal oder ein Content Management System aufzubauen.

Über dieses BuchDieses Buch wendet sich an Entwickler von Datenbank-Anwendungen für das Internet.Sie lernen die Prinzipien und Techniken der Entwicklung kleiner bis mittelgroßer Webda-tenbank-Anwendungen zur Speicherung, Verwaltung und Abfrage von Daten kennen.Die hier beschriebene Architektur ist ein erfolgreiches Framework für Anwendungen, dieauch mit bescheidener Hardware-Ausstattung zurechtkommen und dennoch mehr alseine Million Zugriffe pro Tag verarbeiten können.

Wir zeigen Ihnen alle wichtigen Aufgaben, die zur Erstellung einer erfolgreichenWebsoftware gehören: die Grundlagen der Webprogrammierung sowie die Prinzipienund Praxis der Arbeit mit Datenbanken unter Verwendung der Abfragesprache SQL. Sieverfolgen Benutzeraktivitäten mit Sessions, bauen eine sichere Anwendung auf, trennen

Page 10: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

X | Vorwort

Links

Max.Linie

Max.Linie

die Präsentationsschicht vom Code, schreiben datenbankunabhängigen Code, erstellenBerichte, fügen eine Fehlerbehandlung hinzu und lernen etwas über Objektorientierungund Datenbank-Themen.

Ein wichtiges Element dieses Buchs ist unsere Fallstudie einer Online-Weinhandlungnamens Hugh and Dave’s Online Wines. Das ist ein fiktiver, aber voll ausgereifter Online-Shop, an dem wir zeigen, wie sich die in diesem Buch beschriebenen Techniken zu einerechten Anwendung zusammensetzen lassen. In der Weinhandlung können die Benutzereine Weindatenbank durchsuchen, Waren in einen Warenkorb legen, ihre Mitgliedschaftverwalten und – natürlich – Wein kaufen. Der Shop hat alle Grundelemente einer echtenAnwendung, einschließlich Sicherheitsfeatures, Benutzerverfolgung und Fehlerbehand-lung. Hinzu kommt eine mittelgroße Datenbank, die in den Beispielen des ganzen Buchsimmer wieder abgefragt wird.

Wir verwenden Open Source-Software und zeigen, wie diese auf Unix-Systemen wieLinux und Mac OS X, aber auch unter Microsoft Windows 2000, 2003 und XP eingesetztwird. Unser Datenbankserver läuft mit MySQL, einem System, das sich bekanntermaßensehr gut für Anwendungen eignet, bei denen es auf Schnelligkeit und schonenden Res-sourcenverbrauch ankommt. Als Skriptsprache verwenden wir PHP, das für seine Funkti-onsbibliotheken berühmt ist, die mit mehr als 15 relationalen Datenbank-Systemen, derWebumgebung und vielen Diensten zusammenarbeiten. Als Webserver haben wir unsApache ausgesucht, aber die meisten anderen Webserver eignen sich ebenfalls fürMySQL, PHP und die Arbeit mit diesem Buch.

Sie sollten Folgendes wissenIn diesem Buch geht es um das Verstehen und Entwickeln einer Anwendungslogik, dieDatenbanken und das Web zusammenbringt. Im Laufe dieses Buchs führen wir zwarDatenbank-Systeme ein, aber unsere Ausführungen sollen keine Spezialliteratur über dieTheorie relationaler Datenbanken oder über spezielle relationale Datenbank-Systeme wieMySQL ersetzen. Außerdem setzen wir voraus, dass Sie mit dem Web vertraut sind. Wirwerden nicht sehr tief in die drei zentralen Webprotokolle HTML, HTTP und TCP/IPeinsteigen.

Sie müssen nicht programmieren können, um dieses Buch zu nutzen, aber Sie müssen einwenig von HTML verstehen. Unsere Einführung in PHP setzt keine weit reichendenKenntnisse in Webscripting oder Programmierung voraus, aber einfache HTML-Kon-strukte und die gebräuchlichen Webbrowser sollten kein Neuland für Sie sein. Wenn Siein der Lage sind, ein HTML-Dokument mit einem Formular und einer Tabelle mithilfeeines einfachen Texteditors zu erstellen, reichen Ihre HTML-Kenntnisse für dieses Buchaus. Wichtig sind die Prinzipien und die Struktur des Markup-Prozesses, nicht die Schön-heit oder Benutzbarkeit der Präsentation im Webbrowser.

Detaillierte Kenntnisse über relationale Datenbanken sind für dieses Buch nicht vonnö-ten, aber etwas praktische Erfahrung wäre hilfreich. Wir erklären die Theorie relationaler

Page 11: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

Vorwort | XI

Rechts

Max.Linie

Max.Linie

Datenbanken nur so weit, wie es für die Entwicklung einfacher Anwendungen notwendigist. Außerdem behandeln wir viele andere Grundlagen, darunter die Frage, wie man fest-stellt, ob eine Datenbank für die Speicherung von Daten geeignet ist, sowie die Daten-banksprache SQL und eine Fallstudie, in der die Systemanforderungen modelliert unddas Modell in einen Datenbank-Entwurf überführt wird. Dieses Buch soll nicht die vielenguten Quellen zur Theorie von Datenbanken ersetzen, aber es reicht für den Anfang aus,um die Datenbanken für viele Webdatenbank-Anwendungen zu entwickeln.

Webserver und Netzwerke werden in Kapitel 1 kurz eingeführt, und in Anhang B gibt eszusätzliches Material dazu. Sowohl Webserver als auch Netzwerke sind zwar wichtig fürWebdatenbank-Anwendungen, stehen aber nicht im Zentrum dieses Buchs. Wir gebenIhnen genug Informationen, um einen Webserver einzurichten und um zu verstehen, wieer in die Architektur einer Webdatenbank-Anwendung passt. Für viele Anwendungenreicht das bereits aus. Ebenso gehen wir auf Netzwerke ein: Sie erfahren genug, um dieAuswirkungen von Netzwerken und ihren Protokollen auf den Entwurf von Webdaten-bank-Anwendungen zu verstehen.

Aufbau dieses BuchsDieses Buch enthält 20 Kapitel und 8 Anhänge. Die Kapitel 1 bis 5 sind eine Einführungin Webdatenbank-Anwendungen, PHP, MySQL und SQL:

Kapitel 1, Datenbank-Anwendungen und das WebHier werden die in Webdatenbank-Anwendungen häufig verwendete Drei-Schich-ten-Architektur sowie der Austausch von Daten zwischen Browsern und Servernerklärt. Außerdem gibt es eine Einführung in PHP und MySQL, und wir beantwor-ten die Frage, wo und warum Datenbanken im Web eingesetzt werden. Zusätzlichwerden die Merkmale von MySQL 4.1 und PHP 5 besprochen.

Kapitel 2, Die Skriptsprache PHPDieses Kapitel ist eine Einführung in die Skriptsprache PHP, ihre Programmierung,ihre Grundlagen, Variablen, Typen, Funktionen und Techniken.

Kapitel 3, Arrays, Strings und der Umgang mit Daten in PHPHier geht es um die PHP-Features auf der mittleren Ebene, also um die Arbeit mitArrays, Strings sowie mit Datums- und Uhrzeitwerten. Zur Veranschaulichung gibtes viele kurze Beispiele, die zeigen, wie die verschiedenen Techniken in der Praxiseingesetzt werden.

Kapitel 4, Einführung in die objektorientierte Programmierung mit PHP 5Hier wird der Umgang mit einfachen objektorientierten (OO) Features von PHP 4 undPHP 5 gezeigt und erklärt, warum die OO-Programmierung so beliebt ist und auch inPHP immer wichtiger wird. Eine ausführlichere Beschreibung der OO-Features inPHP 5 finden Sie in Kapitel 14, doch das vorliegende Kapitel verrät Ihnen alles, was Siefür den Umgang mit den in Kapitel 7 erklärten PEAR-Paketen benötigen.

Page 12: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

XII | Vorwort

Links

Max.Linie

Max.Linie

Kapitel 5, SQL und MySQLDieses Kapitel ist eine Einführung in MySQL und zeigt, wie die Abfragesprache SQLzur Interaktion mit diesem Datenbank-System eingesetzt wird. Im Zentrum stehtdabei ein Abschnitt über Abfragen, der durch viele Beispiele aus der Datenbankunserer Online-Weinhandlung anschaulich wird. Außerdem erfahren Sie Grundla-gen über die Erstellung, Löschung und Änderung von Daten und Datenbanken. Einegenauere Erklärung der Features von MySQL 4.1 finden Sie in Kapitel 15, doch diein Kapitel 5 enthaltenen Grundlagen reichen für die Arbeit mit dem Material aus die-sem Buch bis Kapitel 13 und für das Nachvollziehen der Fallstudie zur Online-Wein-handlung in den Kapiteln 17 bis 20 aus.

Die Kapitel 6 bis 11 behandeln die Prinzipien und die Praxis der Entwicklung einerAnwendungslogik für Webdatenbank-Anwendungen.

Kapitel 6, Webdatenbanken abfragenHier erfahren Sie, wie MySQL mit PHP verbunden wird. Wir erklären den Abfrage-prozess, der in den meisten Interaktionen mit MySQL zum Einsatz kommt, undgeben Beispiele für die Anwendung der MySQL-Bibliotheksfunktionen von PHP.Wir zeigen, wie Sie Benutzerdaten codieren, in Anfragen von einem Webbrowser aneinen Webserver senden und dann für die Verarbeitung mit PHP wieder decodierenkönnen. Außerdem erklären wir, welche Sicherheitsimplikationen die Verarbeitungvon Benutzerdaten mit sich bringt, und zeigen, wie interaktive Abfragesysteme sichergemacht werden. Zu unseren Ausführungen geben wir kurze Beispiele, an denen Siesehen, wie einfache Abfragemodule aufgebaut werden.

Kapitel 7, PEARDieses Kapitel beschreibt das Archiv von PEAR-Paketen. Pakete sind Quellcodemo-dule, die Sie in Ihren Code integrieren können, damit Sie das Rad nicht zweimalerfinden müssen. Zu PEAR gehören mehr als 100 Pakete für so verschiedene Aufga-ben wie Datums- und Uhrzeitverarbeitung, Sicherheit, Networking und Datenbank-Zugriff, und dieses Kapitel zeigt Ihnen, wie diese Pakete installiert und aktualisiertwerden. Den Schwerpunkt bilden ein Vorlagenpaket, ein nützliches Tool für dieTrennung von HTML und Code, sowie ein anderes Paket für Datenbank-Abstrak-tion. Beide Pakete werden in späteren Kapiteln eingesetzt, um stabilen, wiederver-wendbaren Code zu schreiben.

Kapitel 8, In Webdatenbanken schreibenHier werden Schreibvorgänge auf Webdatenbanken behandelt. Das Schreiben vonDaten ist aus mehreren Gründen etwas ganz anderes als das Abfragen und wirddaher in Kapitel 6 nicht erklärt. So kann zum Beispiel das erneute Laden oderÄndern einer Seite in einem Webbrowser dazu führen, dass mehrmals auch Daten ineine Datenbank geschrieben werden. Wenn mehrere Benutzer auf dieselbe Daten-bank zugreifen, entstehen noch andere Probleme, etwa die, dass Daten, die der eineBenutzer gerade liest, überraschend von einem anderen Benutzer geändert werden.In diesem Kapitel gehen wir auf Probleme ein, die sich aus der Natur des Webs unddes Mehrbenutzerbetriebs ergeben. Wir veranschaulichen die Prinzipien an einer

Page 13: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

Vorwort | XIII

Rechts

Max.Linie

Max.Linie

Fallstudie, die Formulardaten von einem Benutzer abfragt und in einer Datenbankspeichert.

Kapitel 9, Validierung mit PHP und JavaScriptDieses Kapitel hängt mit Kapitel 8 zusammen und stellt die Prinzipien und Techni-ken zur Validierung der Benutzereingabe in den Mittelpunkt. Wir zeigen, wieDatumswerte, Kreditkartennummern und Telefonnummern überprüft werden, underklären, wie diese Techniken in Modulen zur Fehlerprüfung eingesetzt werden, dieskalierbar und praktisch für Webdatenbank-Anwendungen sind. Außerdem gebenwir eine Einführung in clientseitiges, browserbasiertes JavaScript und zeigen seinenEinsatz für häufige Aufgaben, einschließlich der Validierung von Benutzereingabenin den Webbrowser.

Kapitel 10, SessionsHier wird prinzipiell erklärt, wie man eine Webdatenbank-Anwendung mit Session-Management ausstattet. Durch das Session-Management können die Interaktionenzwischen Benutzer und Anwendung in einen Zusammenhang gebracht werden, sodass sich ein Benutzer beispielsweise bei einer Anwendung an- und abmelden kannund währenddessen durch eine Reihe von Schritten geführt wird. Wir zeigen, wiePHP Sessions managt und veranschaulichen das Ganze mit einer Fallstudie, die Feh-lermeldungen an den Benutzer steuert. Außerdem erläutern wir, wann man Sessionsbenutzt und wann nicht, und erklären, wie der Session-Handler von PHP so konfigu-riert wird, dass er sicher und skalierbar wird.

Kapitel 11, Authentifizierung und SicherheitDieses Kapitel handelt von der Sicherheit und Authentifizierung im Web. Wir zei-gen, wie man mit PHP eine grundlegende Authentifizierung bewerkstelligt, wieDatenbanken zur Verwaltung von Benutzern eingesetzt werden und warum Siebestimmte Datenübertragungen mit Secure Sockets Layer (SSL) sicher machen müs-sen. Die Fallstudie ist ein wiederverwendbares Authentifizierungsmodul mit Funk-tionen zum An- und Abmelden und zum Ändern von Passwörtern.

Die Kapitel 12 bis 15 beschreiben Aufgaben und Techniken, die zur Erstellung einer echtenAnwendung oder zur Weitergabe einer Anwendung an die Benutzer von Bedeutung sind.

Kapitel 12, Fehler, Debugging und DeploymentIm Zentrum dieses Kapitels stehen die Fehlerbehandlung und das Debugging. Wirbeschreiben, welche Fehlertypen in PHP auftreten, und zeigen Ihnen, wie Sie dieUrsachen verbreiteter Programmierfehler ausfindig machen. Danach zeigen wir, wieSie einen eigenen Fehlerbehandler schreiben können, der sich in die Anwendung ein-binden lässt, und wie Sie selbst Fehler auslösen können, wenn dies einmal nötig seinsollte. Mit einem individuell erstellten Fehlerbehandler wird Ihre Anwendung pro-fessioneller.

Kapitel 13, ReportingDieses Kapitel beschreibt das Reporting im Web und funktionierende Lösungen mitPHP. Insbesondere sollen PDF-Berichte (PDF – Adobe Portable Document Format)mithilfe einer verbreiteten PDF-Bibliothek für PHP erstellt werden. Die Techniken

Page 14: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

XIV | Vorwort

Links

Max.Linie

Max.Linie

werden mit mehreren Beispielen veranschaulicht. Am Ende des Kapitels steht eineFunktionsreferenz für die verwendete Klasse.

Kapitel 14, Fortgeschrittene objektorientierte Programmierung mit PHP 5Dieses Kapitel beschreibt die fortgeschritteneren Features der objektorientierten Pro-grammierung mit PHP 5. Wir bauen auf Kapitel 4 auf und zeigen, wie Klassen aufge-baut und wiederverwendet werden und wie man mächtige OO-Anwendungenschreibt. Am Schluss des Kapitels zeigen wir an einer Fallstudie, wie alle dieseFeatures in eine komplexe und mächtige Klassenhierarchie einfließen.

Kapitel 15, SQL für FortgeschritteneHier lernen Sie die fortgeschrittenen Merkmale von MySQL 4.1 kennen. Das Kapitelbaut auf den Ausführungen von Kapitel 5 auf und zeigt, wie man komplexe Abfragenschreibt, Daten auf komplexe Weise bearbeitet, Benutzer verwaltet und die Daten-bank sowie den MySQL-Server tunt.

In den Kapiteln 16 bis 20 wird die Fallstudie mit der Weinhandlung präsentiert und skiz-ziert. So sehen Sie, wie die meisten in diesem Buch beschriebenen Techniken beim Baueiner Anwendung zusammenkommen. Die Erklärungen sind nicht erschöpfend: Wirmüssen schon voraussetzen, dass Sie das Buch gelesen und die Grundprinzipien der Ent-wicklung von Webdatenbank-Anwendungen verstanden haben.

Kapitel 16, Hugh and Dave’s Online-Wines: Eine FallstudieDieses Kapitel erklärt die Struktur der Weinhandlungsanwendung und beschreibt,wie sich die in den vorangegangenen Kapiteln beschriebenen Prinzipien zu einer ech-ten Anwendung zusammenfügen, die flexibel, stabil, sicher und skalierbar ist. Außer-dem zeigen wir in Abbildungen und Erklärungen, wie die Skripten zusammenarbei-ten, erläutern, wie die Klassen und Funktionen für allgemeine Aufgaben entwickeltwurden, und geben Ihnen Codelistings für alle wiederverwendbaren Komponentenan die Hand.

Kapitel 17, Kunden verwaltenHier finden Sie den Code für die Kundenverwaltung in unserer Weinhandlung. Wirpräsentieren die Skripten, mit denen die Kundendaten gesammelt, validiert undmodifiziert werden, und zeigen, wie neue Accounts angelegt werden.

Kapitel 18, Der WarenkorbHier finden Sie den Code für den Warenkorb der Weinhandlung. Der Warenkorbwird in einer Datenbank gespeichert und für jeden Benutzer mit den Session-Tech-niken aus Kapitel 10 nachgehalten. Das Warenkorbmodul gestattet dem Benutzer, inden Warenkorb hineinzuschauen, Waren hinzuzufügen, Mengen zu ändern, Pro-dukte zu löschen und den ganzen Warenkorb zu leeren.

Kapitel 19, Bestellung und Lieferung bei der Online-WeinhandlungIn diesem Kapitel wird der Code der Shop-Module für Bestellung und Versand prä-sentiert. Am Bestellprozess wird gezeigt, wie man die komplexe Datenbank-Verarbei-tung nutzt, um aus einem Warenkorb eine Kundenbestellung zu machen. Außerdemzeigen wir die Validierung von Kreditkartendaten, das Versenden von Auftragsbestä-tigungen per E-Mail an den Benutzer und die Anzeige der Bestätigung als HTML-Seite.

Page 15: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

Vorwort | XV

Rechts

Max.Linie

Max.Linie

Kapitel 20, Suchen und Authentifizieren bei der Online-WeinhandlungAm Schluss der Weinhandlungsanwendung gehen wir auf die Module für die Benut-zerauthentifizierung und das Suchen ein. Das Authentifizierungsmodul ist fast iden-tisch mit dem Modul aus Kapitel 11. Das Modul zu Suchen und Browsen zeigt, wieeine Komponente gestaltet wird, die eine große Anzahl von Ergebnissen auf mehre-ren getrennten Seiten anzeigt, und wie die Zurück- und Vorwärts-Funktionalität zurNavigation zwischen diesen Seiten eingesetzt wird.

Dieses Buch hat acht Anhänge:

Anhang A, Installation unter LinuxEine Anleitung zur Installation von Apache, PHP und MySQL auf Linux-Plattfor-men. Da sich die Installationsanweisungen mit der Software ändern, können Sie diejeweils neueste Version dieses Anhangs unter http://www.webdatabasebook.com/install-guides herunterladen.

Anhang B, Installation unter Microsoft WindowsEine Anleitung zur Installation von Apache, PHP und MySQL auf Microsoft Windows-Plattformen. Da sich die Installationsanweisungen mit der Software ändern, können Siedie jeweils neueste Version dieses Anhangs unter http://www.webdatabasebook.com/install-guides herunterladen.

Anhang C, Installation unter Mac OS XEine Anleitung zur Installation von Apache, PHP und MySQL auf Mac OS X-Plattfor-men. Da sich die Installationsanweisungen mit der Software ändern, können Sie diejeweils neueste Version dieses Anhangs unter http://www.webdatabasebook.com/install-guides herunterladen.

Anhang D, WebprotokolleBeschreibt die Arbeitsweise des Webs und erklärt, wie das HTTP-Protokoll Datenzwischen Browsern und Servern überträgt.

Anhang E, Modellierung und Entwurf von relationalen Datenbanken Enthält eine Fallstudie, in der die Systemanforderungen der Weinhandlung mithilfe derEntity-Relationship-Datenbank-Modellierung implementiert werden. Es wird gezeigt,wie sich dieses Modell in einen Entwurf überführen lässt. Außerdem werden die SQL-Anweisungen aufgeführt, mit denen die Datenbank für die Weinhandlung erstellt wird.

Anhang F, Session-Management in der Datenbank-SchichtDieser Anhang baut auf Kapitel 10 auf und zeigt, wie die PHP-Standardmethodezum Session-Handling (die Festplattendateien verwendet) auf eine Datenbank über-tragen werden kann.

Anhang G, QuellenEine Liste nützlicher Quellen, darunter Websites und Bücher, die die Themen diesesBuchs vertiefen.

Anhang H, Die verbesserte MySQL-BibliothekEine Einführung in die neue, verbesserte MySQL-Bibliothek von PHP, die zeigt, wiedie neuen Features von MySQL 4.1 benutzt werden.

Page 16: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

XVI | Vorwort

Links

Max.Linie

Max.Linie

Wie man dieses Buch benutztDieses Buch ist als lehrbuchartige Einführung in Webdatenbank-Anwendungen konzi-piert. Für den Anfang sollten Sie Kapitel 1 lesen, um einen Überblick über die in diesemBuch verwendete Architektur und die benutzten Tools zu bekommen.

Wenn Sie den Apache-Webserver, die PHP-Skript-Engine oder das Datenbank-Manage-mentsystem MySQL noch nicht installiert haben (oder unsicher sind, ob Ihre Softwarenoch aktuell ist), dann sollten Sie je nachdem, welches Betriebssystem Sie verwenden, dieInstallationsanleitungen aus Anhang A, Anhang B oder Anhang C befolgen. Darin erfah-ren Sie auch, wie Sie die Beispiele aus diesem Buch herunterladen und auf Ihrem Compu-ter installieren können. Wir empfehlen Ihnen, den Code und die Datenbanken herunter-zuladen, da Ihnen das beim Verstehen der einzelnen Themen helfen wird.

Kapitel 2 und Kapitel 5 sind Einführungen in PHP und SQL. Um die wichtigsten Werk-zeuge dieser Sprachen zu verstehen, sollten Sie beide Kapitel lesen, bevor Sie zu Kapitel 6und den nachfolgenden Kapiteln kommen. Kapitel 3 und Kapitel 4 steigen tiefer in PHPein und sind nach Themen aufgebaut. Sie können sie als Tutorials oder als Referenz zuden Funktionen und anderen Konzepten lesen.

Die Kapitel 6 bis 13 sind Kapitel, die im Stil eines Lehrbuchs Prinzipien und Praxis derWebdatenbank-Anwendungen behandeln und kommentierte Funktionsreferenzen sowiekurze Fallstudien zur Veranschaulichung der jeweiligen Themen beisteuern. Die Kapitel 6bis 11 beschreiben die Grundprinzipien und -komponenten und sollten der Reihe nachgelesen werden. Danach sind Sie bereit, eigene Anwendungen zu erstellen. Wenn SieMySQL 4.1 verwenden, sollten Sie nach Kapitel 6 den Anhang H lesen, um Genaueresüber die neue, verbesserte MySQL-Funktionsbibliothek von PHP zu erfahren.

Kapitel 12 ist eine Einführung in die Erstellung individueller Fehlerbehandler, die beimDebuggen helfen und die Anwendung im Einsatz stabiler machen. Kapitel 13 konzent-riert sich auf die Entwicklung von ausgabefähigen Berichten im PDF-Format von Adobe.Wenn Sie Kapitel 13 gelesen haben, sollten Sie die Prinzipien der Entwicklung von Web-datenbank-Anwendungen meisterhaft beherrschen.

Kapitel 14 und Kapitel 15 drehen sich um fortgeschrittene Themen. Sie bauen auf denGrundlagen früherer Kapitel auf und versetzen Sie vollends in die Lage, ausgefeilteAnwendungen mit fortgeschrittenen Programmier- und Datenbank-Techniken zu erstel-len. Diese optionalen Kapitel können Sie sich für später aufheben, wenn Sie sich für dieFeinheiten der Webentwicklung interessieren. Sie müssen diese Kapitel nicht unbedingtgelesen haben, um unsere Beispiel-Anwendung aus den Kapiteln 16 bis 20 zu verstehen.

Die Kapitel 16 bis 20 enthalten die vollständigen Skripten für die Fallstudie der Online-Weinhandlung, einschließlich kurzer Erklärungen. Die Skripten zeigen, wie die Techni-ken von Kapitel 2 bis Kapitel 12 in der Praxis eingesetzt werden, und sind somit eine her-vorragende Übung, um den Inhalt der vorherigen Kapitel zu beherrschen. Das Materialaus diesen letzten Kapiteln ist am nützlichsten, wenn Sie die Beispielanwendungen herun-tergeladen und auf einem lokalen Server installiert haben, da Sie die Skripten dann beglei-tend zu der Lektüre des Buches modifizieren und testen können.

Page 17: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

Vorwort | XVII

Rechts

Max.Linie

Max.Linie

Anhang D und Anhang E sind ebenfalls im Stil eines Lehrbuchs geschrieben. Wir emp-fehlen Anhang D, wenn Sie sich für die Webumgebung und ihre Protokolle interessierenoder auf diesem Gebiet noch Wissenslücken haben. Anhang E ist eine kurze Einführungin Entity-Relationship-Modelle für Datenbanken und zeigt, welchen Weg wir beim Ent-wurf der Datenbank für die Weinhandlung gegangen sind. Anhang E sollten Sie erst nachKapitel 5 lesen.

SchriftkonventionenFür dieses Buch gelten folgende Konventionen:

Kursivfür Programmnamen, URLs und Datenbank-Einträge oder bei der Einführung neuerBegriffe

Nichtproportionalschriftfür Codebeispiele, Funktionen, Anweisungen, Attribute und Befehlsausgaben

Nichtproportionalschrift kursivfür Variablen in Befehlen und Funktionen

Nichtproportionalschrift fettfür Hervorhebungen im Programmcode

Eine Anmerkung mit diesem Icon ist ein wichtiger Hinweis zum aktuellenTextabschnitt.

.

An diesem Icon erkennen Sie eine Warnung, die sich auf den aktuellenTextabschnitt bezieht.

Verwendung der CodebeispieleAller Code aus diesem Buch steht auf der Website http://www.oreilly.com/catalog/webdbapps2 zum Herunterladen bereit. Installationsanleitungen finden Sie in der Dateireadme.txt des Downloads.

Dieses Buch soll Ihnen bei der Arbeit helfen. Den Code, den wir hier zeigen, dürfen Siegenerell in Ihren Programmen und Dokumentationen verwenden. Sie brauchen uns nichtum Genehmigung zu bitten, sofern Sie nicht große Teile des Codes reproduzieren. WennSie zum Beispiel ein Programm schreiben, das mehrere Codestücke aus diesem Buch wie-derverwendet, brauchen Sie uns nicht um Erlaubnis zu fragen, doch wenn Sie eine CD-ROM mit Codebeispielen aus O’Reilly-Büchern verkaufen oder verteilen wollen, müssenSie sehr wohl eine Erlaubnis einholen. Eine Frage mit einem Zitat aus diesem Buch undseinen Codebeispielen zu beantworten erfordert keine Erlaubnis, aber es ist nicht so ohneweiteres gestattet, große Teile unseres Texts oder Codes in eine eigene Produktdokumen-tation aufzunehmen.

Page 18: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

XVIII | Vorwort

Links

Max.Linie

Max.Linie

Wir freuen uns über eine Quellenangabe, verlangen sie aber nicht unbedingt. Zu einerQuellenangabe gehören normalerweise der Titel, der Autor, der Verlag und die ISBN-Nummer, zum Beispiel: »Hugh E. Williams und David Lane: Webdatenbank-Applikatio-nen mit PHP und MySQL, 2. Auflage, O’Reilly: 2005, ISBN 3-89721-387-7«.

Wenn Sie das Gefühl haben, dass Ihr Einsatz unserer Codebeispiele über die Grenzen desErlaubten hinausgeht, schreiben Sie uns bitte eine E-Mail an [email protected].

Website und Codebeispiele zu diesem BuchDie Codebeispiele zum Herunterladen, die Daten zur Erstellung der Datenbank derOnline-Weinhandlung und die vollständige Anwendung finden Sie auf der Website derAutoren zu diesem Buch unter:

http://www.webdatabasebook.com

Auf der amerikanischen und der deutschen Website zu diesem Buch finden Sie Errata,Links zu den Beispielen und Zusatzinformationen:

http://www.oreilly.com/catalog/webdbapps2/http://www.oreilly.de/catalog/webdbapps2ger/

Die Autoren erreichen Sie unter:

[email protected]@inquirion.com

DanksagungenWir danken unseren technischen Gutachtern, Donal Ellis, Kimberlee Jensen, Caryn-AmyKing, S.M.M. (Saied) Tahaghoghi und Harry Williams für die Zeit, Geduld und Sorgfalt,die sie in die Verbesserung dieses Buchs investiert haben. Außerdem danken wir unseremLektor Andy Oram. Das meiste, was an dieser zweiten Auflage neu und frisch ist, ist nurdeswegen da, weil Andy uns drängte, half und ermutigte, das bestmögliche Manuskriptabzuliefern. Danke Andy, es hat Spaß gemacht!

Hugh dankt Selina und Lucy. Selina, danke, dass Du immer so geduldig bist, wenn ichschreibe und schreibe. Lucy, Du bist nicht ganz so geduldig, aber dafür bist Du zauber-haft. Und meinen Eltern danke ich dafür, dass sie all das möglich gemacht haben: mei-nem Vater dafür, dass er Dick Smith 2650 baute und meiner Mutter, dass sie mich ermu-tigte, vor ihm und seinen Nachfolgern sitzen zu bleiben!

Dave dankt Louise, Beth und Will dafür, dass sie es auch während dieses Projekts mitihm ausgehalten haben. Lou, ich kann Dir gar nicht genug für Deine Freundlichkeit,Ermutigung und Unterstützung danken. Beth, danke, dass Du die Probeausdrucke soschön recycelt und mein Büro mit Deinen Bildern geschmückt hast. Will danke ich dafür,dass er das Schnabeltier gefunden hat.

Wir danken unserem Arbeitgeber, der RMIT University. Hugh dankt der School of Com-puter Science and Information Technology, und Dave dankt InQuirion Pty. Ltd.

Page 19: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

| 1

First

Max.Linie

Max.Linie

Kapitel 1 KAPITEL 1

Datenbank-Anwendungenund das Web

Die meisten Dienste, die wir im Web nutzen, werden von Webdatenbank-Anwendungenbereitgestellt. Web-basierte E-Mail, Online-Shops, Foren und Bulletin Boards, Firmen-websites, Sport- und News-Portale, sie alle werden von Datenbanken gesteuert. Wenn Sieeine moderne Website aufbauen möchten, müssen Sie wissen, wie man eine Datenbank-Anwendung erstellt.

Dieses Buch zeigt einen sehr populären, preiswerten Weg, um das Web und Datenban-ken zu einer Anwendung zusammenzuführen. Das beliebteste Datenbank-Management-system für solche Lösungen ist MySQL, ein schnelles, bedienungsfreundliches System,das von seinem Hersteller MySQL AB unter einer Open Source-Lizenz herausgegebenwird. MySQL wird in diesem Buch eingehend beschrieben.

Mit einem Webserver wie Apache (wir setzen in diesem Buch Apache als gegeben voraus,doch die beschriebenen Programme funktionieren ebenso gut mit anderen Webservern)und MySQL haben Sie bereits fast alles, was Sie zur Entwicklung einer Webdatenbank-Anwendung benötigen. Um beides zu integrieren, ist jetzt nur noch ein Kommunikations-weg zwischen den beiden erforderlich. Mit anderen Worten: Die Datenbank-Operatio-nen müssen in Webseiten eingebunden werden. Und für diese Aufgabe ist PHP dasbeliebteste Mittel.

PHP ist ein Open Source-Projekt der Apache Software Foundation und das verbreitetsteAdd-on-Modul für den Apache-Webserver: Rund 53% der Apache-HTTP-Server habenPHP-Fähigkeiten.1 PHP eignet sich besonders für Webdatenbank-Anwendungen, weil esso gute Tools für die Integration der Web- und der Datenbank-Umgebung besitzt. Vorallem die Flexibilität, Skripten in HTML-Seiten einzubetten, macht die Integration vonHTML-Präsentation und Code zu einem Kinderspiel. Darüber hinaus wird auch dieDatenbank-Schicht vorbildlich unterstützt: Es gibt mehr als 15 Bibliotheken für die Inter-aktion mit fast allen gebräuchlichen Datenbank-Servern. In diesem Buch geben wir Ihnen

1 Quelle: Webserver-Untersuchung durch Security Space, Apache Module Report, http://www.securityspace.com/s_survey/data/index.html (1. Dezember 2003).

Page 20: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

2 | Kapitel 1: Datenbank-Anwendungen und das Web

Links

Max.Linie

Max.Linie

einen umfassenden Einblick in PHP und zeigen Ihnen zusätzlich eine Reihe von mächti-gen Erweiterungen, die durch ein Paket namens PEAR zur Verfügung gestellt werden.

Apache, MySQL und PHP können auf einer breiten Palette von Betriebssystemen laufen.In diesem Buch zeigen wir die Verwendung unter Linux, Mac OS X und Microsoft Win-dows.

Dieses Buch ist eine Einführung, vermittelt aber dennoch das umfangreiche Wissen, dasSie benötigen, um Anwendungen richtig zu entwickeln. Dazu gehören wichtige Dinge wiedas Prüfen der Benutzereingabe, eine solide Fehlerbehandlung und das Sperren vonDatenbank-Operationen zur Verhinderung von Inkonsistenzen. Doch am wichtigsten ist,dass wir auch die Prinzipien erklären, auf denen gute Webdatenbank-Anwendungen auf-bauen. Am Ende dieses Buchs werden Sie nicht nur technisch dazugelernt haben, sondernauch die Strategien kennen, die eine Anwendung sicher, zuverlässig, wartungsfreundlichund erweiterungsfähig machen.

Das WebBeim Surfen im Web fordern Sie mit dem Webbrowser von einem Webserver Ressourcenan, die dieser dann als Antwort an Sie zurückgibt. Sie fordern Seiten an, indem Sie bei-spielsweise Formulare ausfüllen und abschicken, auf Links klicken oder URLs in IhrenBrowser eingeben. Oft sind diese Ressourcen statische HTML-Seiten, die im Browserangezeigt werden. Abbildung 1-1 zeigt, wie ein Webbrowser mit einem Webserver kom-muniziert, um die Homepage zu diesem Buch anzufordern. Dies ist ein Beispiel für dieklassische zweischichtige oder Client-Server-Architektur des Internet.

Ein Webserver ist keine großartige Speicher-Software. Komplizierte Operationen mitDaten wie auf kommerziellen Websites und anderen Sites, die massenhaft dynamischeDaten präsentieren, sollten von einer separaten Datenbank gestützt werden. Dadurchentsteht jedoch eine komplexere, dreischichtige Architektur: Der Browser ist die Client-Schicht, der Webserver wird zur mittleren Schicht, und die Datenbank bildet jetzt einedritte Schicht: eben die Datenbank-Schicht. Abbildung 1-2 zeigt, wie ein Webbrowser

Abbildung 1-1: Zweischichtige Architektur: Ein Webbrowser fragt an und ein Webserver antwortet.

Page 21: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Dreischichtige Architekturen | 3

Rechts

Max.Linie

Max.Linie

eine Ressource anfordert, die von einer Datenbank generiert wird, und wie die Daten-bank und der Webserver den Request beantworten.

Dreischichtige ArchitekturenDieses Buch zeigt den Aufbau von Webdatenbank-Anwendungen mit der inAbbildung 1-3 dargestellten dreischichtigen Architektur. Die Grundlage der Anwendungist die Datenbank-Schicht, die aus dem Datenbank-Managementsystem (DBMS) besteht.

Abbildung 1-2: Dreischichtige Architektur: Ein Webbrowser fragt nach einer Ressource, und eine Datenbank generiert die Antwort.

Abbildung 1-3: Das dreischichtige Architekturmodell einer Webdatenbank-Anwendung

Page 22: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

4 | Kapitel 1: Datenbank-Anwendungen und das Web

Links

Max.Linie

Max.Linie

Es verwaltet die Daten, die Benutzer anlegen, löschen, ändern und abfragen. Auf derDatenbank-Schicht setzt die mittlere Schicht auf. Sie enthält die von Ihnen entwickelteAnwendungslogik und regelt die Datenkommunikation zwischen den anderen Schichten.Am oberen Ende des Modells befindet sich die Client-Schicht, in der Regel ein Webbrow-ser, der mit der Anwendung interagiert.

Diese dreischichtige Architektur ist nur ein Modell. In der Praxis gibt es unterschiedlicheImplementierungen von Webdatenbank-Anwendungen, die in dieses Architekturschemapassen. Bei der gebräuchlichsten Implementierung sind der Webserver (einschließlich derSkript-Engine, die die Skripten verarbeitet und ihre Aktionen ausführt) und das Daten-bank-Managementsystem auf demselben Computer installiert: So ist das System am ein-fachsten zu managen und zu sichern. Daher werden wir diesen Ansatz auch in unseremBuch verfolgen. Wenn Sie dieses System auf moderner Hardware implementieren, kön-nen Ihre Anwendungen Zehntausende von Requests pro Stunde verarbeiten.

Bei populären Websites ist es üblich, den Webserver und den Datenbank-Server auf ver-schiedenen Computern anzusiedeln. Durch diese dedizierte Ressourcenzuweisung wirddie Anwendung schneller und skalierbarer. Richtige High-End-Anwendungen benutzengelegentlich gar einen Cluster von Computern mit Replikationen des Datenbank- und desWebservers und Lastverteilung über mehrere Rechner. Wir hingegen legen den Schwer-punkt auf einfachere Implementierungen; die Themen Replikation und Lastverteilungwürden den Rahmen dieses Buchs sprengen.

Wenn wir Webdatenbank-Anwendungen als dreischichtige Architekturen beschreiben,klingt das so, als seien sie formal strukturiert und organisiert. In Wirklichkeit jedochmüssen die Anwendungen verschiedene Protokolle und Programme zusammenbringenund die Software muss installiert, konfiguriert und gesichert werden. Die Ausführungenin diesem Buch drehen sich mehrheitlich um die mittlere Schicht und die Anwendungslo-gik, die den Webbrowsern die Kommunikation mit Datenbanken überhaupt erst ermög-licht.

HTTP – Das Hypertext Transfer ProtocolDer dreischichtige Aufbau bildet ein konzeptionelles Grundgerüst für datenbankbasierteWebanwendungen. Das Web selbst stellt die Netzwerk- und Protokollsysteme zur Verfü-gung, die für die Verbindung von Client-Schicht und mittlerer Schicht, d.h. für die Ver-bindung von Webbrowser und Webserver, notwendig sind. HTTP ist eine Komponente,die den dreischichtigen Aufbau zusammenhält.

Mit HTTP werden Ressourcen im Web übertragen oder gemeinsam genutzt. Die meistenWebserver und Webbrowser verwenden die aktuelle Version, HTTP/1.1. Für das Ver-ständnis des in diesem Buch behandelten Stoffes wird kein Detailwissen über HTTPbenötigt, aber es ist wichtig, die Probleme zu verstehen, denen HTTP-basierte Weban-wendungen gegenüberstehen. (Eine längere Einführung in die zugrunde liegenden Web-protokolle und weitere Beispiele für HTTP-Requests und -Responses finden Sie inAnhang D.)

Page 23: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Dreischichtige Architekturen | 5

Rechts

Max.Linie

Max.Linie

Ein Beispiel

Das Prinzip von HTTP ist einfach: Der Webbrowser eines Clients schickt einem Servereinen Request (eine Anforderung) nach einem Objekt, und der Webbrowser schickt eineResponse (eine Antwort) zurück. Für jeden Request gibt es eine Response. Im Datenteilder HTTP-Response wird das Objekt – das HTML-Dokument, das Bild oder die Ausgabeeines Programms – zurück zum Webbrowser übertragen.

Ein HTTP-Request besteht aus der Beschreibung einer Ressource in Textform undzusätzlichen Header-Daten, die beschreiben, wie die Ressource zurückgeliefert werdensoll. Betrachten Sie ein Beispiel für einen Request:

GET /~hugh/index.html HTTP/1.1Host: goanna.cs.rmit.edu.auFrom: [email protected] (Hugh Williams)User-agent: Hugh-fake-browser/version-1.0Accept: text/plain, text/html

Dieses Beispiel benutzt die Methode GET, um die HTML-Seite /~hugh/index.html vom Ser-ver goanna.cs.rmit.edu.au mit HTTP/1.1 abzurufen. Vier zusätzliche Header-Zeilen spezi-fizieren den Host, den Benutzer und den Webbrowser und legen fest, welche Datentypender Browser akzeptieren kann. Ein Request wird normalerweise von einem Webbrowsergeschickt und kann auch noch weitere Header enthalten.

Eine HTTP-Response besteht aus einem Antwortcode mit Nachricht, zusätzlichen Hea-der-Zeilen und im Regelfall der angeforderten Ressource. Ein Ausschnitt der Responseauf den Beispiel-Request /~hugh/index.html sähe so aus:

HTTP/1.1 200 OKDate: Thu, 04 Dec 2003 04:30:02 GMTServer: Apache/1.3.27 (Unix)Last-Modified: Fri, 21 Nov 2003 22:26:07 GMTETag: "a87da0-2128-3fbe90ff"Accept-Ranges: bytesContent-Length: 8488Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>...

Die erste Zeile teilt dem Browser mit, dass die Response HTTP/1.1 verwendet, und bestä-tigt den Erfolg des Requests mit dem Antwortcode 200 und der Nachricht OK. Im Beispielgibt es zusätzlich sieben Header-Zeilen mit Datum und Uhrzeit, der Angabe der Webser-ver-Software, dem letzten Änderungsdatum der Seite, einem Entity-Tag (ETag) für dasCaching, einer Anweisung an den Browser, wie er einen Teil des Dokuments abrufenkann, der Länge der Response und einem Inhaltstyp. Nach einer Leerzeile folgt dann dieeigentliche Ressource, von der wir hier nur die ersten paar Zeilen zeigen. Die Ressourcedes Beispiels ist das angeforderte HTML-Dokument /~hugh/index.html.

Page 24: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

6 | Kapitel 1: Datenbank-Anwendungen und das Web

Links

Max.Linie

Max.Linie

ZustandHerkömmliche Datenbank-Anwendungen sind zustandsbehaftet. Die Benutzer loggensich ein, führen zusammenhängende Transaktionen aus und loggen sich wieder aus. ImFall einer Bankanwendung würde sich ein Bankangestellter einloggen, die Anwendungüber eine Reihe von Menüs benutzen (d.h., die Kunden bedienen) und sich nach getanerArbeit wieder ausloggen. Die Bankanwendung ist zustandsabhängig: Erst wenn er einge-loggt ist, kann der Banker die Anwendung dialogartig über strukturierte Menüs bedienen.Nach dem Ausloggen kann er die Anwendung nicht mehr verwenden.

HTTP ist zustandslos. Jede Interaktion zwischen einem Webbrowser und einem Webser-ver ist von jeder anderen Interaktion unabhängig. Jeder HTTP-Request eines Webbrow-sers enthält dieselben Header-Informationen, die Sicherheitszertifikate des Benutzers, dievom Browser akzeptierten Seitentypen sowie Formatierungsanweisungen. Der Server ver-arbeitet die Header, formuliert eine Antwort, die berichtet, wie der Request bedientwurde, und gibt die Header und eine Ressource an den Browser zurück. Sobald dieResponse abgeschlossen ist, vergisst der Server den Request wieder. Es gibt keine Mög-lichkeit, zurückzukehren und den Request oder die Response wieder aufzurufen.

Diese Zustandslosigkeit hat ihre Vorteile, insbesondere die Ressourcenersparnis (derWebserver muss keine Benutzerinformationen speichern, die er für deren Wiedererken-nung benötigt) und die verbesserte Flexibilität (Benutzer können sich willkürlich vonSeite zu Seite oder von Objekt zu Objekt bewegen). Da jedoch HTTP zustandslos ist, istes schwer, datenbankbasierte Webanwendungen zu schreiben, die den Zustand beach-ten: Man kann einen Benutzer schwerlich zwingen, Menüs oder eine Reihe von Schrittendurchzuspielen, um eine Arbeit zu erledigen.

Um HTTP mit einem Zustand zu verbinden, benötigen Sie eine Methode, um ihm Daten-flüsse und eine Struktur aufzuzwingen. Eine gebräuchliche Lösung besteht darin, zwi-schen dem Webbrowser und dem Webserver ein Erkennungszeichen oder einen Schlüs-sel auszutauschen, der den Benutzer und seine Session eindeutig identifiziert. Sobald einBenutzer ein Objekt anfordert, präsentiert er sein Erkennungszeichen; der Webserverbringt das Zeichen ebenso in jeder Response unter. Die Software in der mittleren Schichtbenutzt dieses Zeichen, um Benutzerinformationen aus dem letzten Request wiederher-zustellen, so zum Beispiel, welchen Menüpunkt der Benutzer das letzte Mal gewählt hat.

Der Austausch von Erkennungszeichen ermöglicht es, zustandsbehaftete Strukturen wieMenüs, mehrstufige Vorgänge oder Workflows in der Anwendung einzusetzen. Außer-dem können sie verhindern, dass Aktionen doppelt ausgeführt werden; sie können inak-tive Sessions per Timeout beenden und ermöglichen eine Zugriffskontrolle für dieAnwendung.

Dickere Clients im dreischichtigen ModellWenn eine Webdatenbank-Anwendung mit dreischichtiger Architektur so wenig zuHTTP passt, warum verwendet man dann dieses Modell überhaupt? Das liegt hauptsäch-

Page 25: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Dreischichtige Architekturen | 7

Rechts

Max.Linie

Max.Linie

lich an der Popularität und Standardisierung von Webbrowsern: Jeder, der einen Web-browser hat, kann die Webdatenbank-Anwendung benutzen, und dies in der Regel ohneEinschränkung. So kann eine Anwendung beliebig vielen, weit verstreuten Benutzernaller möglichen Betriebssysteme oder Browser zugänglich gemacht werden. Dieser Vorteilist so groß, dass wir uns in diesem Buch vollständig auf diejenigen dreischichtigen Lösun-gen konzentrieren, in denen ein Webbrowser die Client-Schicht bildet.

Webbrowser sind Thin Clients, weil in der Client-Schicht fast keine Anwendungslogikuntergebracht ist. Der Browser sendet einfach nur HTTP-Requests und zeigt dann dieangeforderten Ressourcen an, zumeist HTML-Seiten. Bei einem solchen Thin Clientmuss die Client-Schicht nicht erstellt, installiert oder konfiguriert werden; fast diegesamte Anwendung befindet sich in der mittleren Schicht.

Sie können die Client-Schicht aber auch »dicker« machen, also mehr Arbeit auf denBrowser verlagern. Mit gebräuchlichen Technologien wie Java, JavaScript und Macrome-dia Flash können Sie Anwendungskomponenten entwickeln, die Daten unabhängig vomWebserver verarbeiten oder eine Vorverarbeitung der Daten leisten, ehe diese an den Ser-ver geschickt werden.

JavaScript ist für viele Aufgaben ganz besonders gut geeignet, da es leicht zu benutzen,Open Source und in alle populären Browser bereits eingebaut ist (wo es allerdings vomBenutzer auch ausgeschaltet werden kann). Oft wird JavaScript verwendet, um Formular-Eingabedaten vor der Übermittlung an den Server zu validieren, um die Teile einer Seitehervorzuheben, über die die Maus fährt, um Menüs anzuzeigen oder um andere einfacheAufgaben zu erledigen. Es hat allerdings nur begrenzte Speichermöglichkeiten für Datenund kann nicht mit einem Datenbank-Server kommunizieren. Sie sollten also JavaScriptnicht für wichtige Aufgaben, wohl aber für die Vorverarbeitung einsetzen. In Kapitel 7werden wir auf diese wichtige Technologie genauer eingehen.

Die mittlere SchichtDie mittlere Schicht spielt in Webdatenbank-Anwendungen gleich mehrere Rollen. Sievermittelt zwischen den anderen beiden Schichten, steuert die Struktur und den Inhaltder Daten, die dem Benutzer angezeigt werden, sorgt für Sicherheit und Authentifizierungund fügt der Anwendung einen Zustand hinzu. Sie ist die Schicht, die das Web in denDatenbank-Server integriert.

Webserver

Im Wesentlichen lassen sich die Requests, die ein Webserver erhält, in zwei Gruppenunterteilen: Die einen fordern eine Datei – oft eine statische HTML-Webseite oder einBild – an, die anderen erwirken die Ausführung eines Programms oder Skripts, dessenAusgabe zurückgeliefert wird. Ein einfaches Beispiel haben Sie weiter oben in diesemKapitel bereits gesehen, und einfache Datei-Requests werden in Anhang D genauerbeschrieben. Wenn ein HTTP-Request ein PHP-Skript anfordert, muss der Server diePHP-Script-Engine von Zend ausführen, die Anweisungen des Skripts ausführen (dazu

Page 26: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

8 | Kapitel 1: Datenbank-Anwendungen und das Web

Links

Max.Linie

Max.Linie

kann auch der Zugriff auf eine Datenbank gehören) und die Skript-Ausgabe an den Brow-ser zurückschicken, so dass sie als einfaches HTML angezeigt werden kann.

Apache ist ein schneller, skalierbarer Open Source-Webserver. Er kann mit gleichzeitigenBrowser-Requests umgehen und ist für Multitasking-Betriebssysteme wie Linux, MacOS X und Microsoft Windows ausgelegt. Dabei belegt er nur wenige Ressourcen, kannwirkungsvoll unterschiedliche Request-Belastungen abfedern und läuft auch auf beschei-dener Hardware noch schnell. Er wird viel genutzt und ist umfangreich getestet. Gegen-wärtig ist der aktuelle Release die Version 2.0.48.

Apache hat kein kompliziertes Konzept. Auf Unix führt der Webserver in Wirklichkeitmehrere Programme aus; eines davon koordiniert die anderen und bedient selbst keineRequests. Die anderen Server-Programme teilen dem koordinierenden Server mit, wieweit sie für die Verarbeitung von Requests zur Verfügung stehen. Sind für die eintreffen-den Requests nicht genügend Server da, kann der koordinierende Server neue starten;sind zu viele frei, kann er die überflüssigen anhalten, um Ressourcen freizugeben.

In der Konfigurationsdatei von Apache ist festgelegt, wie der Server am Netzwerk lauschtund Requests bedient. Der Server-Administrator steuert das Verhalten von Apache durchmehr als 150 Anweisungen, die sich auf die Ressourcenbelegung, Antwortzeiten, Flexibi-lität der Lastverteilung, Sicherheit, Verarbeitung und Protokollierung von HTTP-Requests, Verwendung von Script-Engines zur Ausführung von Skripten und viele andereAspekte seiner Arbeit auswirken.

Die Konfiguration von Apache ist für die meisten Webdatenbank-Anwendungen ganzeinfach. Die Installation von Apache wird in den Anhängen A bis C erklärt. Kapitel 6erläutert, wie Sie Dateien verbergen können, die nicht an den Browser gelangen sollen,und Kapitel 11 stellt sichere Webserver vor. Das HTTP-Protokoll und seine Implementie-rung sind in Anhang D beschrieben. Weitere Einzelheiten zur Apache-Konfiguration fin-den Sie in den Quellen in Anhang G.

Web-Skripting mit PHPPHP ist die am besten unterstützte und verbreitetste Skriptsprache für das Web und einexzellentes Hilfsmittel für die Erstellung von Webdatenbank-Anwendungen. Das heißtnicht, dass nicht auch andere Skriptsprachen tolle Features hätten. Doch es gibt vieleGründe, die für PHP sprechen:

Open SourceDie Bemühungen der Community, PHP zu pflegen und zu verbessern, werden nichtvon kommerziellen Interessen beeinträchtigt.

Flexibilität für die Integration in HTMLDadurch, dass sich PHP-Skripten in statische HTML-Dateien einbetten lassen, wirddie Integration der Client-Schicht einfach. Ein Nachteil ist, dass dadurch die Tren-nung zwischen Skript und Präsentation verwischt werden kann, doch diese Problemewerden durch die Template-Techniken aus Kapitel 7 weitgehend gelöst.

Page 27: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Dreischichtige Architekturen | 9

Rechts

Max.Linie

Max.Linie

Eignung für komplexe ProjektePHP ist eine voll ausgereifte, objektorientierte Programmiersprache mit mehr als 110Funktionsbibliotheken für so unterschiedliche Zwecke wie Mathematik, Sortieren,Erstellung von PDF-Dokumenten und E-Mail-Versand. Mehr als 15 Bibliotheken ste-hen für einen nativen, schnellen Zugriff auf die Datenbank-Schicht zur Verfügung.

Schnelle SkriptausführungMit der eingebauten Skript-Engine von Zend lassen sich PHP-Skripten schnell aus-führen, und alle Komponenten laufen im Hauptspeicher von PHP (anders als beianderen Scripting-Frameworks, bei denen die Komponenten in getrennten Modulenvorliegen). Unsere Tests haben gezeigt, dass PHP zumindest bei Aufgaben vonbeschränkter Komplexität schneller als andere populäre Skript-Tools läuft.

Unabhängigkeit von Plattform und BetriebssystemApache und PHP laufen auf vielen verschiedenen Plattformen und Betriebssystemen.PHP lässt sich auch in andere Webserver integrieren.

Anstrengungen der CommunityPHP enthält auch PEAR, ein Archiv von mehr als 100 frei verfügbaren Quellcode-Paketen für häufige PHP-Programmieraufgaben.

Zu dem Zeitpunkt, als dies geschrieben wurde, war PHP 4 (Version 4.3.3) die aktuelleVersion und PHP 5 in der Betatest-Phase (Version 5.0.0b2). Die Skripten in diesem Buchwurden mit PHP 4 entwickelt und getestet. Bei den Tests mit PHP 5 fielen einigeBeschränkungen auf. Dieses Buch beschreibt beide PHP-Versionen, insbesondere auchdie neuen objektorientierten Features von PHP 5 in Kapitel 14. Wenn ein Feature nur inPHP 5 zur Verfügung steht, wird das im Text gesagt. Wenn ein PHP 4-Skript oder -Fea-ture mit PHP 5 nicht funktioniert, erklären wir den Grund und wagen eine Voraussage,wie dies zukünftig wohl behoben wird. Alle Skripten, die mit PHP 4 laufen, werdenhöchstwahrscheinlich in Zukunft auch unter PHP 5 laufen.

PHP ist eines der Hauptthemen dieses Buchs. Es wird in den Kapiteln 3 bis 5 eingeführt,wo auch die meisten Features der Kernsprache beschrieben werden. PHP-Bibliotheken,die für die Entwicklung von Webdatenbank-Anwendungen wichtig sind, werden in denKapiteln 6 und 8 bis 13 besprochen. Das PEAR-Archiv von PHP-Paketen ist Thema vonKapitel 7. Eine PHP-Beispielanwendung wird in den Kapiteln 16 bis 20 gezeigt. DieAnhänge A bis C zeigen die Installation von PHP. Andere Hinweise auf Webressourcen,Bücher und kommerzielle Produkte zu PHP finden Sie in Anhang G.

Eine technische Beschreibung der neuen Features von PHP 5 folgt im nächsten Abschnitt.Wenn Sie PHP 4 noch nicht kennen, sollten Sie gleich zum darauf folgenden Abschnittspringen.

PHP 5 wird eingeführt

PHP 4 enthielt den ersten Release der Zend-Engine in der Version 1.0. Diese PHP-Skript-Engine implementiert die Syntax der Programmiersprache und alle Hilfsmittel zum Aus-führen von Bibliotheksfunktionen. PHP 5 umfasst die neue Version 2.0 der Zend-Engine,

Page 28: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

10 | Kapitel 1: Datenbank-Anwendungen und das Web

Links

Max.Linie

Max.Linie

die so weit verbessert wurde, dass sie die Beschränkungen der Version 1.0 überwindetund neue, für Entwickler wichtige Features enthält. Was jedoch PHP betrifft, beziehensich die Änderungen zwischen PHP 4 und PHP 5 (anders als beim Übergang von PHP 3zu PHP 4) nur auf einen Teil der Sprache. Die meisten für PHP 4 geschriebenen Pro-gramme werden unverändert auch unter PHP 5 laufen.

Im Folgenden listen wir die neuen Features in PHP 5 kurz auf. Viele von ihnen werden ananderen Stellen dieses Buchs genauer erklärt:

Neues ObjektmodellDie Objektorientierte Programmierung (OOP) und die OOP-Features von PHP 5werden in Kapitel 14 detailliert dargestellt. Dem einfacheren Objektmodell von PHP4 fehlten viele Features, auf die objektorientierte Programmierer heute Wert legen:Destruktoren, private und geschützte Member-Funktionen und Variablen, statischeMember-Funktionen und Variablen, Interfaces und Klassentypen-Hinweise. Allediese Features stehen jetzt in PHP 5 zur Verfügung.

Das OOP-Modell von PHP 5 managt auch die Übergabe von Objekten zwischenFunktionen und Klassen besser als zuvor: Jetzt werden statt der Objekte selbst nurnoch Objekt-Handles übergeben. Das trägt zu einer massiven Leistungssteigerungvon PHP bei.

InternationalisierungNun werden auch nicht-westliche Zeichensätze und Unicode unterstützt. Genaueresfinden Sie in Kapitel 3.

Exception-HandlingNeue try...catch- und throw-Anweisungen sorgen für bessere Stabilität der Anwen-dungen, wenn sich Fehler einschleichen. Diese Fehlerbehandlung wird in Kapitel 4noch thematisiert. Außerdem gibt es ein verbessertes Backtrace-Feature zur Entwick-lung einer benutzerdefinierten Fehlerbehandlung, die zeigt, wie der Code, der denFehler verursachte, aufgerufen wurde. Dieses Feature wurde nachträglich auch inPHP 4 eingeführt und wird in Kapitel 12 besprochen.

Verbesserte Speicherverwaltung und GeschwindigkeitPHP 4 war schon schnell, aber PHP 5 ist noch schneller und nutzt den Arbeitsspei-cher noch besser aus. Dies werden wir jedoch nicht im Einzelnen beschreiben.

Neue XML-UnterstützungSchon PHP 4 kannte mehrere verschiedene Hilfsmittel für den Umgang mit dereXtensible Markup Language (XML). Diese Tools ersetzt PHP 5 nun durch einneues, robustes Framework. Auf die XML-Unterstützung gehen wir in diesem Buchnicht genauer ein.

Die verbesserte MySQL-Bibliothek (mysqli)PHP 5 hat eine neue MySQL-Funktionsbibliothek für die Unterstützung von MySQL4. Ein wichtiges Feature dieser Bibliothek gestattet es, eine einmal geschriebene SQL-Abfrage immer wieder auszuführen, was die Geschwindigkeit bei häufig verwende-ten Abfragen stark erhöht. Diese Bibliothek wird in Kapitel 6 kurz beschrieben. Sie

Page 29: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Dreischichtige Architekturen | 11

Rechts

Max.Linie

Max.Linie

ist leider auch die Ursache für viele in diesem Buch erwähnte Kompatibilitätspro-bleme zwischen PHP 4 und PHP 5.

Weitere Informationen über die Neuerungen in PHP 5 finden Sie unter http://www.zend.com/zend/future.php.

Die Datenbank-SchichtDie Datenbank-Schicht speichert und liefert Daten. Sie ist auch für das Management vonDatenänderungen zuständig, wobei ein gleichzeitiger (nebenläufiger) Zugriff von Webser-vern, Sicherheit, Datenintegrität und Hilfsdienste wie beispielsweise die Datensicherunggewährleistet sein müssen. Die wichtigste Aufgabe einer guten Datenbank-Schicht ist es,schnell und flexibel Zugang zu Millionen von Daten zu geben.

Zur Verwaltung von Daten in der Datenbank-Schicht ist eine komplexe Software erfor-derlich. Zum Glück sind die meisten Datenbank-Managementsysteme (DBMS) oder Ser-ver so gestaltet, dass die Komplexität der Software im Verborgenen bleibt. Wer einenDatenbank-Server wirkungsvoll administrieren will, muss sich auskennen und benötigtSpezialkenntnisse über den Datenbank-Entwurf und die Formulierung von SQL-Abfra-gen. SQL wird in Kapitel 5 beschrieben. Eingehendere Kenntnisse über die Architekturdes Datenbank-Servers sind jedoch für die meisten Anwender nicht vonnöten.

In diesem Buch wird für das Datenmanagement der MySQL-Server verwendet. Er ist zuRecht für seine Schnelligkeit bekannt; er kann viele Millionen Daten verwalten, ist sehrgut skalierbar und eignet sich hervorragend für Webdatenbank-Anwendungen. Ebensowie PHP und Apache ist auch MySQL Open Source. Allerdings hat MySQL auch seineNachteile, auf die wir weiter unten in diesem Abschnitt noch zu sprechen kommen.

Um eine erfolgreiche Webdatenbank-Anwendung zu entwickeln, müssen Sie zuerst dieSystemanforderungen verstehen und wissen, wie man Datenbanken entwirft. Technikender Modellierung von Systemanforderungen, zur Überführung eines Modells in eineDatenbank und die Prinzipien der Datenbank-Technologie werden in Anhang E erklärt.In diesem Abschnitt werden wir uns auf die Datenbank-Schicht konzentrieren und dieDatenbank-Software anderen Techniken zur Speicherung von Daten gegenüberstellen. Inden Kapiteln 5 und 15 werden die verwendeten Standards und Programme genauer erläu-tert.

Es gibt auch noch andere Server zur Speicherung von Daten in der Datenbank-Schicht.Dazu gehören Suchmaschinen, Dokument-Managementsysteme und Gateway-Serviceswie beispielsweise E-Mail-Programme. In diesem Buch konzentrieren wir uns jedoch aufden MySQL-Server in der Datenbank-Schicht.

Datenbank-ManagementsystemeEin Datenbank-Managementsystem – kurz DBMS – sucht und verwaltet die in Datenban-ken gespeicherten Daten. Eine Datenbank ist eine Sammlung zusammenhängender

Page 30: Behandelt PEAR, und MySQLdownload.e-bookshelf.de/download/0000/0769/24/L-G...PHP und MySQL Webdatenbank-Applikationen mit Hugh E. Williams & David Lane Deutsche Übersetzung von Dorothea

This is the Title of the Book, eMatter EditionCopyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

12 | Kapitel 1: Datenbank-Anwendungen und das Web

Links

Max.Linie

Max.Linie

Daten, und eine Anwendung kann durchaus auf mehrere Datenbanken zugreifen. EineDatenbank kann aus wenigen Einträgen bestehen, etwa aus einem simplen Adressbuchmit Namen, Anschriften und Telefonnummern, oder sie kann im anderen Extrem auchHunderte von Millionen Einträgen enthalten, die einen Katalog, Käufe, Bestellungen oderauch die Gehaltslisten einer großen Firma enthalten. Die meisten Webdatenbank-Anwendungen haben kleine bis mittlere Datenbanken mit Tausenden oder Zehntausen-den von Datensätzen.

Datenbank-Server sind eine komplexe Software. Die wichtige Komponente für Webda-tenbank-Anwendungen ist die Schnittstelle, über die auf den Datenbank-Server zugegrif-fen wird. Für Anwendungen, die keine gewaltigen Ausmaße haben, müssen Sie sichjedoch nicht im Einzelnen mit den Interna eines Datenbank-Servers und seiner Konfigu-ration auskennen.

SQL

Auf die Datenbank-Server-Schnittstelle für Anwendungen greift man mit SQL zu. SQL isteine Standard-Abfragesprache für die Definition und Bearbeitung von Datenbanken undDaten. Diese Sprache wird von allen gebräuchlichen Datenbank-Servern unterstützt.

SQL hat einen komplizierten Lebensweg. Anfang der 70er Jahre erblickte es im IBM-For-schungslabor von San Jose als Sequel das Licht der Welt. Manche nennen es immer nochSequel, doch korrekter ist es, das dreibuchstabige Akronym SQL auszusprechen. Nachfast 16 Jahren der Entwicklung und unterschiedlichsten Implementierungen veröffent-lichten die Standardisierungsorganisationen ANSI und ISO 1986 einen SQL-Standard.Doch nur ein Jahr später kam IBM mit einem eigenen Standard heraus!

Seit Mitte der 1980er Jahre wurden vom ANSI und von der ISO drei Standards nachein-ander veröffentlicht. Der erste, SQL-89, ist der am häufigsten und vollständigsten imple-mentierte SQL-Standard in populären Datenbank-Servern. Viele Server implementierenvon dem nächsten Release, SQL-2 oder SQL-92, nur ein paar Features und von dem neu-esten, SQL-99 oder SQL-3, überhaupt keine Features. MySQL unterstützt den StandardSQL-92 und hat einige proprietäre Erweiterungen.

Betrachten wir ein SQL-Beispiel. Angenommen, Sie möchten Daten über Bücher in einerBibliothek speichern. Dazu können Sie mit folgender Anweisung eine Tabelle anlegen,also ein Objekt, das in der Datenbank gespeichert wird:

CREATE TABLE books ( title char(50), author char(50), ISBN char(50) NOT NULL, PRIMARY KEY (ISBN));

Danach können Sie der Datenbank Bücher hinzufügen, etwa mit folgender Anweisung:

INSERT INTO books ("Web Database Apps", "Hugh and Dave", "123-456-N");