Kapitelübersicht Inhaltsverzeichnis Vorwort Konzeption des Buchs Teil I - PHP-Grundlagen und - Programmiertechniken Installation und Konfiguration

Größe: px
Ab Seite anzeigen:

Download "Kapitelübersicht Inhaltsverzeichnis Vorwort Konzeption des Buchs Teil I - PHP-Grundlagen und - Programmiertechniken Installation und Konfiguration"

Transkript

1 Kapitelübersicht Inhaltsverzeichnis Vorwort Konzeption des Buchs Teil I - PHP-Grundlagen und - Programmiertechniken Installation und Konfiguration 1.1 Versionen und Lizenzen Versionen Lizenzen 1.2 Installation unter Windows Apache 2.0 installieren PHP 5.0 installieren MySQL 4.1 oder 5.0 installieren 1.3 Installation unter Linux XAMPP installieren MySQL 4.1 oder 5.0 installieren Apache 2 und PHP 5 kompilieren MySQL-Entwicklerversion kompilieren 1.4 Apache-Konfiguration Apache-Konfigurationsdatei Passwortschutz für Webverzeichnisse (.htaccess-datei) 1.5 PHP-Konfiguration 1.6 MySQL-Konfiguration und -Administration MySQL-Konfiguration MySQL-Administrationswerkzeuge MySQL-Installation absichern 1.7 Zeichensatz (latin1 oder Unicode UTF-8) Zeichensatzgrundlagen Zeichensatzunterstützung in Apache, PHP und MySQL 1.8 Editor/Entwicklungsumgebung Einführung und Sprachelemente 2.1 Hello World 2.2 PHP- und HTML-Code kombinieren 2.3 Typen Arrays Strings 2.4 Variablen und Konstanten Variablen Konstanten 2.5 Operatoren und andere Sonderzeichen Operatoren Kommentare Sonderzeichen 2.6 Kontrollstrukturen if-abfragen switch-konstruktionen Schleifen 2.7 Funktionen definieren und aufrufen 2.8 Fehlerbehandlung, Fehlerabsicherung Reaktion auf Programmfehler, Fehlermeldungen Exceptions Fehlersuche/Debugging 2.9 Einbinden von Dateien Objektorientierte Programmierung 3.1 Einführung in OOP Was ist OOP? Wer braucht OOP? Der Spagat von PHP: OOP und prozedural 3.2 OO-Syntax in PHP Erste Klasse Klassen erzeugen und erweitern Kapselung: Zugriff auf Member-Variablen und -Funktionen Variablen und Funktionen überladen Interfaces Fehlerbehandlung in Klassen Tipps und Tricks 3.3 Beispiel: Ein Buchungssystem für Räume und Geräte Bedienung der Anwendung Die Klassenstruktur Die Verwendung der Klassen Wichtige PHP- Funktionen 4.1 Mathematische Funktionen 4.2 String-Funktionen Ausgabe von Strings Standardfunktionen Regionale Formatierung und Sortierung von Zeichenketten 4.3 Datums- und Zeitfunktionen date mktime und strtotime 4.4 Variablenverwaltung 4.5 Array-Funktionen Standardfunktionen Suche in Arrays Sortierung

2 4.6 HTTP-Funktionen header $_SERVER-Variablen 4.7 URL-Funktionen PHP-Programmiertechniken 5.1 Einführung 5.2 PHP-Authentifizierung Einführung Lokale Passwörter LDAP-Validierung Validierung über einen Mailserver 5.3 Cookies Was sind Cookies? Cookies im Einsatz 5.4 Session-Verwaltung Einleitung Sessions in der Praxis 5.5 Verarbeitung von Formulardaten Gefahren bei Formulardaten Formulardaten richtig verarbeiten Beispiel: Anmeldung zum Kongress 5.6 versenden PHP-Mail mit sendmail unter Unix/Linux PHP-Mail via SMTP unter Windows mit PEAR 5.7 PDF-Dokumente erzeugen Clibpdf und PDFlib PDFlib und PDFlib-Lite PDF-Logo erstellen Eine PDF-Rechnung mit PHP 5.8 Grafik mit PHP Grafische Darstellung der Daten einer automatischen Wetterstation 5.9 Reguläre Ausdrücke Einführung Beispiele 5.10 XML Verarbeiten von RSS-Informationen mit SimpleXML XML verarbeiten mit DOM Teil II - MySQL-Grundlagen und -Programmiertechniken phpmyadmin 6.1 Installation und Konfiguration 6.2 Benutzerverwaltung, MySQL absichern Verwaltung von Benutzern und Privilegien MySQL absichern Neue Benutzer anlegen 6.3 Datenbanken erstellen und ändern Datenbank erzeugen Tabelle erzeugen Vorhandene Tabellen ändern Foreign-Key-Regeln aufstellen Datenbankstruktur dokumentieren 6.4 Daten ansehen, einfügen und ändern 6.5 SQL-Kommandos ausführen 6.6 Import und Export 6.7 Administrative Funktionen 6.8 Zusatzfunktionen Datenbank-Design 7.1 Grundlagen (Miniglossar) 7.2 Tabellentypen (MyISAM, InnoDB, HEAP) 7.3 Datentypen (Spaltentypen) Ganze Zahlen Fließ- und Festkommazahlen Datum und Uhrzeit Zeichenketten Binärdaten (BLOBs) Sonstige Datentypen Optionen und Attribute 7.4 Tipps und Tricks zum Datenbankdesign 7.5 Normalisierungsregeln Die erste Normalform Zweite Normalform Dritte Normalform 7.6 Verwaltung von Hierarchien 7.7 Relationen 7.8 Primär- und Fremdschlüssel Primärschlüssel (primary key) Fremdschlüssel (foreign key) Referenzielle Integrität (Foreign-Key-Regeln) 7.9 Indizes Grundlagen Gewöhnlicher Index, Unique-Index, Primärindex Volltextindex 7.10 Views 7.11 mylibrary-datenbankschema SQL-Grundlagen 8.1 Syntaxregeln 8.2 Einfache Abfragen (SELECT) Anzahl der Ergebnisdatensätze einschränken (LIMIT) Ergebnisse sortieren (ORDER BY)

3 8.2.3 Datensätze durch Bedingungen auswählen (WHERE, HAVING) 8.3 Daten aus mehreren Tabellen verknüpfen (JOIN) JOINs über zwei Tabellen JOINs über drei und mehr Tabellen 8.4 Sub-SELECTs 8.5 Abfrageergebnisse aneinander fügen (UNION) 8.6 Gruppierte Abfragen, Aggregatsfunktionen 8.7 Daten ändern (INSERT, UPDATE und DELETE) Datensätze einfügen (INSERT) Datensätze verändern (UPDATE) Datensätze löschen (DELETE) Neue Tabellen erstellen 8.8 Variablen 8.9 Transaktionen 8.10 Datenbanken und Tabellen erzeugen und ändern Datenbank erzeugen (CREATE DATABASE) Tabellen erzeugen (CREATE TABLE) Das Tabellendesign ändern (ALTER TABLE) SQL-Rezepte 9.1 Zeichenketten Zeichenketten bearbeiten Zeichensatz ändern 9.2 Datum und Uhrzeit 9.3 ENUMs und SETs 9.4 IF- und CASE-Bedingungen 9.5 Kreuztabellen (Pivottabellen) 9.6 Doppelgänger suchen 9.7 Die ersten/letzten 9.8 Datensätze zufällig auswählen 9.9 Mustervergleich 9.10 Volltextsuche PHP-Zugriff auf MySQL-Datenbanken 10.1 mysql-funktionen Verbindungsaufbau SQL-Kommandos ausführen SELECT-Ergebnisse auswerten Transaktionen Fehlerabsicherung und Fehlersuche 10.2 mysqli-klassen, -Methoden und -Eigenschaften Verbindungsaufbau SQL-Kommandos ausführen SELECT-Ergebnisse auswerten (mysqli_result) Mehrere SQL-Kommandos gleichzeitig ausführen SQL-Kommandos mit Parametern (prepared statements) Transaktionen 10.3 Datenbankfunktionen in eine Klasse auslagern Mehr Sicherheit durch eine eigene Passwortdatei Sicherheit und Komfort mit der MyDb-Klasse 10.4 SELECT-Ergebnis als Tabelle anzeigen 10.5 Zeichenketten, Datum, Zeit, BLOB und NULL Zeichenketten und BLOBs Datum und Uhrzeit NULL 10.6 Miteinander verknüpfte Datensätze einfügen 10.7 Verarbeitung von Formulareingaben Codeaufbau Formularaufbau Validierung der Formulardaten Speicherung der Formulardaten Titel löschen Erweiterungsmöglichkeiten 10.8 Seitenweise Darstellung von Suchergebnissen Codeaufbau Autorensuche Titelsuche Suchergebnisse anzeigen Links auf weitere Seiten 10.9 Hierarchische Daten verwalten Codeaufbau Kategoriebaum anzeigen Unterkategorien einfügen Kategorien und Unterkategorien löschen Übergeordnete Kategorien suchen Untergeordnete Kategorien suchen Geschwindigkeitsoptimierung Grundregeln für die effiziente Codeausführung Statistik- und Benchmarking-Hilfe Beispiel: Kategorielisten effizient erzeugen Binäre Daten (BLOBs) und Bilder Grundlagen und Programmiertechniken Programmcode GIS-Funktionen 11.1 Einleitung Was ist GIS? OpenGIS Simple Features for SQL 11.2 GIS-Datenformate Ein Wort zu geografischen Daten ASCII-Format Shapefile Well-Known Text, Well-Known Binary

4 11.3 MySQL-GIS-Implementierung Datentypen Einfache geometrische Funktionen Räumliche Analysefunktionen Indizieren von geometrischen Daten 11.4 SQL-Beispiele 11.5 Beispiel Umkreis-Suche Bedienung der Anwendung Datenbankstruktur Import Suche Ausgabe Stored Procedures 12.1 Wozu Stored Procedures? 12.2 Hello SP-World! 12.3 Implementierungsdetails 12.4 Administration 12.5 Syntax und Sprachelemente Allgemeine Syntaxregeln Aufruf von SPs (CALL) Parameter und Rückgabewert Kapselung von Kommandos (BEGIN/END) Variablen Verzweigungen Schleifen Fehlerabsicherung (Handler) Cursor 12.6 Beispiele Kategorie einfügen Titel einfügen Übergeordnete Kategorien ermitteln Hierarchisch geordnete Kategorieliste liefern 12.7 SPs und PHP 12.8 SP-Administrator Bedienung Installation Code Teil III - Beispielprojekte Internet-Umfragen 13.1 Bedienung Benutzersicht Administratorsicht 13.2 Datenbankdesign 13.3 Aufbau des Codes 13.4 Wichtige Codefragmente Hilfsfunktionen (webvotefunctions.php) Umfrageergebnis anzeigen (result.php) Umfrageformular anzeigen und auswerten (vote.php) Loginformular (login.php) Neue Umfrage definieren (newpoll.php) 13.5 Erweiterungsmöglichkeiten 13.6 Installation Bilddatenbank 14.1 Zielsetzung des Beispiels Anforderungen an das Programm Anforderungen an den Code 14.2 Bedienung Anonyme Benutzer Administratoren 14.3 Datenbankdesign 14.4 Aufbau des Codes Der PHP-Code Der HTML/CSS-Code 14.5 Wichtige Codefragmente MyDb GalleryImage GalleryCollection GalleryViewer Bilder-Import Der Viewer Die Suche Der RSS-Feed 14.6 Verbesserungen und Erweiterungen 14.7 Installation Diskussionsforum 15.1 Bedienung 15.2 Datenbankdesign 15.3 Aufbau des Codes 15.4 Login-Verwaltung Erste Anmeldung Validierung und Aktivierung Login-Auswertung Logout Neuerlicher Login 15.5 Forumsbeiträge anzeigen und eingeben Menü Forumsliste (forum.php) Thread-Liste (threads.php) Thread-Ansicht (thread.php)

5 Eingabeformular (newmessage.php) 15.6 Volltextsuche SQL-Code der Suche Suche durchführen (Funktion show_search_results) Suchergebnisse hervorheben 15.7 Erweiterungsmöglichkeiten 15.8 Installation TYPO Einführung Was ist ein CMS? TYPO3-CMS 16.2 Installation und Konfiguration Dummy-Installation unter Linux/Windows TYPO3 Backend Die erste TYPO3-Seite 16.3 Backend-Benutzerverwaltung 16.4 Anwendung Verteilte Rollen Tipps und Tricks 16.5 Extensions Installation von Extensions News General Office Displayer 16.6 TYPO3 mit eigenen PHP-Scripts erweitern Anhang Neu in PHP 5 Neue Funktionalitäten Inkompatibilitäten mit älteren Versionen Neu in MySQL 5 Neuerungen in MySQL 3.23 Volltextsuche in MyISAM-Tabellen InnoDB-Tabellentyp mit Transaktionen und Foreign-Key-Regeln Neue Lizenz für MySQL Neuerungen in MySQL 4.0 UNION für SELECT UPDATE und DELETE für mehrere Tabellen Query Cache Neue Lizenz für die MySQL-Client-Bibliotheken Neuerungen in MySQL 4.1 Zeichensätze, Unicode Sub-SELECTs CREATE TABLE newtable LIKE oldtable Prepared Statements Geometriedaten GROUP_CONCAT-Funktion Bessere PASSWORD-Verschlüsselung TIMESTAMP-Ausgabe mysqli-unterstützung Neuerungen in MySQL 5.0 Views Stored Procedures Trigger Geplante Neuerungen in MySQL 5.1 FULL OUTER JOIN zwischen zwei Tabellen Validitätsregeln für Spalten Foreign-Key-Regeln auch für MyISAM-Tabellen Verbesserungen bei Stored Procedures und Triggern Der Inhalt der beiliegenden CD (Inhalt auf Anfrage erhältlich) Stichwortverzeichnis

6 12 Stored Procedures (S ) Stored Procedures (kurz SPs) sind die wichtigste Neuerung in MySQL 5.0. Es handelt sich um selbst definierbare SQL-Prozeduren oder -Funktionen, die direkt vom My- SQL-Server gespeichert und ausgeführt werden. Mit SPs steht Ihnen eine eigene, auf SQL basierende Programmiersprache zur Verfügung. SPs ermöglichen es, einen Teil der Logik einer Datenbankanwendung vom Client zum Server zu verlagern. In diesem Kapitel erfahren Sie zuerst, warum SPs überhaupt sinnvoll sind (höhere Geschwindigkeit, höhere Datensicherheit, weniger Coderedundanz etc.). Die weiteren Abschnitte beschreiben Details der SP-Implementierung in MySQL und geben eine Reihe von Anwendungsbeispielen. Zuletzt wird der SP-Administrator vorgestellt, ein kleines PHP-Beispielprogramm, das die Administration von SPs sehr vereinfacht. Achtung Leider hat sich MySQL 5.0 in den letzten Monaten langsamer entwickelt, als die MySQL-Entwickler ursprünglich versprochen hatten. Dieses Kapitel basiert auf der Entwicklerversion von MySQL 5.0, die wir am 4. November 2004 selbst kompiliert haben. Diese Version liegt zwischen MySQL und der damals noch nicht verfügbaren Version Stored Procedures funktionieren in dieser Version in den Grundzügen, aber noch alles andere als stabil: Beim Testen sind zahlreiche Abstürze des MySQL-Servers aufgetreten, was sonst bei keinem anderen Thema dieses Buchs der Fall war! Das ist nicht das einzige Problem: Im November 2004, als dieses Kapitel verfasst wurde, gab es keine Benutzeroberfläche, um SPs einigermaßen komfortabel zu erstellen oder zu verändern: phpmyadmin 2.6 ist zur Administration von SPs gänzlich ungeeignet, und auch der MySQL Query Browser stellt erst rudimentäre Funktionen zur Verfügung. Mehr Komfort bei der Entwicklung eignener SPs bietet der in Abschnitt 12.8 vorgestellte SP-Administrator, ein kleines PHP-Programm. Beim Schreiben dieses Kapitels sind nicht nur Fehler in MySQL, sondern auch solche in PHP 5 aufgetreten. Beispielsweise funktioniert die Rückgabe von SELECT-Ergebnissen aus SPs erst ab PHP Erfreulich war hier die ungemein rasche Problembehebung durch die PHP-Entwickler, so dass Probleme manchmal innerhalb von Stunden im nächsten PHP-Snapshot ( gelöst wurden. Kurz und gut: Als dieses Kapitel verfasst wurde, hatten SPs noch einen experimentellen Charakter. Das Kapitel richtet sich somit an erfahrene Programmierer, die sich schon jetzt mit der schönen neuen Welt der Stored Procedures befassen möchten. Mit dem Praxiseinsatz von SPs sollten Sie aber warten, bis sich MySQL 5.0 einigermaßen stabilisiert hat. (Aus heutiger Sicht wird das voraussichtlich Mitte 2005 der Fall sein.) 12.1 Wozu Stored Procedures? Stored Procedures sind eine Sammlung von SQL-Kommandos, die direkt im My- SQL-Server gespeichert und auch dort ausgeführt werden. Je nach Anwendung können sich daraus die folgenden Vorteile ergeben: Höhere Geschwindigkeit: Oft ist es so, dass zur Durchführung einer Datenbankoperation eine Menge Daten zwischen dem PHP-Programm und dem Datenbank-Server hin- und hertransportiert werden müssen: Das PHP-Programm führt ein SELECT-Kommando aus, verarbeitet das Ergebnis, führt mit diesen Ergebnissen ein UPDATE-Kommando aus, ermittelt LAST_INSERT_ID etc. Wenn diese Schritte alle auf dem Server in einer SP stattfinden können, erspart das ganz offensichtlich eine Menge Kommunikation und Overhead zur Datenumwandlung.