2 Dynamische Webseiten mit PHP

Werbung
Grundlagen der PHP
Programmierung
von Jan Teriete
Art.-Nr. 011802941
Version 3.2.0 vom 13.2.2014
Autorisiertes Curriculum für das Webmasters Europe Ausbildungs- und Zertifizierungsprogramm
© 2012 by Webmasters Press
www.webmasters-press.de
Nordostpark 7, 90411 Nürnberg, Germany
Das vorliegende Fachbuch ist urheberrechtlich geschützt. Alle Rechte
vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne schriftliche Genehmigung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder Verwendung in elektronischen Systemen
sowie für die Verwendung in Schulungsveranstaltungen. Die Informationen in diesem Fachbuch wurden mit größter Sorgfalt erarbeitet. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Autoren
und Herausgeber übernehmen keine juristische Verantwortung oder
irgendeine Haftung für eventuell verbliebene fehlerhafte Angaben und
deren Folgen.
Informationen zu dieser
Buchreihe
Dieses Buch ist Teil unserer Buchreihe zum Zertifizierungsprogramm des Europäischen Webmasterverbandes, Webmasters Europe e.V. (WE).
Das Webmasters Europe Ausbildungs- und Zertifizierungsprogramm ist modular aufgebaut
und bietet Abschlüsse und Zertifizierungen auf verschiedenen Ebenen an – von der ExpertenZertifizierung für einzelne Themen bis hin zu Diploma-Abschlüssen für Webdesigner, WebEntwickler, Webmaster und Online Marketing Manager. Nähere Informationen dazu finden Sie
unter http://de.webmasters-europe.org/bildungsprogramm
Unsere Buchreihe bietet Ihnen nicht nur eine fundierte und praxisnahe Einführung in das
jeweilige Thema, sondern ist von Webmasters Europe e.V. offiziell autorisiert zur Vorbereitung
auf die WE-Zertifikatsprüfungen. Damit haben Sie die Garantie, dass alle prüfungsrelevanten
Themen behandelt werden.
Inhaltsverzeichnis
1
2
3
Einführung
17
1.1
1.2
1.3
1.3.1
1.3.2
1.3.3
1.3.4
1.4
1.4.1
1.4.2
1.4.3
1.4.4
1.5
17
Für wen dieses Lernheft gedacht ist
Vorkenntnisse
Aufbau des Lernhefts
Code-Listings im Text
Testen Sie Ihr Wissen
Aufgaben zur Selbstkontrolle
Optionale Aufgaben
Formale Anforderungen
Windows-PC
PHP-fähiger Webserver
Code-Editor
Webbrowser
Zusammenfassung
17
18
18
18
18
19
19
19
19
19
20
20
Dynamische Webseiten mit PHP
21
2.1
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
2.2
2.2.1
2.2.2
2.3
21
Was sind dynamische Webseiten?
Statische Webseiten
Dynamische Webseiten
Vorteile dynamischer Webseiten
Nachteile dynamischer Webseiten
Die Auslieferung von Webseiten
PHP
Stärken von PHP
Geschichte von PHP
Zusammenfassung
21
21
22
22
23
24
24
24
26
HTML und PHP
27
3.1
3.2
3.2.1
3.2.2
3.2.3
3.3
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.4
3.4.1
3.4.2
3.5
3.5.1
27
Das Problem
PHP in eine HTML-Seite einbetten
Eine statische HTML-Seite erstellen
PHP-Code einfügen
PHP erzeugt HTML
Die sechs berühmten Fehler
PHP-Code im HTML-Bereich schreiben
HTML-Code im PHP-Bereich schreiben
Die PHP-Datei hat die Endung .html
Die PHP-Datei liegt nicht im Zugriff des Webservers
Die PHP-Datei wurde direkt im Browser geöffnet
Die echo-Anweisung fehlt
Mehrzeilige PHP-Anweisungen
Das Semikolon
Mehrzeilige PHP-Anweisungen
Stilfragen
Saubere Trennung von HTML und PHP
27
27
28
29
29
29
30
30
31
31
31
32
32
33
33
33
3.5.2
3.6
4
5
6
Einrückungen
Zusammenfassung
35
36
Variablen und Operatoren
39
4.1
4.2
4.2.1
4.2.2
4.2.3
4.3
4.3.1
4.3.2
4.3.3
4.3.4
4.3.5
4.3.6
4.3.7
4.4
4.4.1
4.4.2
4.4.3
4.4.4
4.4.5
4.5
39
Das Problem
Kommentare in PHP einbetten
Grundlagen
Einzeilige Kommentare
Mehrzeilige Kommentare
Variablen
Grundlagen
Benennung von Variablen
Der Zuweisungsoperator
Zahlen
Zeichenketten
Der null-Wert
Variableninhalte auslesen
Operatoren
Grundlagen
Rechenoperatoren
Der Verknüpfungsoperator
Kombinierte Operatoren
Inkrement und Dekrement-Operatoren
Zusammenfassung
39
39
39
40
41
41
41
42
43
43
43
44
44
44
45
46
46
48
48
PHP-Funktionen
51
5.1
5.2
5.3
5.3.1
5.3.2
5.4
5.5
5.5.1
5.5.2
5.5.3
5.6
5.7
5.7.1
5.7.2
5.7.3
5.8
51
Das Problem
Aufgabe von Funktionen
Funktionen aufrufen
Grundlagen
Fehlerhafter Funktionsaufruf
Parameter an Funktionen übergeben
Rückgabewerte von Funktionen
Grundlagen
Rückgabewerte ausgeben
Rückgabewerte in Variablen speichern
Funktionen mit mehreren Parametern
Die PHP-Funktionsreferenz
Grundlagen
Suchen und Browsen von php.net
Funktionsdefinitionen lesen
Zusammenfassung
51
52
52
52
53
53
53
54
54
55
56
56
56
57
60
PHP-Datentypen
62
6.1
6.2
6.3
6.4
6.4.1
6.4.2
6.4.3
62
Das Problem
Die Funktion gettype()
Null
Boolean
Grundlagen
isset() und unset()
empty()
62
62
63
63
63
64
6.5
6.5.1
6.5.2
6.5.3
6.6
6.6.1
6.6.2
6.6.3
6.7
6.7.1
6.7.2
6.7.3
6.7.4
6.7.5
6.8
6.8.1
6.8.2
6.8.3
6.8.4
6.9
6.9.1
6.9.2
6.9.3
6.9.4
6.10
7
Integer
Grundlagen
is_int()
intval()
Float/Double
Grundlagen
is_float()
floatval()
String
Grundlagen
Bedeutung der Anführungszeichen
is_string()
strval()
strlen()
Weitere Datentypen
Grundlagen
Array
Object
Resource
Dynamische Typumwandlung
Grundlagen
Mathematische Operatoren
Der Verknüpfungsoperator
Nicht-boolesche Wahrheitswerte
Zusammenfassung
Arrays
7.1
7.2
7.3
7.3.1
7.3.2
7.3.3
7.3.4
7.4
7.4.1
7.4.2
7.5
7.5.1
7.5.2
7.5.3
7.5.4
7.5.5
7.5.6
7.5.7
7.5.8
7.5.9
7.5.10
7.5.11
7.5.12
7.6
67
67
68
69
70
70
71
71
71
71
71
73
73
74
74
74
74
74
74
75
75
75
76
77
77
80
Das Problem
Grundlagen
Mit Arrays arbeiten
Erzeugen mit eckigen Klammern
Auslesen von Werten
Erzeugen mit explizitem Index
Erzeugen mit der array()-Funktion
Assoziative Arrays
Grundlagen
Der Doppelpfeil-Operator (=>)
Nützliche Array-Funktionen
is_array()
count()
var_dump()
explode()
implode()
shuffle()
in_array()
array_reverse()
array_keys()
array_values()
array_pop()
array_shift()
Zusammenfassung
80
80
80
80
81
82
83
84
84
85
86
86
86
86
87
88
88
89
90
91
92
93
94
94
8
9
10
11
Formulare und Links
97
8.1
8.2
8.3
8.3.1
8.3.2
8.3.3
8.4
8.4.1
8.4.2
8.4.3
8.4.4
8.5
8.5.1
8.5.2
8.6
97
Das Problem
Informationen an PHP-Skripte übergeben
Parameter über HTML-Links übergeben
Aufbau von URLs
URL-Parameter in PHP auslesen
Zweck von URL-Parametern
Parameter durch HTML-Formulare übergeben
Grundlagen
Der Form-Tag
Formulardaten auslesen
Formularelemente
Das Array $_REQUEST
Grundlagen
$_REQUEST oder $_POST?
Zusammenfassung
97
97
97
98
100
101
101
101
103
104
112
112
113
113
Funktionsentwurf
116
9.1
9.2
9.2.1
9.2.2
9.2.3
9.3
9.4
9.5
116
Das Problem
Funktionen definieren
Funktionskopf
Funktionskörper
Selbstgeschriebene Funktionen aufrufen
Funktionen in Funktionen aufrufen
Namenskonventionen
Zusammenfassung
116
116
117
117
118
118
119
Strukturierung von PHP-Skripten
121
10.1
10.2
10.2.1
10.3
10.3.1
10.3.2
10.4
10.4.1
10.4.2
10.4.3
10.4.4
10.4.5
10.5
121
PHP-Code strukturieren
Dreiteilung des PHP-Codes
Grundlagen
Namensgebung
Variablen
Funktionen
Auslagern von Funktionen
Konzept
require_once
require
include(_once)
Namens- und andere Konventionen
Zusammenfassung
122
122
126
126
126
127
127
127
128
129
129
131
Verzweigungen
133
11.1
11.2
11.2.1
11.2.2
11.2.3
11.2.4
11.3
11.3.1
133
Das Problem
Boolesche Logik
Konzept
Vergleichsoperatoren
Boolesche Ausdrücke modifizieren
Wahrheitswerte aus anderen Quellen
if-Anweisung
Grundlagen
133
133
133
143
148
149
149
11.3.2
11.3.3
11.3.4
11.4
11.4.1
11.4.2
11.4.3
11.5
12
13
14
Reine if-Anweisung
if-else
if-elseif-else
Alternativen zur if-Anweisung
Grundlagen
switch-Anweisung
Der Ternäre Operator
Zusammenfassung
149
150
151
155
155
155
158
160
Schleifen
163
12.1
12.2
12.3
12.3.1
12.3.2
12.3.3
12.4
12.4.1
12.4.2
12.4.3
12.4.4
12.4.5
12.4.6
12.5
12.5.1
12.5.2
12.6
12.7
163
Das Problem
Schleifen
foreach-Schleife
Grundlagen
foreach zur formatierten Ausgabe von HTML
Über Schlüssel und Werte iterieren
for-Schleife
Grundlagen
Die Startanweisung
Die Abbruchbedingung
Der Modifikator
Der Schleifenkörper
Anwendungen
while-Schleife
Grundlagen
Anwendung
Endlos-Schleifen
Zusammenfassung
163
164
164
165
166
166
166
167
167
168
168
168
172
172
173
174
174
Funktionen mit Parametern und Rückgabewerten
177
13.1
13.2
13.2.1
13.2.2
13.2.3
13.2.4
13.3
13.3.1
13.3.2
13.3.3
13.3.4
13.4
177
Das Problem
Parameter an Funktionen übergeben
Geltungsbereiche von Variablen
Übergabe von Parametern
Übergabe mehrerer Parameter
Parameter mit Standardwerten
Werte aus einer Funktion zurückgeben
Konzept
return
Einen Wert zurückgeben
Mehrere Werte als Array zurückgeben
Zusammenfassung
177
177
178
179
181
183
183
183
183
185
185
Mehrdimensionale Arrays
187
14.1
14.2
14.3
14.3.1
14.3.2
14.3.3
14.4
187
Das Problem
Konzept
Zweidimensionale Arrays
Zweidimensionale Arrays erzeugen
Zweidimensionale Arrays auslesen
Formatierung
Mehrdimensionale Arrays
187
187
187
188
188
190
14.5
14.6
15
16
17
Verschachtelte foreach-Schleifen
Zusammenfassung
191
194
Stringbehandlung
196
15.1
15.2
15.2.1
15.2.2
15.2.3
15.2.4
15.2.5
15.2.6
15.2.7
15.2.8
15.2.9
15.2.10
15.2.11
15.3
15.3.1
15.3.2
15.3.3
15.3.4
15.3.5
15.3.6
15.4
15.4.1
15.4.2
15.4.3
15.5
15.5.1
15.5.2
15.5.3
15.6
15.7
196
Das Problem
Strings formatieren
Grundlagen
trim()
strtoupper()
strtolower()
ucfirst()
lcfirst()
htmlspecialchars()
strip_tags()
nl2br()
vprintf()
vsprintf()
Datum und Uhrzeit formatieren
Das Problem
Der Timestamp
time()
strftime()
mktime()
strtotime()
Strings durchsuchen
Grundlagen
strlen()
strpos()
Strings bearbeiten
Grundlagen
substr()
str_replace()
lcfirst() selbst programmieren
Zusammenfassung
196
196
196
197
198
199
200
200
203
204
205
207
208
208
208
209
209
211
214
215
215
215
217
218
218
219
219
222
223
Persistente Daten
226
16.1
16.2
16.2.1
16.2.2
16.3
16.3.1
16.3.2
16.4
16.4.1
16.4.2
16.5
226
Das Problem
Dateien als Speichermedium
file_put_contents()
file_get_contents()
Speichern komplexer Datenstrukturen
serialize()
unserialize()
Serialisierte Daten aktualisieren
Das Problem
Vorgehensweise
Zusammenfassung
226
226
227
228
228
229
230
230
231
232
HTTP und PHP-Sessionverwaltung
233
17.1
17.2
233
Das Problem
Grundlagen des HTTP-Protokolls
233
17.2.1
17.3
17.3.1
17.3.2
17.3.3
17.4
17.5
17.6
17.6.1
17.6.2
17.6.3
17.7
18
19
Antwort des Servers (Response)
Mit PHP HTTP-Header auslesen und manipulieren
Grundlagen
$_SERVER
header()
Einschränkungen des HTTP-Protokolls
Sessions
Die PHP-Sessionverwaltung
Sessions eröffnen
Daten in Sessions speichern
Sessions beenden
Zusammenfassung
238
240
240
240
242
244
245
245
245
246
247
249
Einige Tipps und Tricks aus der PHP-Kiste
251
18.1
18.2
18.2.1
18.2.2
18.3
18.3.1
18.3.2
18.3.3
18.4
18.4.1
18.4.2
18.5
251
Das Problem
Konstanten
Prinzip
Anwendung
error_reporting()
Das Problem
Den Fehlerlevel einstellen
Fehlermeldungen abschalten
Alternative PHP-Syntax für HTML-Templates
Warum eine andere Syntax
Die Syntax
Zusammenfassung
251
251
252
253
253
254
254
255
255
256
256
Wir programmieren einen Weblog
258
19.1
19.1.1
19.1.2
19.1.3
19.2
19.3
19.3.1
19.3.2
19.4
19.4.1
19.4.2
19.4.3
19.4.4
19.5
19.5.1
19.5.2
19.5.3
19.6
19.7
19.7.1
19.7.2
19.7.3
19.7.4
19.8
258
Das Projekt
Grundlagen
Ein wenig Makeup
CSS
Die Funktionen
Testdaten
Benutzer
Einträge
Die Startseite
Inhalt
Einträge auslesen
Einträge formatiert anzeigen
Menü oder Login-Formular
Einloggen
Inhalt
Der Login
Weiterleitung per header()
Ausloggen
Eintrag schreiben
Inhalt
Logintest
Eintrags-Formular
Hauptmenü
Eintrag speichern
258
258
262
265
266
266
267
269
269
270
270
271
272
272
272
273
273
274
274
275
275
276
276
19.8.1
19.8.2
19.8.3
19.8.4
19.8.5
19.9
20
21
Inhalt
Login und POST-Test
Eintrag-Array erstellen
Neuen Eintrag speichern
Eintrag formatiert anzeigen
Zusammenfassung
276
277
277
278
278
278
Anhang 1: XAMPP
280
20.1
20.2
20.2.1
20.2.2
20.2.3
20.3
280
Was XAMPP ist
Installation
Windows
Mac OS X
Linux
Zusammenfassung
281
281
282
282
283
Anhang 2: Die Netbeans-IDE
284
21.1
21.2
21.3
21.4
21.5
21.5.1
21.5.2
21.5.3
21.5.4
21.5.5
21.6
21.6.1
21.6.2
21.6.3
21.6.4
21.6.5
21.6.6
21.7
21.7.1
284
Über Netbeans
Installation
Installation von Netbeans
Netbeans starten
Mit Netbeans arbeiten
Die Arbeitsfläche
Ein Projekt anlegen
Einen Ordner anlegen
Eine Datei anlegen und editieren
Eine Datei im Browser aufrufen
Besondere Funktionen
Größe von Elementen der Arbeitsfläche ändern
Navigator
Hervorhebung der Syntax/Fehleranzeige
Autovervollständigung
Einklappen von Code-Blöcken
TODOs schreiben
Alternativen zu Netbeans
Notepad++
284
285
286
286
286
286
288
289
291
291
291
291
292
292
293
293
294
295
Lösungen
298
Index
312
1.1 Für wen dieses Lernheft gedacht ist
17
Einführung
In dieser Lektion lernen Sie:
➤ die Ziele dieses Lernhefts kennen.
➤ was Sie an Vorwissen mitbringen sollten.
➤ was Sie technisch benötigen, um mit dem Lernheft arbeiten zu können.
1.1 Für wen dieses Lernheft gedacht ist
Dieses Lernheft ist für Sie gedacht, wenn Sie lernen wollen, mit PHP Webseiten zu entwickeln.
Vielleicht haben Sie schon einige Zeit Erfahrung im Bereich Webdesign gesammelt und wollen
nun die Möglichkeiten von PHP nutzen, Ihre Webseiten um Funktionen, wie Foren, Gästebücher, Artikelverwaltung oder auch Bildergalerien zu erweitern.
Sie haben wahrscheinlich schon einige Zeit fertige PHP-Skripte verwendet, die Sie zu Hauf im
Internet finden können. Zu so ziemlich jedem Themenbereich werden Dutzende von fertigen
Programmen angeboten.
Ebenso wahrscheinlich werden Sie bemerkt haben, dass diese in den seltensten Fällen genau
auf Ihre Situation passen. Das generierte Hauptmenü des CMS-Systems erlaubt nicht die von
Ihnen gewünschte Struktur, das Gästebuch bietet nur unzureichenden Schutz vor Spam oder
die Bildergalerie Ihrer Wahl lässt sich nur sehr schwer in das Layout Ihrer aktuellen Webseite
einbauen. Die meisten Probleme kriegen Sie zwar irgendwie gelöst, es bleibt aber das Gefühl,
dass der Schuh an einigen Stellen doch drückt.
In diesem Fall sind Sie der ideale Kandidat für dieses Lernheft. Hier werden Sie PHP »von der
Pike auf« lernen und sich so in die Lage versetzen, entweder fertige Programme viel leichter
anpassen zu können oder die Funktionen gleich selbst zu schreiben.
Da dieses Lernheft Ihnen die Grundlagen der PHP-Programmierung vermitteln soll, werde ich
natürlich nicht jedes Thema behandeln können, das Sie interessieren könnte. Ich habe mich
vielmehr bemüht, solide Grundlagen zu schaffen, so dass Sie am Ende dieses Skriptes selbständig weiterarbeiten und sich auch neue Funktionen von PHP selbst beibringen können.
1.2 Vorkenntnisse
Da dieses Lernheft als Einstieg in die PHP-Programmierung gedacht ist, sind die Voraussetzungen für das Durcharbeiten entsprechend gering:
➤ Sie sollten Erfahrung im Umgang mit Ihrem aktuellen Betriebssystem haben. Ich werde
Ihnen nicht erklären, wie Sie Dateien und Ordner anlegen, umbenennen oder löschen
können.
➤ Sie sollten Erfahrung im Umgang mit Texteditoren haben.
➤ Sie sollten mit dem Webbrowser Ihrer Wahl gut umgehen können und Erfahrung bei der
Recherche im Internet (Suchmaschinen) besitzen.
1
18
1 Einführung
➤ Sie sollten solide Grundkenntnisse in HTML haben. Da mit PHP HTML-Seiten erzeugt werden, ist dieses Wissen Voraussetzung für das erfolgreiche Arbeiten. Da wir uns nicht mit
Design beschäftigen1, müssen Sie keine tieferen Kenntnisse von CSS mitbringen.
➤ Sie benötigen keine Kenntnisse in anderen Programmiersprachen. Dieses Skript ist dafür
geschrieben, PHP als erste Programmiersprache zu lernen. Sollten Sie bereits andere Programmiersprachen beherrschen, wird Ihnen das Durcharbeiten des Lernhefts leichter fallen. Eventuell können Sie einige Abschnitte sogar nur überfliegen.
1.3 Aufbau des Lernhefts
1.3.1 Code-Listings im Text
Eventuell sind Sie schon erschrocken, als dieser Wälzer auf Ihrem Schreibtisch gelandet ist.
Keine Sorge, der Umfang liegt nicht an der ungeheuren Stoffmenge, die Sie jetzt lernen müssen.
Was dieses Skript so umfangreich macht, ist die Menge an Code-Beispielen, die etwa die Hälfte
des Umfangs ausmachen. Da Sie nicht durch theoretische Vorträge zu einem guten PHP-Programmierer werden, sondern durch das Lesen und Schreiben von hochwertigem Code, kann
es meiner Meinung nach von diesem nicht genug geben.
Alle Code-Listings finden Sie ebenfalls in digitaler Form in den Begleitmaterialien zu diesem
Lernheft (dieses erhalten Sie von Ihrem Trainingcenter). So müssen Sie nicht jedes Beispiel
komplett abtippen, sondern können an den bereits fertigen Beispielen experimentieren.
1.3.2 Testen Sie Ihr Wissen
Gegen Ende jeder Lektion finden Sie einen Abschnitt mit Fragen. Dort werden Ihnen zu den
wichtigen Themen dieser Lektion Fragen gestellt, um zu testen, wie viel Sie bereits von dem
Lehrstoff behalten und verstanden haben. Gehen Sie die Fragen gewissenhaft durch und
beginnen Sie erst mit den nächsten Lektionen, wenn Sie alle Fragen korrekt beantworten können.
Am Ende dieses Lernhefts gibt es zu allen Fragen, die am Ende jeder Lektion gestellt werden,
die Antworten. Machen Sie sich bitte zuerst Gedanken über die Fragen, bevor Sie die Antworten nachschlagen.
1.3.3 Aufgaben zur Selbstkontrolle
In diesem Abschnitt am Ende einer Lektion finden Sie kleinere Aufgaben, die überprüfen sollen, ob Sie den gelernten Stoff wirklich anwenden können. Sie sollten erst dann mit einer
neuen Lektion beginnen, wenn Sie alle Aufgaben gelöst und auch verstanden haben.
Die Lösungen zu den Übungsaufgaben jeder Lektion finden Sie ebenfalls im Begleitmaterial
zu diesem Lernheft.
1. Für das Aussehen einer Webseite sind die Designer zuständig, nicht wir Programmierer!
1.4 Formale Anforderungen
19
1.3.4 Optionale Aufgaben
Die optionalen Übungsaufgaben testen ebenfalls den Stoff der Lektion, aber die Aufgaben
sind umfassender und meistens auch schwieriger. Die Aufgaben verbinden auch oft den Stoff
dieser Lektion mit den Techniken der vorherigen Lektionen. Wenn Sie bisher wenig Erfahrung
in der Programmierung haben, werden Sie eventuell nicht alle optionalen Aufgaben selbständig lösen können.
Ist das der Fall, machen Sie sich keine Sorgen und gehen Sie zur nächsten Lektion über. Die
Pflichtaufgaben prüfen alle wichtigen Grundlagen ab. Kehren Sie, nachdem Sie das ganze
Skript durchgearbeitet haben, noch einmal zu den optionalen Aufgaben zurück. Sie werden
sehen, dass Sie diese nun lösen können.
1.4 Formale Anforderungen
1.4.1 Windows-PC
Sie benötigen natürlich einen funktionierenden PC, um programmieren zu können. PHP ist
an sich unabhängig von einem bestimmten Betriebssystem, theoretisch können Sie dieses
Lernheft also auch auf einem Mac OS X-Rechner oder einem Linux-Desktop durcharbeiten. Da
die Mehrheit der Benutzer aber unter einem Windows-System arbeitet, beziehen sich einige
Dinge (z.B. Pfade) auf ein solches System.
1.4.2 PHP-fähiger Webserver
Sie benötigen zum Ausführen Ihrer PHP-Skripte einen laufenden Webserver, der auch PHP
beherrscht. Die Auswahl in diesem Bereich ist ziemlich groß, angefangen von der manuellen
Installation, bis hin zu Komplettpaketen2, die sich mit ein paar Mausklicks installieren lassen.
Ich empfehle Ihnen unter Windows3 das Paket XAMPP, das viele Vorteile in sich vereinigt:
➤ Es ist eines der verbreitetsten Webserver/PHP-Pakete auf den Markt.
➤ Es ist komplett kostenlos.
➤ Es ist relativ einfach zu installieren.
Sollten Sie noch keinen laufenden Webserver haben, möchte ich Sie an dieser Stelle auf den
Anhang verweisen (siehe Lektion 20), in welchem ich eine Linksammlung für die unterschiedlichen Systeme zusammengetragen habe. In den folgenden Lektionen werde ich davon ausgehen, dass Ihnen mindestens eine Entwicklungsumgebung mit PHP 5.4 zur Verfügung steht.
Ich selbst nutze übrigens derzeit eine XAMPP-Installation mit PHP 5.5.
1.4.3 Code-Editor
Sie benötigen einen Texteditor, um PHP-Code zu schreiben. Im einfachsten Fall würde zu diesem Zweck auch der in Windows mitgelieferte Notepad ausreichen. Dieser unterstützt Sie
jedoch in keinster Weise beim Schreiben von PHP-Code.
2. Siehe auch: en.wikipedia.org/wiki/List_of_AMP_packages
3. Auch wenn es XAMPP ebenfalls für Mac OS X gibt, greifen Sie hier lieber zu MAMP.
20
1 Einführung
Es ist besser, wenn Sie einen Editor verwenden, der speziell auf Programmierung, besser noch
auf PHP ausgerichtet ist. Wenn Sie zum ersten Mal überhaupt programmieren, empfehle ich
Ihnen Notepad++, einen einfach zu bedienenden Editor für Windows, der trotzdem bereits
einige nützliche Funktionen enthält, die Ihnen das Leben mit PHP erleichtern werden.
Falls Sie schon Erfahrung mit anderen Programmiersprachen haben, also zum Beispiel schon
JavaScript programmiert haben, empfehle ich Ihnen ein etwas mächtigeres Programm, eine
sogenannte IDE (dt. integrierte Entwicklungsumgebung, engl. Integrated Development Environment). Diese ist zwar am Anfang wegen der enormen Funktionsvielfalt deutlich schwieriger in der Handhabung, wird Sie beim Schreiben von PHP-Code aber sehr unterstützen.
Der Installation und Anwendung unserer Beispiel-IDE Netbeans habe ich ein eigenes Kapitel
im Anhang (siehe Lektion 21) gewidmet. Sollte Sie keinen Gefallen an dieser IDE finden oder
es noch zu früh für diese sein, so habe ich anschließend noch ein paar Alternativen aufgelistet
(siehe Abschnitt 21.7).
Natürlich dürfen Sie auch jeden anderen Editor verwenden, mit dem Sie Programmcode
schreiben können.
1.4.4 Webbrowser
Zu guter Letzt brauchen Sie noch einen Webbrowser, mit dem Sie sich das Ergebnis Ihrer
erstellten PHP-Skripte ansehen können. Da es hier nicht um Design geht, können Sie jeden
beliebigen Browser verwenden.
Ich empfehle Ihnen den Firefox Webbrowser, da es für diesen einige nützliche Erweiterungen
gibt, die Ihnen bei der Entwicklung von PHP-Websites helfen. In diesem Lernheft gibt es einige
wenige Beispiele, die Sie nur mit diesem Browser nachvollziehen können, da hierfür spezielle
Firefox-Plugins notwendig sind.
1.5 Zusammenfassung
Sie sollten nun alle Vorbereitungen getroffen haben, die Sie für die Arbeit mit diesem Schulungsskript benötigen. Der Webserver sollte installiert sein und laufen, Sie sollten einen CodeEditor haben, mit dem Sie umgehen können und die angestaubten HTML-Kenntnisse haben
Sie auch etwas aufgefrischt. Idealerweise haben Sie sich auch schon die Codebeispiele aus den
Begleitmaterialen auf Ihren Rechner geladen, um jedes Beispiel im Skript auch sofort nachvollziehen zu können.
Wenn Sie das alles erledigt haben – prima, dann können wir ja loslegen…
2.1 Was sind dynamische Webseiten?
21
Dynamische Webseiten mit PHP
In dieser Lektion lernen Sie:
➤
➤
➤
➤
➤
was dynamische von statischen Webseiten unterscheidet.
welche Technologien es gibt, dynamische Webseiten umzusetzen.
dass PHP eine serverseitige Programmiersprache ist.
wie und warum PHP entstanden ist.
dass Ihr Webbrowser keine Ahnung hat, was PHP ist (und das auch gut so ist).
2.1 Was sind dynamische Webseiten?
Sie lesen dieses Schulungsskript, um die Programmierung von dynamischen Webseiten mit
PHP zu lernen. Dazu erst einmal herzlich willkommen! Doch was versteht man genau unter
einer dynamischen Webseite und was genau ist der Unterschied zu einer statischen Webseite?
2.1.1 Statische Webseiten
Als statisch bezeichnet man Webseiten, wenn sich ihr Inhalt nicht verändert. Sie haben sicherlich schon einige statische Webseiten erstellt, nämlich jedes Mal, wenn Sie HTML-Code
geschrieben haben. Egal, wie oft Sie eine statische Seite aufrufen, ihr Quellcode wird jedes Mal
gleich aussehen.
Wenn Sie möchten, dass sich am Inhalt einer statischen Seite etwas ändert, müssen Sie Ihren
Texteditor öffnen, die gewünschten Änderungen vornehmen und die neue Version auf den
Webserver hochladen.
Es wird oft fälschlich angenommen, dass dynamisch bedeutet, dass sich auf der Webseite
etwas bewegt, also eine Animation läuft, oder ein Menü plötzlich eingeblendet wird, wenn Sie
mit der Maus über einen bestimmten Bereich der Seite fahren. Auch diese Seiten sind jedoch
statisch, da sich ihr eigentlicher Inhalt (der HTML-Quellcode) nicht verändert.
2.1.2 Dynamische Webseiten
Dynamische Webseiten hingegen existieren gar nicht, bis Sie sie mit dem Webbrowser anfordern. Wenn Sie in Ihren Browser eine URL eingeben, wird die passende Seite zu exakt diesem
Zeitpunkt auf dem Webserver zusammengebaut und das fertige HTML zu Ihnen ausgeliefert.
Natürlich existieren auch vorher schon Teile des HTML-Codes, aber erst bei Bedarf werden die
Teile zu einer Seite vereint.
Das hat den Vorteil, dass Sie eine Seite bauen können, die Informationen verarbeitet, die erst
beim Seitenaufruf vorhanden sind. Stellen Sie sich vor, Ihre Webseite verfügt über ein Suchformular, mit dem die Besucher nach Produkten suchen können, die Sie dort verkaufen. Nehmen
wir an, ein Besucher gibt dort den Begriff Kaktus ein und schickt das Formular ab.
2
22
2 Dynamische Webseiten mit PHP
Auf der nächsten Seite erwartet er, alle Produkte zu sehen, die mit dem Wort Kaktus etwas zu
tun haben. Wenn Sie eine rein statische Seite hätten, müssten Sie für jeden Suchbegriff eine
komplette Seite mit allen Ergebnissen hinterlegen4.
Das hat zwei Nachteile: Zum einen müssen Sie jede Seite anpassen, wenn sich etwas an den
Produktinformationen ändert. Zum anderen, und das ist viel schlimmer, können Sie gar nicht
alle Begriffe vorhersehen, die jemand in dieses Formular eingeben wird. Sie müssten tausende
von Seiten erstellen und aktuell halten und würden trotzdem nicht jeden Fall abdecken.
Wenn Sie allerdings eine dynamische Seite verwenden, kann diese den Suchbergriff auswerten, alle passenden Produkte zusammensuchen (z.B. aus einer Datenbank) und die fertige
Webseite mit der Liste zum Absender zurückschicken. Die fertige Seite wird erst zu dem Zeitpunkt erstellt, als der Besucher das Formular abgesendet hat und das Beste ist, sie enthält alle
Produktinformationen in der aktuellsten Form.
2.1.3 Vorteile dynamischer Webseiten
Sie sehen also, dass Sie mit dynamischen Webseiten viele Probleme lösen können, die mit statischen nur schwer oder gar nicht zu lösen sind:
➤ Sie können auf Benutzereingaben reagieren und eine angepasste Version der gewünschten Seite ausliefern.
➤ Sie können dem Benutzer für ihn passende Informationen anzeigen. So hat jeder Besucher
eines Online-Shops zum Beispiel seinen eigenen Warenkorb, der sich auch noch ständig
ändert. So etwas ist ohne dynamische Webseiten nicht lösbar.
➤ Dynamische Webseiten aktualisieren sich von selbst. Da sie erst zum Zeitpunkt der Anforderung erzeugt werden, können sie auch alle Informationen verarbeiten, die erst in genau
diesem Moment vorliegen. So können sie zum Beispiel in einem Forum anzeigen, wie viele
andere Personen zu diesem Zeitpunkt ebenfalls diese Diskussion betrachten.
2.1.4 Nachteile dynamischer Webseiten
Wenn dynamische Webseiten so viel besser sind, warum gibt es dann überhaupt noch statische Seiten?
➤ Die Regeln, wie die dynamischen Seiten zusammengebaut werden sollen, müssen Sie erst
einmal aufstellen. Das ist wesentlich aufwändiger, als eine einfache statische Webseite zu
bauen. So müssen Sie festlegen, woher die Webseite die Informationen erhält, müssen
diese in HTML umbauen und dann ausliefern. Vielleicht haben Sie es schon geahnt, aber
eben diese Regeln legt man in einer Programmiersprache fest.
➤ Womit wir schon beim nächsten Punkt wären: Diese Programmiersprache müssen Sie erst
einmal lernen. HTML und CSS sind relativ einfach zu erlernen, bis Sie eine Programmiersprache beherrschen, benötigen Sie schon wesentlich mehr Aufwand und Geduld.
➤ Der Vorteil von dynamischen Seiten ist, dass Sie bei jedem Aufruf neu zusammengebaut
werden. Genau das ist aber auch ein großer Nachteil. Der Zusammenbau kostet sehr
große Serverkapazitäten. Je mehr Informationen zusammengetragen werden, desto aufwändiger wird es für einen Server.
4. Und selbst da habe ich geschummelt, denn ohne dynamische Inhalte kann Ihr Webserver gar nicht die richtige
statische Seite auswählen.
2.1 Was sind dynamische Webseiten?
23
Moderne Webserver sind in der Lage, pro Sekunde hunderte oder sogar tausende Anfragen
nach statischen HTML-Seiten zu beantworten, ohne "außer Puste" zu kommen. Eine typische
dynamische Webseite mit Datenbankanbindung wird kaum mehr als hundert Anfragen pro
Sekunde verarbeiten können, bei wirklich komplexen Seiten kann dies sogar auf unter zehn
Anfragen zurückgehen. Sie sehen, der Vorteil, Daten dynamisch verarbeiten zu können, hat
einen hohen Preis.
Sie sollten also nur dann dynamische Webseiten entwickeln, wenn dies technisch wirklich notwendig ist. Es gibt immer noch mehr als genug Webseiten, die als statische Seite prima funktionieren. Trotzdem werden Sie bei vielen Projekten um dynamische Inhalte nicht herumkommen.
2.1.5 Die Auslieferung von Webseiten
Sie haben im letzten Abschnitt gelernt, dass dynamische Webseiten durch vorher festgelegte
Regeln zum Zeitpunkt der Anforderung zusammengebaut werden. Diese Regeln legen Sie
durch eine Programmiersprache fest. Sehen wir uns die einzelnen Schritte doch ein wenig
genauer an, zuerst bei einer statischen Seite, um den Unterschied besser zu sehen:
Ausliefern von statischen Webseiten
Der Benutzer gibt in seinem Browswer die URL einer statischen Webseite ein. Der Browser
schickt eine Anfrage nach dieser Seite zum passenden Webserver.
Der Webserver sieht auf seiner Festplatte nach, ob die gewünschte Datei existiert. Wenn ja,
liest er sie ein und schickt sie an den Browser zurück.
Ausliefern von dynamischen Webseiten
Der Benutzer gibt in seinem Browser die URL einer dynamischen Webseite ein. Der Browser
schickt eine Anfrage nach dieser Seite zum passenden Webserver.
Der Webserver sieht auf seiner Festplatte nach, ob die gewünschte Datei existiert. Wenn ja,
liest er sie ein. Dann übergibt er sie einem weiteren Programm, dass den enthaltenen Programmcode auswertet, einem sogenannten Interpreter.
Dieser geht das Skript Zeile für Zeile durch und führt alle Anweisungen durch, die er dort
findet. Eventuell lädt er noch weiteren Programmcode aus anderen Dateien nach, wenn das
Skript dies verlangt und wertet diesen ebenfalls aus.
Danach baut er alle Ausgaben, die das Programm erzeugt hat, zu einer einzelnen Datei zusammen. In dieser ist von dem ursprünglichen Programmcode nichts mehr zu sehen. Es enthält
nur noch reines HTML, oder was auch immer diese Datei sonst ausliefern soll5. Dieses Ergebnis
gibt er dem Webserver zurück.
Der Webserver sieht sich das Ergebnis an und prüft, ob ein Fehler aufgetreten ist. Wenn nicht,
liefert er die fertig erstellte Seite an den Browser zurück. Dieser sieht nichts mehr von dem
ursprünglichen Programmcode auf dem Server, nur noch das erzeugte Ergebnis. Das ist auch
5. Sie können natürlich auch beliebige andere Inhalte dynamisch erzeugen, wie Bilder, PDFs, reinen Text, WordDokumente ...
24
2 Dynamische Webseiten mit PHP
gut so, denn ein Webbrowser hat keine Ahnung, was eine sogenannte serverseitige Programmiersprache (beispielsweise PHP, Python oder Ruby)6 überhaupt ist, geschweige denn, wie er
deren Code verarbeiten soll.
Sie sehen, eine dynamische Seite auszuliefern, ist für einen Webserver deutlich mehr Arbeit.
2.2 PHP
2.2.1 Stärken von PHP
Serverseitige Programmiersprachen gibt es viele und beinahe alle lassen sich mehr oder weniger gut für die Entwicklung von Webseiten einsetzen. Bei all der Auswahl, warum sollten Sie
ausgerechnet PHP lernen, um Webentwicklung betreiben zu können? Dafür gibt es viele gute
Gründe:
➤ PHP ist die verbreitetste Skriptsprache im Web. Für sehr wenig Geld können Sie heutzutage einen voll ausgestatteten Webspace inklusive PHP und Datenbank mieten. Sie werden also niemals Probleme bei der Suche nach einem Provider haben, was man bei den
anderen Websprachen, gerade bei begrenztem Budget, nicht sagen kann.
➤ PHP ist frei und kostenlos verfügbar. Auch wenn Sie eine kommerzielle Webseite betreiben, müssen Sie PHP nicht kaufen.
➤ PHP läuft auf nahezu jedem Betriebssystem. Egal, was Sie für einen Rechner zu Hause stehen haben, die Chancen, dass PHP darauf läuft, sind ziemlich groß. Beachten Sie dennoch,
dass die Mehrzahl aller produktiven PHP-Webserver im Internet auf Unix/Linux-Servern
laufen.
➤ Es gibt eine große, aktive Community rund um PHP. Sie werden immer jemanden finden,
den Sie bei Problemen fragen können oder einen Partner, wenn ein Programmierauftrag
für eine Person zu groß ist.
➤ Mit PHP können Sie sehr schnell Webseiten entwickeln. Die Einfachheit von PHP, die es
sich seit den Anfängen zum Glück bewahrt hat, ermöglicht es Ihnen, mit relativ wenig Aufwand schon recht ansprechende Ergebnisse zu erzielen. Dank vieler existierender Zusatzmodule und Bibliotheken gibt es auch komplexere Funktionen schon fertig zum Einbau in
Ihre Webseite.
➤ PHP wurde speziell für das Web entwickelt. Mit keiner anderen Sprache können Sie so
schnell und einfach loslegen, ohne erst etwas stundenlang installieren und konfigurieren
zu müssen.
➤ Nicht zu vergessen - PHP ist sehr einfach zu erlernen. Im Vergleich mit Sprachen wie beispielsweise Java werden Sie mit PHP schon die ersten Webseiten entwickeln, während Ihre
Java-Kollegen noch beim Lernen der theoretischen Grundlagen sind.
2.2.2 Geschichte von PHP
PHP war die erste Programmiersprache, die speziell für die Programmierung dynamischer
Webseiten entwickelt wurde. Inzwischen können Sie mit sehr vielen Programmiersprachen,
elegant Webentwicklung betreiben, aber PHP ist die einzige dieser Sprachen, die von Anfang
an bis heute speziell auf die Web-Programmierung ausgelegt ist.
6. Das Gegenteil von serverseitigen Programmiersprachen bilden clientseitige Sprachen, wie beispielsweise
JavaScript.
2.2 PHP
25
PHP/FI
Im Jahr 1995 entwickelte der Programmierer Rasmus Lerdorf die sogenannten Personal Home
Page Tools, kurz PHP. Es handelte sich um eine Sammlung von Perl-Skripten, die ihm die Verwaltung seiner Webseite erleichtern sollten.
Als das Projekt umfangreicher wurde und es immer neue Anforderungen gab, schrieb Rasmus
eine neue, erweiterte Fassung in der Programmiersprache C, in der PHP auch heute noch weiterentwickelt wird. Da er das Projekt unter anderem um einen sogenannten Formular-Interpreter erweitert hat, der die automatische Verwaltung von HTML-Formularen ermöglichte,
hieß das Projekt nun PHP/FI. Zu diesem Zeitpunkt entschied sich Rasmus auch, sein Projekt zu
veröffentlichen und es kostenlos zur Verfügung zu stellen.
Als er 1997 die zweite Version von PHP/FI veröffentlichte, erfreute sich das Projekt bereits einer
für damalige Verhältnisse ziemlich großen Beliebtheit, das sich mit der neuen Version nur
noch verstärkte. Version 2 war weltweit etwa auf 50.000 Domains installiert.
PHP 3
PHP 3 war die erste Version, die dem heutigen PHP ähnlich ist. 1997 begannen Andi Gutmans
und Zeev Suraski eine alternative Version von PHP/FI zu entwicklen, da das Original deutliche
Schwächen hatte. Rasmus erkannte das Potential des Konkurrenzprojekts und entschloss sich
zur Zusammenarbeit mit den beiden Programmierern.
Im Jahr 1998 wurde die dritte Version freigegeben und zu dieser Gelegenheit gleich umgetauft. Von nun an hieß es nicht mehr PHP/FI, sondern nur noch PHP. Die Abkürzung steht nun
für PHP: Hypertext Preprocessor.
Diese Version war zu ihren besten Zeiten auf ca. 10% aller Webserver im Internet installiert. Sie
bot damals schon viele der Funktionen, die PHP damals wie heute so beliebt und erfolgreich
machen.
PHP 4
Zwei Jahre nach Version 3, also im Jahr 2000, wurde PHP 4 veröffentlicht. Mit dieser Version
gelang PHP endgültig der Durchbruch als eine der beliebtesten serverseitigen Websprachen.
Gerade kleinere und mittlere Projekte wurden bevorzugt mit PHP umgesetzt, wobei im
Enterprise-Bereich immer noch fast ausschließlich mit Java gearbeitet wurde.
Viele der bekanntesten PHP-Projekte, wie beispielsweise die Content-Management-Systeme
Drupal und TYPO3, sind zu Zeiten von PHP 4 entstanden.
PHP 5
Im Juli 2004 wurde PHP 5 veröffentlicht. Viele sagen, dass PHP mit dieser Version endlich
erwachsen geworden ist. Viele grundlegende Funktionen von PHP, wie die objektorientierte
Programmierung, Verarbeitung von XML-Daten, der Zugriff auf Datenbanken oder die generelle Ausführungsgeschwindigkeit wurden massiv überarbeitet oder komplett neu entwickelt.
Mit dieser Version ist PHP auch endlich im Enterprise-Bereich angekommen. Gerade durch die
wesentlich verbesserte Unterstützung der objektorientierten Programmierung und die Ver-
26
2 Dynamische Webseiten mit PHP
einheitlichung vieler wichtiger Erweiterungen wurde PHP auch für große Firmen immer interessanter.
PHP 5 hatte zu Anfang einige Startschwierigkeiten, weil Version 4 unglaublich beliebt war. Fast
niemand sah die Notwendigkeit, auf eine neue Version zu wechseln, weswegen viele ISPs7 die
neue Version überhaupt nicht installierten. Deswegen wurde Mitte 2007 das offizielle Ende
von PHP 4 beschlossen. Die Entwickler von PHP haben die Entwicklung von Version 4 zum
Ende des Jahres 2007 praktisch eingestellt. Bis August 2008 gab es noch Sicherheitsupdates,
aber von diesem Zeitpunkt an gab es keinerlei Unterstützung mehr für PHP Versionen vor 5.2.
Gerade durch diese Maßnahme hat sich damals die Verbreitung von PHP 5 deutlich verbessert.
PHP 5.5
Am 20.06.2013 erschien PHP in der Version 5.5. Seit dieser Version wird erneut verstärkt Druck
auf die bisherigen Installationen gemacht, da die im Juni 2009 erschienene und derzeit am
weitesten verbreitete Version 5.38 gleichzeitig in die EOL-Phase (engl. end of life, dt. Ende des
Lebens) kam, in der sie lediglich noch ein weiteres Jahr mit Sicherheitsupdates versorgt wird.
2.3 Zusammenfassung
In dieser Lektion haben Sie gelernt, was eine dynamische Webseite ist und deren Vorteile, aber
auch Nachteile kennengelernt. Sie wissen ebenfalls, wie PHP entstanden ist und warum es
eine gute Wahl ist, gerade diese Sprache zu lernen.
Vor allem aber haben Sie begriffen, dass dynamische Webseiten auf dem Webserver verarbeitet werden und nur das fertige Ergebnis beim Webbrowser ankommt.
Testen Sie Ihr Wissen
1.
2.
3.
4.
Was versteht man unter dynamischen Webseiten?
Nennen Sie zwei Vor- und Nachteile von dynamischen Webseiten.
Was bedeutet die Abkürzung PHP?
Wie nennt man das Programm, das den Programmcode innerhalb der Webseite auswertet?
7. Internet Service Provider. Das sind die Firmen, bei denen Sie Webspace mieten.
8. Siehe: w3techs.com/blog/entry/php_version_5_3_is_now_the_most_used_version_just_ahead_of_5_2
3.1 Das Problem
27
HTML und PHP
In dieser Lektion lernen Sie:
➤
➤
➤
➤
wie Sie PHP in Ihre HTML-Dateien einbetten können.
was Sie dabei beachten müssen.
die sechs Fehler kennen, die jeder PHP-Anfänger macht.
die echo -Anweisung kennen.
3.1 Das Problem
Wenn Sie die letzte Lektion durchgelesen haben, wissen Sie zwar, wie eine dynamische Webseite prinzipiell funktioniert, haben aber noch keine Ahnung davon, wie Sie konkret eine PHPSeite bauen sollen. Dafür wird es langsam aber auch wirklich Zeit, daher lassen Sie uns auch
gleich loslegen9!
3.2 PHP in eine HTML-Seite einbetten
3.2.1 Eine statische HTML-Seite erstellen
Öffnen Sie Ihren bevorzugten Code-Editor und erstellen Sie folgendes HTML-Dokument. Speichern Sie es im document root Ihres Webservers im Unterordner phpschulung unter dem
Namen erste_seite.php ab. Wenn Sie beispielsweise eine Standardinstallation von XAMPP
(siehe Lektion 20) durchgeführt haben, ist Ihr document root das Verzeichnis c:\xampp\
htdocs.10 Vergessen Sie nicht die korrekte Dateiendung .php zu benutzen, diese ist sehr wichtig.
Beispiel
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hallo Welt</title>
</head>
<body>
9. Sie haben inzwischen doch den Webserver und den Code-Editor installiert, wie es in Lektion 1 verlangt war,
oder?
10. Bei MAMP unter Mac OS X ist der Standard /Applications/MAMP/htdocs und auf Linux-Servern finden Sie dieses
Verzeichnis oft unter /var/www.
3
28
3 HTML und PHP
10
Hallo Welt
11 </body>
12
13 </html>
Listing 3.1 erste_seite.php (Version 1)
Rufen Sie die Datei nun in Ihrem Browser unter der URL localhost/phpschulung/
erste_seite.php auf.
So weit sollte das für Sie nichts Neues gewesen sein. Das Besondere an PHP ist allerdings, dass
Sie es, ähnlich wie JavaScript, direkt in Ihre HTML-Dokumente einfügen können.
3.2.2 PHP-Code einfügen
Um dem Webserver zu zeigen, wo PHP-Code in HTML-Dokumenten steht, wurde ein spezieller
Tag entwickelt, der jeden PHP-Code umgeben muss. Kein PHP-Code darf außerhalb dieser
Begrenzung stehen, oder der Webserver hält es für normales HTML und zeigt es einfach an.
Beispiel
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?php
<?php echo "Hallo Welt"; ?>
?></title>
</head>
<body>
<?php echo "Hallo Welt"; ?>
</body>
</html>
Listing 3.2 erste_seite.php (Version 2)
Was hat sich hier geändert? Wenn Sie sich die geänderte Seite in Ihren Browser ansehen, werden Sie keinen Unterschied feststellen. Die Seite hat immer noch den Titel Hallo Welt und
gibt im Body -Tag den selben Text noch einmal aus.
Der Unterschied ist, dass der Text Hallo Welt nun mittels PHP in die Seite geschrieben
wurde. Wann immer Sie PHP-Code einfügen wollen, müssen Sie zuerst <?php schreiben, um
zu zeigen, dass nun PHP-Code folgt. Wenn Sie mit dem PHP-Block fertig sind, zeigen Sie das
durch den schließenden Tag ?> . Um die Bedeutung des eigentlichen PHP-Codes müssen Sie
sich im Moment noch nicht kümmern.11
Jeder PHP-Code muss zwischen <?php und dem schließenden Tag ?> stehen. Ansonsten
wird er nicht ausgewertet, sondern unverändert angezeigt. Dies sind die sogenannten
PHP-Tags, analog zu den bekannten HTML-Tags.
11. Er sorgt dafür, dass der Text in den Anführungszeichen in der Webseite angezeigt wird.
3.3 Die sechs berühmten Fehler
29
3.2.3 PHP erzeugt HTML
Wenn Sie sich den Quelltext der HTML-Seite anzeigen lassen (z.B. im Firefox-Browser Strg+U),
werden Sie feststellen, dass dort nichts mehr von dem PHP-Code zu sehen ist. Bei genauerer
Betrachtung werden Sie sogar erkennen, dass die erzeugte Seite mit der ersten, statischen Version aus Abschnitt 3.2.1 identisch ist12.
Exakt das ist damit gemeint, wenn man von PHP als einer serverseitigen Programmiersprache
spricht. Der Webserver hat die PHP-Datei geöffnet, den PHP-Code darin ausgewertet und was
als Ergebnis übrig blieb, an den Browser gesendet. Der Browser sieht nichts mehr von den
ursprünglichen PHP-Tags und das ist auch gut so, denn Webbrowser haben keine Ahnung, was
PHP überhaupt ist!
JavaScript wird vom Webbrowser ausgewertet. Also ist JavaScript-Code für den Browser
sichtbar. PHP wird schon auf dem Webserver ausgewertet, lange bevor der Browser die
Seite erhält. Also wird ein Webbrowser niemals PHP-Code sehen.
3.3 Die sechs berühmten Fehler
Wenn Sie den Beispielen aus dem vorherigen Abschnitt problemlos folgen konnten, gratulieren Sie sich. Sie haben die Beispiele fehlerfrei abgetippt. Wenn Sie hingegen seltsame Meldungen oder schlimmer gar nichts in Ihrem Browser gesehen haben, sind Sie wahrscheinlich in
einen der sechs Fehler gelaufen, die jeder PHP-Anfänger macht. Sollte es Sie erwischt haben,
grämen Sie sich nicht. Das bedeutet nur, dass Sie es schon hinter sich haben! Jeder PHP-Anfänger macht diese Fehler!
3.3.1 PHP-Code im HTML-Bereich schreiben
Einer der beliebtesten Fehler ist es, PHP-Code außerhalb des markierten Bereiches, also von
<?php ?> zu schreiben. Das bedeutet, dass dieser Code für HTML gehalten und einfach an
den Browser geschickt wird.
Beispiel
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?php
<?php echo "Hallo Welt"; ?>
?></title>
</head>
<body>
echo "Hallo Welt";
</body>
</html>
Listing 3.3 php_im_html.php
12. Eventuell sind nicht alle Zeilenumbrüche da, wo Sie es erwarten. Zum Beispiel könnte der schließende bodyTag hinter das "Hallo Welt" gerutscht sein.
30
3 HTML und PHP
Die erste echo -Anweisung in Zeile 6 wird korrekt ausgewertet. Im Browser steht an dieser
Stelle nur noch Hallo Welt . In Zeile 10 jedoch haben wir vergessen, den PHP-Code in den
passenden Tags zu verbergen. Das Ergebnis ist, dass der Browser an dieser Stelle das komplette echo "Hallo Welt"; ausgibt.
3.3.2 HTML-Code im PHP-Bereich schreiben
Das Gegenteil des letzten Fehlers ist genauso verhängnisvoll. Wenn Sie HTML-Tags in den PHPBereich schreiben, versucht der PHP-Interpreter, aus den für ihn seltsamen Zeichen schlau zu
werden und gibt schließlich mit einer Fehlermeldung auf.
Beispiel
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<?php <meta charset="utf-8" /> ?>
<title><?php
<?php echo "Hallo Welt"; ?>
?></title>
</head>
<body>
<?php echo "Hallo Welt"; ?>
</body>
</html>
Listing 3.4 html_im_php.php
Jetzt liegt der Fehler in Zeile 5. Dort wird zwar ein PHP-Tag geöffnet, aber sein Inhalt besteht
aus purem HTML. Bestraft wird dieses Verhalten von PHP mit einer hässlichen Fehlermeldung.
Wenn Sie die Seite aufrufen, sehen Sie folgenden Text:
Parse error: syntax error, unexpected '<' in (...)\html_im_php.php on line 5
Genauso wenig, wie der Browser Ahnung von PHP hat, weiß der PHP-Interpreter etwas mit
den HTML-Formatierungen anzufangen. Dementsprechend sagt er uns auch, dass er mit dem
unerwarteten (unexpected) Zeichen '<' nichts anfangen kann.
3.3.3 Die PHP-Datei hat die Endung .html
Selbst wenn Sie das ursprüngliche Beispiel fehlerfrei abgetippt haben, kann es dennoch sein,
dass Sie den kompletten Code mit allen PHP-Tags im Browser sehen. Das kann mehrere
Gründe haben. Der häufigste ist jedoch, dass Sie die Datei mit der Endung .html versehen
haben.
Wenn eine Datei, die PHP-Code enthält, nicht auf .php endet, weiß der Webserver für
gewöhnlich nicht, dass sich PHP darin befindet und schickt die Datei unverändert an den
Browser13.
13. Welche Dateiendungen der Webserver als PHP-Dateien ansieht, kann natürlich konfiguriert werden. Häufig
funktionieren neben .php auch versionsspezifische Endungen wie beispielsweise .php55. So lange Sie keinen
triftigen Grund haben, etwas anderes zu tun, sollten Sie immer die Endung .php verwenden, da diese immer
funktioniert und Sie auf die Konfiguration bei Ihrem Webhoster oft keinen Einfluss haben.
3.3 Die sechs berühmten Fehler
31
3.3.4 Die PHP-Datei liegt nicht im Zugriff des Webservers
Ein Webserver darf nur auf Dateien in einem vorher festgelegten Verzeichnis, genannt document root, zugreifen. Wenn Sie Ihre PHP-Dateien außerhalb dieses Verzeichnisses speichern,
wird der Webserver sie nicht finden und einen Fehler melden.
Dies ist ein, gerade von PHP-Anfängern, häufig gemachter Fehler, da die meisten WindowsAnwender es beispielsweise gewohnt sind, Dateien in Eigene Dateien oder auf dem Desktop
abzulegen, wo der Webserver sie nicht finden kann.
Wenn Sie häufiger in diese Falle tappen, legen Sie sich eine Verknüpfung zum document
root auf Ihrem Desktop an. So sieht es aus, als würden Sie die Dateien direkt in einem Ordner auf dem Desktop ablegen und es funktioniert trotzdem.
3.3.5 Die PHP-Datei wurde direkt im Browser geöffnet
Kommen wir zum krönenden Abschluss zu dem wahrscheinlich häufigsten Anfängerfehler.
Anstatt die PHP-Datei über den Webserver aufzurufen, haben Sie die Datei direkt vom Dateisystem aus geöffnet. Das bedeutet, Ihr Webbrowser erhält direkt den PHP-Code und hat natürlich keine Ahnung, was er damit anfangen soll. Moderne Browser blenden alles zwischen
<?php ... ?> einfach aus, aber gerade ältere Browser haben den Inhalt direkt angezeigt.
Sie merken am besten an der URL-Zeile im Browser, dass Sie die Datei direkt geöffnet haben.
Wenn Sie dort zu Anfang nicht wie gewohnt http:// sondern file:// lesen, sind Sie in die Falle
getappt. Gerade am Anfang Ihrer PHP-Karriere sollte der erste Blick der URL gelten, wenn
etwas nicht so funktioniert, wie Sie es erwarten.
3.3.6 Die echo-Anweisung fehlt
In den vorherigen Abschnitten haben Sie in die PHP-Tags das Wort echo , gefolgt von Text
in Anführungszeichen geschrieben. Das Ergebnis war, dass das Wort echo und die Anführungszeichen verschwunden sind und nur der Text selbst im Browser angekommen ist (siehe
Abschnitt 3.2.3).
Dieses Wort echo ist für PHP eine Anweisung und veranlasst den PHP-Interpreter, den folgenden Text auszugeben. Im Gegensatz zu HTML, wo Sie jegliche Ausgabe einfach in die Datei
schreiben, müssen Sie PHP ausdrücklich sagen, wenn Sie etwas auf dem Bildschirm ausgeben
wollen. Für diesen Zweck gibt es in PHP eine ganze Reihe von Anweisungen, für den Anfang
soll uns echo allerdings genügen, da Sie mit dieser Anweisung fast jede Situation meistern
können.
Beispiel
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?php
<?php echo "Hallo Welt"; ?>
?></title>
</head>
<body>
32
3 HTML und PHP
10
<?php "Hallo Welt"; ?>
11 </body>
12
13 </html>
Listing 3.5 echo_fehlt.php
Fehlt die echo -Anweisung, so hat der PHP-Interpreter keine Ahnung, was er mit dem Text in
Anführungszeichen anfangen soll und dieser verfällt nach Ausführung von Zeile 10 ungenutzt.
In diesem Fall erhalten wir somit eine leere Seite, da das body -Tag keinen weiteren Inhalt hat.
3.4 Mehrzeilige PHP-Anweisungen
3.4.1 Das Semikolon
Bisher haben Sie in jedem Beispiel am Ende einer PHP-Anweisung ein Semikolon, zu Deutsch
Strichpunkt gesehen. Sollten Sie eines vergessen haben, werden Sie keinen Unterschied
bemerkt haben. Der PHP-Code hat weiterhin genau dasselbe getan.
Wofür brauchen wir dieses Semikolon dann überhaupt? Es ist für die Trennung einzelner PHPAnweisungen zuständig. Wenn Sie also mehr als eine Anweisung für PHP haben, müssen Sie
dazwischen ein Semikolon setzen.
Beispiel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?php
<?php echo "Hallo Welt"; ?>
?></title>
</head>
<body>
<?php echo "Hallo Welt "; echo "und willkommen beim PHP-Seminar!" ?>
Das ist normales HTML.
<?php echo "Das funktioniert noch." echo "das nicht mehr!" ?>
</body>
</html>
Listing 3.6 mehrere_php_anweisungen.php
Der Unterschied zwischen den Zeilen 10 und 12 besteht darin, dass in Zeile 12 vor dem zweiten echo kein Semikolon steht. PHP denkt also, hier stünde nur eine einzige lange Anweisung, anstatt zwei. Da eine Anweisung mit zwei echo -Anweisungen für PHP kein gültiger
Code ist, wird hier ein Fehler erzeugt:
Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';'
in (...)\mehrere_php_anweisungen.php on line 12
PHP sagt uns hier, dass es in Zeile 12 entweder ein Komma oder ein Semikolon erwartet14, also
tragen Sie das fehlende Semikolon nach und der Code wird funktionieren.
14. Das mit dem Komma besprechen wir noch.
3.5 Stilfragen
33
3.4.2 Mehrzeilige PHP-Anweisungen
Auch wenn es funktioniert, mehrere PHP-Anweisungen hintereinander zu schreiben, so ist es
nicht wirklich übersichtlich. Vergleichen Sie im folgenden Listing die beiden PHP-Blöcke:
Beispiel
1 <!DOCTYPE html>
2 <html>
3
4 <head>
5
<meta charset="utf-8" />
6
<title>Hallo Welt</title>
7 </head>
8
9 <body>
10
<?php echo "Hallo Welt "; echo "und willkommen beim PHP-Seminar! ";
echo "Langsam wir es unübersichtlich. "; echo "Jetzt ist aber wirklich
Schluss!" ?>
11
<br />
12
<?php
13
echo "So sieht das schon viel besser aus. ";
14
echo "Wenn Sie jede Anweisung auf eine Zeile schreiben, ";
15
echo "behalten Sie leichter den Überblick. ";
16
echo "Trotzdem müssen Sie immer noch ";
17
echo "ein Semikolon nach jeder Anweisung schreiben, ";
18
echo "da PHP eine neue Zeile nicht als das Ende ";
19
echo "einer Anweisung sieht.";
20
?>
21 </body>
22
23 </html>
Listing 3.7 mehrzeiliges_php.php
Der erste Abschnitt in Zeile 10 ist, obwohl ihn PHP versteht, nicht sehr übersichtlich. Sie müssen gezielt nach den Semikolons suchen, um den Beginn einer neuen Anweisung zu sehen.
Der zweite Abschnitt in den Zeilen 12 bis 20 bringt jede Anweisung auf eine eigene Zeile, was
es Ihnen leichter macht, den Code zu verstehen. Für PHP macht es allerdings keinen Unterschied.
Schreiben Sie jede Anweisung auf eine eigene Zeile, um die Lesbarkeit des Codes zu erhöhen. Wenn Sie mehrzeilige PHP-Anweisungen haben, schreiben Sie den öffnenden und
den schließenden PHP-Tag auf jeweils eigene Zeilen. Der PHP-Code wird üblicherweise
um eine Ebene eingerückt (siehe Abschnitt 3.5.2).
3.5 Stilfragen
3.5.1 Saubere Trennung von HTML und PHP
In diesem Abschnitt werden Sie eines der wenigen Code-Beispiele in diesem Schulungsskript
sehen, das eindeutig schlechten Stil darstellt. Ich bemühe mich natürlich, Ihnen nur Dinge beizubringen, die Sie später auch so benutzen sollten. Manchmal müssen Sie aber auch Beispiele
sehen, wie es nicht gemacht werden sollte. Hier ist das erste:
34
3 HTML und PHP
Beispiel
1 <!DOCTYPE html>
2 <html>
3
4 <head>
5
<meta charset="utf-8" />
6
<title>Hallo Welt</title>
7 </head>
8
9 <body>
10
<?php
11
echo '<form action="test.php" method="post">';
12
echo '<input type="text" name="vorname" id="vorname" value="Arthur"
/>';
13
echo '<input type="text" name="nachname" id="nachname" value="Dent"
/>';
14
echo '<input type="submit" value="abschicken" />';
15
echo '</form>';
16
?>
17 </body>
18
19 </html>
Listing 3.8 stillos.php
Vergleichen Sie das Beipiel eben mit dem folgenden, das exakt die gleiche Ausgabe erzeugt:
Beispiel
1 <!DOCTYPE html>
2 <html>
3
4 <head>
5
<meta charset="utf-8" />
6
<title>Hallo Welt</title>
7 </head>
8
9 <body>
10
<form action="test.php" method="post">
11
<input type="text" name="vorname" id="vorname" value="<?php
<?php echo
'Arthur' ?>
?>" />
12
<input type="text" name="nachname" id="nachname" value="<?php
<?php echo
'Dent' ?>
?>" />
13
<input type="submit" value="abschicken" />
14
</form>
15 </body>
16
17 </html>
Listing 3.9 stilvoll.php
Im ersten Listing wird ein komplettes HTML-Formular mit mehreren echo -Anweisungen ausgegeben. Das ist prinzipiell möglich, da echo jede Art von Inhalten ausgeben kann, auch
HTML-Formatierungen. Diese Herangehensweise hat allerdings mehrere Nachteile, von denen
einige bereits jetzt offensichtlich sind:
➤ Da Sie wahrscheinlich (hoffentlich) mit einem Editor arbeiten, der Syntax-Highlighting
beherrscht, wird auch der HTML-Code farblich hervorgehoben, z.B. werden Attribute und
ihre Werte anders dargestellt. Wenn Sie einen HTML-Tag in eine echo -Anweisung verpacken, verlieren Sie diesen Vorteil. Alles wird in einer Farbe dargestellt, was das Auffinden
von Fehlern erschwert.
➤ Sie müssen alle Texte, die Sie mit echo ausgeben, in Anführungszeichen einschließen. Ich
werde später noch im Detail darauf eingehen, aber Sie dürfen die selben Anführungszei-
3.5 Stilfragen
35
chen nicht mehr im Text verwenden, die Sie zum Einschließen verwendet haben. Gerade
bei HTML, wo viel mit doppelten Anführungszeichen gearbeitet wird, stellt dies oft ein
Problem dar. In unserem Beispiel wäre folgendes also nicht erlaubt: <?php echo
'Arthur 's '; ?>
➤ Jedes Zeichen, das Sie mit echo ausgeben, statt direkt im HTML, sorgt dafür, dass die
Seite langsamer lädt, da PHP mehr Daten verarbeiten muss. Der Unterschied mag bei kleinen Seiten nicht ins Gewicht fallen, aber auch dort gibt es keinen Grund, den Server unnötig zu belasten.
➤ Es ist schlicht und ergreifend hässlich!
Wenn Sie sich fertige PHP-Programme aus dem Internet herunterladen, werden Sie gerade bei
älteren Projekten noch viel Code sehen, der wie die erste Version aussieht. Inzwischen ist man
in der PHP-Community allerdings komplett von dieser Vorgehensweise abgerückt. Viele Projekte jüngeren Datums akzeptieren gar keinen Code mehr, der irgendwelche HTML-Formatierungen mit PHP-Anweisungen ausgibt. Sie werden später noch wesentlich mehr zu diesem
Thema hören, also gewöhnen Sie es sich am besten gar nicht erst falsch an:
Versuchen Sie, wo immer möglich, HTML-Code und PHP-Code getrennt zu halten. HTMLTags mit PHP-Anweisungen auszugeben, ist extrem schlechter Stil und behindert die
Übersichtlichkeit Ihres Codes.
3.5.2 Einrückungen
Ein zweiter Punkt beim Thema Stil sind Code-Einrückungen. Vergleichen Sie die beiden Beispiele:
Beispiel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hallo Welt</title>
</head>
<body>
<?php
echo "So sieht das schon viel besser aus. ";
echo "Wenn Sie jede Anweisung auf eine Zeile schreiben, ";
echo "behalten Sie leichter den Überblick. ";
echo "Trotzdem müssen Sie immer noch ";
echo "ein Semikolon nach jeder Anweisung schreiben, ";
echo "da PHP eine neue Zeile nicht als das Ende ";
echo "einer Anweisung sieht.";
?>
</body>
</html>
Listing 3.10 schlechter_stil.php
Herunterladen