Danksagung | 6 |
Inhaltsverzeichnis | 8 |
1 Einleitung | 12 |
2 Plan & Concept | 16 |
2.1 Planung mit dem Kunden | 17 |
2.1.1 Bevor Sie anfangen zu programmieren | 17 |
2.1.2 Während der Entwicklung | 21 |
2.1.3 Nach der Entwicklung | 26 |
2.2 Planung für sich selbst | 29 |
2.2.1 Bevor Sie anfangen zu programmieren | 29 |
2.2.2 Während der Entwicklung | 32 |
3 Small & light | 34 |
3.1 PHP-Entwicklungsumgebungen | 35 |
3.1.1 Die Schweren | 35 |
3.1.2 Die Leichten | 37 |
3.1.3 Die Ultraleichten | 42 |
3.2 MySQL-Benutzeroberflächen | 43 |
3.3 Sonstige Werkzeuge | 46 |
4 Present & Future | 52 |
4.1 Grundlegende Ordnerstruktur | 52 |
4.2 Helferfunktionen und -klassen | 55 |
4.2.1 Debug-Funktionen | 56 |
4.2.2 String-Funktionen | 60 |
4.2.3 Eigene Klassen | 64 |
4.2.4 Externe Funktionen | 76 |
4.3 Einzubindende Dateien | 78 |
4.4 Frameworks | 86 |
5 Build & Write | 90 |
5.1 Namensgebung | 91 |
5.2 Die Datenbank | 93 |
5.3 Die Programmierung – die Themen-Administration | 96 |
5.3.1 Prinzipielle Struktur der PHP-Datei | 98 |
5.3.2 Der HTML-Bereich – ein erstes Formular | 100 |
5.3.3 Der PHP-Programmbereich – erste Aktionen | 104 |
5.3.4 Einrücken, Auskommentieren und Co. | 112 |
5.3.5 Optik – das Auge arbeitet mit | 117 |
6 Copy & Paste und Search & Replace | 122 |
6.1 Kopieren, einfügen, suchen und ersetzen | 123 |
6.2 Arrays und ternäre Operatoren | 137 |
7 Show & Sort | 152 |
7.1 Die Struktur | 152 |
7.2 Arrays | 161 |
7.3 Arrays sortieren | 171 |
8 Safe & Secure | 184 |
8.1 PHP-Konfiguration | 185 |
8.1.1 register_globals = off | 187 |
8.1.2 allow_url_fopen = off | 190 |
8.1.3 open_basedir | 190 |
8.2 XSS (Cross–Site-Scripting) | 192 |
8.3 SQL-Injection | 195 |
8.4 Captcha | 198 |
8.5 Die Macht des md5-Algorithmus | 200 |
8.5.1 Passwörter in der Datenbank | 200 |
8.5.2 Parameterübergabe | 203 |
8.6 Sicherheitskopien | 204 |
8.6.1 PHP-Dateien sichern | 204 |
8.6.2 Datenbankdaten sichern | 205 |
9 Deploy & Deliver | 208 |
9.1 Dateien | 209 |
9.2 Datenbank | 213 |
9.2.1 Möglichkeit 1: das große SQL-Skript | 215 |
9.2.2 Möglichkeit 2: das kleine Update-Skript | 218 |
10 Seek & Destroy | 230 |
10.1 Prinzipielles Vorgehen bei der Fehlersuche | 231 |
10.2 Werkzeuge zur Fehlersuche | 232 |
10.2.1 echo und echo_r, die und die_r | 234 |
10.2.2 Das Debug-Panel | 240 |
10.3 Besondere Situationen bei der Fehlersuche | 253 |
10.3.1 Kein Debugging auf der Live-Seite | 253 |
10.3.2 Keine Fehlerausgaben auf dem Livesystem | 258 |
10.3.3 Fehler, die nur beim Nutzer auftreten | 261 |
10.4 Typische PHP-Stolpersteine | 263 |
10.4.1 Der Klassiker: == ist nicht = | 263 |
10.4.2 Einige Vergleiche sind gleicher als gleich: == ist nicht gleich === | 265 |
10.4.3 Ein Leerzeichen ist nicht leer | 266 |
10.4.4 Formfehler im Formular | 268 |
11 Expand & Optimize | 272 |
11.1 Mehrsprachigkeit | 272 |
11.1.1 Administration und Datenbank | 273 |
11.1.2 Webseiten-Elemente aus der Datenbank | 275 |
11.1.3 Webseite – statische Elemente | 279 |
11.2 Pimp My Website – den Kunden beeindrucken | 283 |
11.2.1 TinyMCE | 284 |
11.2.2 phpMailer | 287 |
12 Tipps & Tricks | 296 |
12.1 PHP-Tipps | 296 |
12.1.1 Doppeleinträge verhindern – header hilf! | 296 |
12.1.2 Brich den String | 298 |
12.1.3 Tabellen mit Modulo | 303 |
12.2 MySQL-Tipps | 312 |
12.2.1 1 = 2 und 1 = 1 | 312 |
12.2.2 CREATE TABLE SELECT – die schnellste Sicherheitskopie der Welt | 314 |
12.2.3 Tu’s mit Excel: Viele SQL-Strings auf einmal erstellen | 315 |
13 Epilog & die goldenen Regeln | 320 |
Stichwortverzeichnis | 324 |