jan teriete grundlagen der php7-programmierung · php-datentypen 62 das problem 62 die funktion...
TRANSCRIPT
Jan Teriete
Grundlagen der PHP7-ProgrammierungEin Webmasters Press Lernbuch
Version 8.1.1 vom 16.07.2020
Autorisiertes Curriculum für das Webmasters Europe Ausbildungs- und Zertifizierungsprogramm
— www.webmasters-europe.org —
Inhaltsverzeichnis17Einführung
17Für wen diese Class gedacht ist
17Vorkenntnisse
18Aufbau der Lektionen
18Code-Listings im Text
18»Testen Sie Ihr Wissen!«
18»Übungen«
18»Optionale Übungen«
19Formale Anforderungen
19Systemanforderungen
19PHP-fähiger Webserver
19Code-Editor
20Webbrowser
20Zusammenfassung
21Dynamische Webseiten mit PHP
21Was sind dynamische Webseiten?
21Statische Webseiten
21Dynamische Webseiten
22Vorteile dynamischer Webseiten
22Nachteile dynamischer Webseiten
22Die Auslieferung von Webseiten
23PHP
23Stärken von PHP
24Geschichte von PHP
27Zusammenfassung
28HTML und PHP
28Das Problem
28PHP in eine HTML-Seite einbetten
28Eine statische HTML-Seite erstellen
28PHP-Code einfügen
29PHP erzeugt HTML
30Die sieben berühmten Fehler
30PHP-Code im HTML-Bereich schreiben
30HTML-Code im PHP-Bereich schreiben
31Die PHP-Datei hat die Endung .html
31Die PHP-Datei liegt nicht im Zugriff des Webservers
31Die PHP-Datei wurde direkt im Browser geöffnet
32Die echo-Anweisung fehlt
32Das Leerzeichen wurde vergessen
33Mehrzeilige PHP-Anweisungen
33Das Semikolon
33Mehrzeilige PHP-Anweisungen
34Stilfragen
34Saubere Trennung von HTML und PHP
36Einrückungen
37Zusammenfassung
1
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
2
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
3
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.3.7
3.4
3.4.1
3.4.2
3.5
3.5.1
3.5.2
3.6
37Testen Sie Ihr Wissen!
37Übungen
38Optionale Übungen
39Variablen und Operatoren
39Das Problem
39Variablen
39Grundlagen
39Der Zuweisungsoperator
40Zahlen
40Zeichenketten
40Der null-Wert
41Variableninhalte auslesen
41Benennung von Variablen
43Kommentare in PHP einbetten
43Grundlagen
43Einzeilige Kommentare
43Mehrzeilige Kommentare
44Operatoren
44Grundlagen
44Rechenoperatoren
46Weitere Rechenoperatoren
46Der Verknüpfungs-Operator
47Kombinierte Operatoren
48Inkrement und Dekrement-Operatoren
49Zusammenfassung
49Testen Sie Ihr Wissen!
50Übungen
50Optionale Übungen
52PHP-Funktionen
52Das Problem
52Aufgabe von Funktionen
52Funktionen aufrufen
52Grundlagen
53Fehlerhafter Funktionsaufruf
53Fehlerausgabe aktivieren
54Parameter an Funktionen übergeben
54Rückgabewerte von Funktionen
54Grundlagen
55Rückgabewerte ausgeben
55Rückgabewerte in Variablen speichern
55Funktionen mit mehreren Parametern
56Die PHP-Funktionsreferenz
56Grundlagen
57Suchen und browsen auf php.net
57Funktionsdefinitionen lesen
60Zusammenfassung
60Testen Sie Ihr Wissen!
61Übungen
61Optionale Übungen
3.7
3.8
3.9
4
4.1
4.2
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
4.2.7
4.3
4.3.1
4.3.2
4.3.3
4.4
4.4.1
4.4.2
4.4.3
4.4.4
4.4.5
4.4.6
4.5
4.6
4.7
4.8
5
5.1
5.2
5.3
5.3.1
5.3.2
5.3.3
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
5.9
5.10
5.11
62PHP-Datentypen
62Das Problem
62Die Funktion gettype()
62NULL
63Boolean
63Grundlagen
63isset() und unset()
64empty()
67Integer
67Grundlagen
68is_int()
69intval()
70Float/Double
70Grundlagen
71is_float()
71floatval()
71String
71Grundlagen
71Bedeutung der Anführungszeichen
73is_string()
73strval()
73strlen()
74Weitere Datentypen
74Array
74Object
74Resource
74Type Casting
75Dynamische Typumwandlung
75Grundlagen
75Mathematische Operatoren
76Der Verknüpfungs-Operator
77Nicht-boolesche Wahrheitswerte
78Zusammenfassung
78Testen Sie Ihr Wissen!
79Übungen
80Optionale Übungen
81Arrays
81Das Problem
81Grundlagen
81Mit Arrays arbeiten
81Erzeugen mit eckigen Klammern
82Auslesen von Werten
83Erzeugen mit explizitem Index
84Erzeugen mittels array()
85Erzeugen mittels kurzer Array-Syntax
86Assoziative Arrays
86Grundlagen
86Der Doppelpfeil-Operator (=>)
87Nützliche Array-Funktionen
87is_array()
88count()
88var_dump()
6
6.1
6.2
6.3
6.4
6.4.1
6.4.2
6.4.3
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.9
6.10
6.10.1
6.10.2
6.10.3
6.10.4
6.11
6.12
6.13
6.14
7
7.1
7.2
7.3
7.3.1
7.3.2
7.3.3
7.3.4
7.3.5
7.4
7.4.1
7.4.2
7.5
7.5.1
7.5.2
7.5.3
89in_array()
89array_pop()
90array_shift()
91Zusammenfassung
91Testen Sie Ihr Wissen!
92Übungen
92Optionale Übungen
94Formulare und Links
94Das Problem
94Informationen an PHP-Skripte übergeben
94Parameter über HTML-Links übergeben
94Aufbau von URLs
95URL-Parameter in PHP auslesen
96Zweck von URL-Parametern
97Parameter durch HTML-Formulare übergeben
97Grundlagen
98Der Form-Tag
100Formulardaten auslesen
100Formularelemente
107Das Array $_REQUEST
107Grundlagen
107$_REQUEST oder $_POST?
108Zusammenfassung
108Testen Sie Ihr Wissen!
108Übungen
109Optionale Übungen
110Funktionsentwurf
110Das Problem
110Funktionen definieren
110Funktionskopf
111Funktionskörper
111Selbst geschriebene Funktionen aufrufen
112Funktionen in Funktionen aufrufen
112Namenskonventionen
113Zusammenfassung
113Testen Sie Ihr Wissen!
113Übungen
115Strukturierung von PHP-Skripten
115PHP-Code strukturieren
116Dreiteilung des PHP-Codes
116Grundlagen
119Namensgebung
119Variablen
120Funktionen
120Auslagern von Funktionen
120Konzept
120require_once
121require
122include(_once)
123Namens- und andere Konventionen
7.5.4
7.5.5
7.5.6
7.6
7.7
7.8
7.9
8
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
8.7
8.8
8.9
9
9.1
9.2
9.2.1
9.2.2
9.2.3
9.3
9.4
9.5
9.6
9.7
10
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
124Zusammenfassung
124Testen Sie Ihr Wissen!
125Übungen
125Optionale Übungen
126Verzweigungen
126Das Problem
126Boolesche Logik
126Konzept
126Vergleichsoperatoren
134Boolesche Ausdrücke modifizieren
139Wahrheitswerte aus anderen Quellen
140if-Anweisung
140Grundlagen
141Reine if-Anweisung
142if-else
143if-elseif-else
146Alternativen zur if-Anweisung
146Grundlagen
146switch-Anweisung
150Der ternäre Operator
152Der Null-Coalesce-Operator
154Zusammenfassung
154Testen Sie Ihr Wissen!
155Übungen
157Schleifen
157Das Problem
158Schleifen
158foreach-Schleife
158Grundlagen
159foreach zur formatierten Ausgabe von HTML
160Über Schlüssel und Werte iterieren
161for-Schleife
161Grundlagen
162Die Startanweisung
162Die Abbruchbedingung
162Der Modifikator
163Der Schleifenkörper
163Anwendungen
166while-Schleife
166Grundlagen
167Anwendung
168Endlos-Schleifen
169Zusammenfassung
169Testen Sie Ihr Wissen!
170Übungen
171Optionale Übungen
172Funktionen mit Parametern und Rückgabewerten
172Das Problem
172Parameter an Funktionen übergeben
172Geltungsbereiche von Variablen
10.5
10.6
10.7
10.8
11
11.1
11.2
11.2.1
11.2.2
11.2.3
11.2.4
11.3
11.3.1
11.3.2
11.3.3
11.3.4
11.4
11.4.1
11.4.2
11.4.3
11.4.4
11.5
11.6
11.7
12
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
12.8
12.9
12.10
13
13.1
13.2
13.2.1
173Übergabe von Parametern
174Übergabe mehrerer Parameter
176Parameter mit Standardwerten
177Werte aus einer Funktion zurückgeben
177Konzept
177return
178Einen Wert zurückgeben
179Mehrere Werte als Array zurückgeben
180Zusammenfassung
180Testen Sie Ihr Wissen!
181Übungen
182Optionale Übungen
183Mehrdimensionale Arrays
183Das Problem
183Konzept
183Zweidimensionale Arrays
183Zweidimensionale Arrays erzeugen
184Zweidimensionale Arrays auslesen
184Formatierung
186Mehrdimensionale Arrays
187Verschachtelte foreach-Schleifen
189Zusammenfassung
189Testen Sie Ihr Wissen!
190Übungen
191Optionale Übungen
192Stringbehandlung
192Das Problem
192Strings formatieren
192Grundlagen
192trim()
193strtoupper()
193strtolower()
195ucfirst()
195htmlspecialchars()
198Datum und Uhrzeit formatieren
198Das Problem
199Der Timestamp
199time()
199strftime()
201mktime()
204strtotime()
205Strings durchsuchen
205Grundlagen
205strlen()
207strpos()
208Strings bearbeiten
208Grundlagen
208substr()
209str_replace()
211Zusammenfassung
212Testen Sie Ihr Wissen!
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
13.5
13.6
13.7
14
14.1
14.2
14.3
14.3.1
14.3.2
14.3.3
14.4
14.5
14.6
14.7
14.8
14.9
15
15.1
15.2
15.2.1
15.2.2
15.2.3
15.2.4
15.2.5
15.2.6
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
212Übungen
213Optionale Übungen
214Persistente Daten
214Das Problem
214Dateien als Speichermedium
214file_put_contents()
215file_get_contents()
215Speichern komplexer Datenstrukturen
216serialize()
216unserialize()
218Serialisierte Daten aktualisieren
218Das Problem
218Vorgehensweise
219Zusammenfassung
220Testen Sie Ihr Wissen!
220Übungen
220Optionale Übungen
221HTTP und PHP-Sessionverwaltung
221Das Problem
221Grundlagen des HTTP-Protokolls
223Anfrage des Clients (Request)
225Antwort des Servers (Response)
227Mit PHP HTTP-Header auslesen und manipulieren
227Grundlagen
227$_SERVER
229header()
230Manuell 404 Seiten ausliefern
231Einschränkungen des HTTP-Protokolls
232Sessions
232Die PHP-Sessionverwaltung
232Sessions eröffnen
233Daten in Sessions speichern
234Sessions beenden
235Zusammenfassung
235Testen Sie Ihr Wissen!
236Übungen
237Optionale Übungen
238Einige Tipps und Tricks aus der PHP-Kiste
238Das Problem
238Konstanten
238Prinzip
239Alternative Syntax
239Anwendung
240error_reporting()
240Das Problem
241Den Fehlerlevel einstellen
242Fehlermeldungen abschalten
242Alternative PHP-Syntax für HTML-Templates
242Warum eine andere Syntax?
243Die Syntax
15.8
15.9
16
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
16.6
16.7
16.8
17
17.1
17.2
17.2.1
17.2.2
17.3
17.3.1
17.3.2
17.3.3
17.3.4
17.4
17.5
17.6
17.6.1
17.6.2
17.6.3
17.7
17.8
17.9
17.10
18
18.1
18.2
18.2.1
18.2.2
18.2.3
18.3
18.3.1
18.3.2
18.3.3
18.4
18.4.1
18.4.2
244Alternativ-Syntax Variablen-Ausgabe
244Zusammenfassung
245Testen Sie Ihr Wissen!
245Übungen
245Optionale Übungen
246Wir programmieren ein Weblog
246Das Projekt
246Grundlagen
246Ein wenig Make-up
249CSS
253Die Funktionen
254Testdaten
254Benutzer
254Einträge
257Die Startseite
257Inhalt
258Einträge auslesen
258Einträge formatiert anzeigen
259Menü oder Login-Formular
260Einloggen
260Inhalt
260Der Login
261Weiterleitung per header()
261Ausloggen
262Eintrag schreiben
262Inhalt
263Logintest
263Eintrags-Formular
263Hauptmenü
264Eintrag speichern
264Inhalt
265Login und POST-Test
265Eintrag-Array erstellen
265Neuen Eintrag speichern
266Eintrag formatiert anzeigen
266Zusammenfassung
266Übungen
266Optionale Übungen
268Einführung in PDO
268Das Problem
268Einführung in PDO
269Datenbank-Verbindung aufbauen
269Das PDO-Objekt
269Der DSN
270SQL-Anweisungen mit PDO ausführen
270PDO#query()
271PDO#errorInfo()
272Ergebnisse verarbeiten: Die Klasse PDOStatement
276PDO-Attribute
276PDO-Attribute beim Erzeugen des PDO-Objekts setzen
276Fehlerverhalten einstellen (PDO::ATTR_ERRMODE)
18.4.3
18.5
18.6
18.7
18.8
19
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
19.8.1
19.8.2
19.8.3
19.8.4
19.8.5
19.9
19.10
19.11
20
20.1
20.2
20.3
20.3.1
20.3.2
20.4
20.4.1
20.4.2
20.4.3
20.5
20.5.1
20.5.2
277Fetch-Modus (PDO::ATTR_DEFAULT_FETCH_MODE)
278Gepufferte Abfragen (PDO::MYSQL_ATTR_USE_BUFFERED_QUERY)
280Vorschlag für eine Standard-PDO-Verbindung
281MySQL und Unicode
281Unicode-konforme Tabellen erzeugen
281Unicode-Daten aus MySQL auslesen
282Testen Sie Ihr Wissen!
282Übungen
284PDO in der Praxis
284Prepared Statements
284Einführung in Prepared Statements
285Mehrfaches Ausführen von Prepared Statements
286Limitierungen von Platzhaltern in Prepared Statements
286Prepared Statements mit benannten Platzhaltern
288PDO und Sicherheit
290CRUD
291Vorbereitungen
292READ: index.php
293CREATE: anlegen.php
296DELETE: loeschen.php
297UPDATE: bearbeiten.php
299Zusammenfassung
299Testen Sie Ihr Wissen!
300Übungen
300Optionale Übungen
302Tricks rund um Arrays
302Das Problem
302Array-Sortierung
306Benutzerdefinierte Vergleichsfunktionen
307Der Spaceship-Operator
308Anonyme Funktionen
310Der Splat-Operator
311Variadische Funktionen
312Dereferenzierung
313Destructuring
315Zusammenfassung
315Testen Sie Ihr Wissen!
317Anhang 1: XAMPP
317Was XAMPP ist
317Installation
318Windows
318Mac OS X
319Linux
319Zusammenfassung
320Anhang 2: Editoren und IDEs
320Notepad++
320Alternativen zu Notepad++
20.5.3
20.5.4
20.5.5
20.6
20.6.1
20.6.2
20.7
20.8
21
21.1
21.1.1
21.1.2
21.1.3
21.1.4
21.1.5
21.2
21.2.1
21.2.2
21.2.3
21.2.4
21.2.5
21.3
21.4
21.5
21.6
22
22.1
22.2
22.2.1
22.2.2
22.2.3
22.3
22.4
22.5
22.6
22.7
22.8
23
23.1
23.2
23.2.1
23.2.2
23.2.3
23.3
24
24.1
24.2
321Lösungen der Übungsaufgaben
325Lösungen der Wissensfragen
338Index
3.1
3.2
3.2.1
3.2.2
3 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.
Das Problem
Wenn Sie die letzte Lektion durchgelesen haben, wissen Sie nun, wie eine dynamische Webseite prin-zipiell funktioniert. Jetzt wird es jedoch Zeit, dass Sie selbst eine PHP-Seite bauen, daher lassen Sie unsauch gleich loslegen. Sie haben inzwischen doch den Webserver und den Code-Editor installiert, wie esin Lektion 1 verlangt war, oder?
PHP in eine HTML-Seite einbetten
Eine statische HTML-Seite erstellen
Öffnen Sie Ihren bevorzugten Code-Editor und erstellen Sie nachfolgendes HTML-Dokument. SpeichernSie es im document root Ihres Webservers im Unterordner phpschulung unter dem Namenerste_seite.php ab. Wenn Sie beispielsweise eine Standardinstallation von XAMPP (siehe Lektion 23)durchgeführt haben, ist Ihr document root das Verzeichnis c:\xampp\htdocs. Bei MAMP unter Mac OSX ist der Standard /Applications/MAMP/htdocs und auf Linux-Servern finden Sie dieses Verzeichnis oftunter /var/www. Vergessen Sie nicht die korrekte Dateiendung .php zu benutzen, diese ist sehr wichtig.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title>Hallo Welt</title>7 </head>89 <body>
1010 Hallo Welt11 </body>1213 </html>
Codebeispiel 1 erste_seite.php (Version 1)
Rufen Sie die Datei nun in Ihrem Browser unter der URL http://localhost/phpschulung/erste_seite.php auf.
PHP-Code einfügen
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.
28 3 HTML und PHP
3.2.3
Um dem Webserver zu zeigen, wo PHP-Code in HTML-Dokumenten steht, wurde ein spezieller Tag ent-wickelt, der jeden PHP-Code umgeben muss. Kein PHP-Code darf außerhalb dieser Begrenzung stehen,oder der Webserver hält ihn für normales HTML und zeigt ihn einfach an.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title><?php<?php echoecho "Hallo Welt"; ?>?></title>7 </head>89 <body>
1010 <?php<?php echoecho "Hallo Welt"; ?>?>11 </body>1213 </html>
Codebeispiel 2 erste_seite.php (Version 2)
Was hat sich hier geändert? Wenn Sie sich die geänderte Seite in Ihrem Browser ansehen, werden Siekeinen Unterschied feststellen. Die Seite hat immer noch den Titel Hallo Welt und gibt im body -Tagdenselben Text noch einmal aus.
Der Unterschied ist, dass der Text Hallo Welt nun mittels PHP in die Seite geschrieben wurde. Wannimmer Sie PHP-Code einfügen wollen, müssen Sie zuerst <?php schreiben, um zu zeigen, dass nunPHP-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.4
Jeder PHP-Code muss zwischen <?php und dem schließenden Tag ?> stehen. Ansonsten wird ernicht ausgewertet, sondern unverändert angezeigt. Dies sind die sogenannten PHP-Tags, analogzu den bekannten HTML-Tags.
PHP erzeugt HTML
Wenn Sie sich den Quelltext der HTML-Seite anzeigen lassen (z.B. im Firefox-Browser mit Strg+U), wer-den Sie feststellen, dass dort nichts mehr von dem PHP-Code zu sehen ist. Bei genauerer Betrach-tung werden Sie sogar erkennen, dass die erzeugte Seite mit der ersten, statischen Version ausAbschnitt 3.2.1 identisch ist. Vermutlich sind nicht alle Zeilenumbrüche da, wo Sie es erwarten. Zum Bei-spiel könnte der schließende body-Tag hinter das "Hallo Welt" gerutscht sein. Doch dies soll uns nichtweiter stören.
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 durch den Interpreter auswerten lassenund, was als Ergebnis übrig blieb, an den Browser gesendet. Der Browser sieht nichts mehr von denursprü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. Alsosollte ein Webbrowser niemals PHP-Code sehen.
4. Er sorgt dafür, dass der Text in den Anführungszeichen in der Webseite angezeigt wird.
3.2 PHP in eine HTML-Seite einbetten 29
3.3
3.3.1
3.3.2
Die sieben 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!
PHP-Code im HTML-Bereich schreiben
Einer der beliebtesten Fehler ist es, PHP-Code außerhalb des durch <?php ?> markierten Bereicheszu schreiben. Das bedeutet, dass dieser Code für HTML gehalten und einfach an den Browser geschicktwird.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title><?php<?php echoecho "Hallo Welt"; ?>?></title>7 </head>89 <body>
1010 echo "Hallo Welt";11 </body>1213 </html>
Codebeispiel 3 php_im_html.php
Die erste echo -Anweisung in Zeile 6 wird korrekt ausgewertet. Im Browser steht an dieser Stelle nurnoch Hallo Welt . In Zeile 10 jedoch haben wir vergessen, den PHP-Code in den passenden Tags zuverbergen. Das Ergebnis ist, dass der Browser an dieser Stelle das komplette echo "Hallo Welt";ausgibt.
HTML-Code im PHP-Bereich schreiben
Das Gegenteil des letzten Fehlers ist genauso verhängnisvoll. Wenn Sie HTML-Tags in den PHP-Bereichschreiben, versucht der PHP-Interpreter, aus den für ihn seltsamen Zeichen schlau zu werden und gibtschließlich mit einer Fehlermeldung auf.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <?php<?php <meta charset="utf-8" /> ?>?>6 <title><?php<?php echoecho "Hallo Welt"; ?>?></title>7 </head>89 <body>
1010 <?php<?php echoecho "Hallo Welt"; ?>?>11 </body>1213 </html>
Codebeispiel 4 html_im_php.php
30 3 HTML und PHP
3.3.3
3.3.4
3.3.5
Jetzt liegt der Fehler in Zeile 5. Dort wird zwar ein PHP-Tag geöffnet, aber sein Inhalt besteht aus puremHTML. Bestraft wird dieses Verhalten von PHP mit einer hässlichen Fehlermeldung. Wenn Sie die Seiteaufrufen, 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 (unex-pected) Zeichen '<' nichts anfangen kann.
Die PHP-Datei hat die Endung .html
Selbst wenn Sie das ursprüngliche Beispiel fehlerfrei abgetippt haben, kann es dennoch sein, dass Sieden kompletten Code mit allen PHP-Tags im Browser sehen. Das kann mehrere Gründe haben. Der Häu-figste 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öhnlichnicht, dass sich PHP darin befindet, und schickt die Datei unverändert an den Browser.
Welche Dateiendungen der Webserver als PHP-Dateien ansieht, kann natürlich konfiguriert werden.Häufig funktionieren neben .php auch versionsspezifische Endungen wie beispielsweise .php55.Solange Sie keinen triftigen Grund haben, etwas anderes zu tun, sollten Sie immer die Endung .php ver-wenden, da diese immer funktioniert und Sie auf die genaue Konfiguration bei Ihrem Webhoster oftkeinen Einfluss haben.
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 Webserversie nicht finden und einen Fehler melden.
Dies ist ein, gerade von PHP-Anfängern, häufig gemachter Fehler, da die meisten Windows-Anwenderes beispielsweise gewohnt sind, Dateien in Eigene Dateien oder auf dem Desktop abzulegen, wo derWebserver sie nicht finden kann.
Wenn Sie häufiger in diese Falle tappen, legen Sie sich eine Verknüpfung zum document root aufIhrem Desktop an. Dadurch sieht es so aus, als würden Sie die Dateien direkt in einem Ordner aufdem Desktop ablegen, und es funktioniert trotzdem.
Die PHP-Datei wurde direkt im Browser geöffnet
Kommen wir nun zum wahrscheinlich häufigsten Anfängerfehler. Anstatt die PHP-Datei über den Web-server aufzurufen, haben Sie die Datei direkt vom Dateisystem aus geöffnet. Das bedeutet, Ihr Web-browser erhält direkt den PHP-Code und hat natürlich keine Ahnung, was er damit anfangen soll.Moderne Browser blenden meist alles zwischen <?php ... ?> einfach aus, aber gerade ältere Brow-ser haben den Inhalt direkt angezeigt.
Sie merken am besten an der URL-Zeile im Firefox-Browser, dass Sie die Datei direkt geöffnet haben.Wenn Sie dort zu Anfang file:// lesen, sind Sie in die Falle getappt. Gerade am Anfang Ihrer PHP-Karrieresollte der erste Blick der URL gelten, wenn etwas nicht so funktioniert, wie Sie es erwarten. In ande-ren Browsern wie beispielsweise Chrome wird eine PHP-Datei in einem solchen Fall übrigens gar nichtgeöffnet, sondern zum Download angeboten.
3.3 Die sieben berühmten Fehler 31
3.3.6
3.3.7
Die echo-Anweisung fehlt
In den vorherigen Abschnitten haben Sie in die PHP-Tags das Wort echo , gefolgt von Text in Anfüh-rungszeichen, geschrieben. Das Ergebnis war, dass das Wort echo und die Anführungszeichen ver-schwunden sind und nur der Text selbst im Browser angekommen ist.
Dieses Wort echo ist für PHP eine Anweisung und veranlasst den PHP-Interpreter, den folgenden Textauszugeben. Im Gegensatz zu HTML, wo Sie jegliche Ausgabe einfach in die Datei schreiben, müssen SiePHP ausdrücklich sagen, wenn Sie etwas auf dem Bildschirm ausgeben wollen. Für diesen Zweck gibtes in PHP eine ganze Reihe von Anweisungen, für den Anfang soll uns echo allerdings genügen, da Siemit dieser Anweisung fast jede Situation meistern können.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title><?php<?php echoecho "Hallo Welt"; ?>?></title>7 </head>89 <body>
1010 <?php<?php "Hallo Welt"; ?>?>11 </body>1213 </html>
Codebeispiel 5 echo_fehlt.php
Fehlt die echo -Anweisung, so hat der PHP-Interpreter keine Ahnung, was er mit dem Text in Anfüh-rungszeichen anfangen soll, und dieser verfällt nach Ausführung von Zeile 10 ungenutzt. In diesem Fallerhalten wir somit eine leere Seite, da das body -Tag keinen weiteren Inhalt hat.
Das Leerzeichen wurde vergessen
Fehlt zwischen dem öffnenden Tag <?php und der nachfolgenden Anweisung das trennende Leerzei-chen, so kann der PHP-Interpreter den PHP-Code nicht mehr erkennen.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title><?php<?php echoecho "Hallo Welt"; ?>?></title>7 </head>89 <body>
1010 <?php<?phpechoecho "Hallo Welt"; ?>?>11 </body>1213 </html>
Codebeispiel 6 leerzeichen_fehlt.php
Im Browser bekommen wir beim Aufruf dieser PHP-Datei eine leere Seite angezeigt. Es gibt auch keineFehlermeldung des PHP-Interpreters, da dieser den PHP-Code ja gar nicht erkannt hat. Schaut man sichjedoch den Quelltext der HTML-Seite im Browser an, so kann man das Problem an dem im Quelltextenthaltenen PHP-Code erkennen. Eine PHP-IDE würde die fehlerhafte Zeile 10 übrigens sofort im Codemarkieren.
32 3 HTML und PHP
3.4
3.4.1
3.4.2
Mehrzeilige PHP-Anweisungen
Das Semikolon
Bisher haben Sie in jedem Beispiel am Ende einer PHP-Anweisung ein Semikolon, zu Deutsch Strich-punkt, gesehen. Sollten Sie eines vergessen haben, werden Sie keinen Unterschied bemerkt haben. DerPHP-Code hat weiterhin genau dasselbe getan.
Wofür brauchen wir dieses Semikolon dann überhaupt? Es ist für die Trennung einzelner PHP-Anwei-sungen zuständig. Wenn Sie also mehr als eine Anweisung für PHP haben, müssen Sie dazwischen einSemikolon setzen.
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title><?php<?php echoecho "Hallo Welt"; ?>?></title>7 </head>89 <body>
1010 <?php<?php echoecho "Hallo Welt "; echoecho "und willkommen beim PHP-Seminar!"; ?>?>11 Das ist normales HTML.12 <?php<?php echoecho "Das ist korrekt." echoecho "Das nicht mehr!"; ?>?>13 </body>1415 </html>
Codebeispiel 7 mehrere_php_anweisungen.php
Der Unterschied zwischen den Zeilen 10 und 12 besteht darin, dass in Zeile 12 vor dem zweiten echokein Semikolon steht. PHP denkt also, hier stünde nur eine einzige lange Anweisung anstatt zwei. Daeine Anweisung mit zwei echo -Aufrufen 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 in Zeile 12 entweder ein Komma oder ein Semikolon erwartet wird. Tragen Siealso das in diesem Fall fehlende Semikolon nach, damit der Code funktioniert.
Mehrzeilige PHP-Anweisungen
Auch wenn es funktioniert, mehrere PHP-Anweisungen hintereinander zu schreiben, so ist es nicht wirk-lich übersichtlich. Vergleichen Sie im folgenden Listing die beiden PHP-Blöcke:
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title>Hallo Welt</title>7 </head>89 <body>
1010 <?php<?php echoecho "Hallo Welt "; echoecho "und willkommen beim PHP-Seminar! "; echoecho"Langsam wir es unübersichtlich. "; echoecho "Jetzt ist aber wirklich Schluss!"; ?>?>
3.4 Mehrzeilige PHP-Anweisungen 33
3.5
3.5.1
11 <br />12 <?php<?php1314 echoecho "So sieht das schon viel besser aus. ";15 echoecho "Wenn Sie jede Anweisung auf eine Zeile schreiben, ";16 echoecho "behalten Sie leichter den Überblick. ";17 echoecho "Trotzdem müssen Sie immer noch ";18 echoecho "ein Semikolon nach jeder Anweisung schreiben, ";19 echoecho "da PHP eine neue Zeile nicht als das Ende ";2020 echoecho "einer Anweisung sieht.";2122 ?>?>23 </body>2425 </html>
Codebeispiel 8 mehrzeiliges_php.php
Der erste Abschnitt in Zeile 10 ist, obwohl PHP ihn versteht, nicht sehr übersichtlich. Sie müssen gezieltnach den Semikolons suchen, um den Beginn einer neuen Anweisung zu sehen. Der zweite Abschnittin den Zeilen 12 bis 22 bringt jede Anweisung auf eine eigene Zeile, was es Ihnen leichter macht, denCode 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ßen-den PHP-Tag auf jeweils eigene Zeilen.
Stilfragen
Saubere Trennung von HTML und PHP
In diesem Abschnitt werden Sie eines der wenigen Codebeispiele in diesem Lernbuch sehen, das ein-deutig 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 dafür aber auch Beispiele sehen, wie Sie es nichtmachen sollten. Hier ist das erste:
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title>Hallo Welt</title>7 </head>89 <body>
1010 <?php<?php1112 echoecho '<form action="test.php" method="post">';13 echoecho '<input type="text" name="vorname" id="vorname" value="Arthur" />';14 echoecho '<input type="text" name="nachname" id="nachname" value="Dent" />';15 echoecho '<input type="submit" value="abschicken" />';16 echoecho '</form>';1718 ?>?>19 </body>202021 </html>
Codebeispiel 9 stillos.php
34 3 HTML und PHP
Vergleichen Sie das Beipiel eben mit dem folgenden, das exakt die gleiche Ausgabe erzeugt:
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title>Hallo Welt</title>7 </head>89 <body>
1010 <form action="test.php" method="post">11 <input type="text" name="vorname" id="vorname" value="<?php<?php echoecho 'Arthur';?>?>" />12 <input type="text" name="nachname" id="nachname" value="<?php<?php echoecho 'Dent';?>?>" />13 <input type="submit" value="abschicken" />14 </form>15 </body>1617 </html>
Codebeispiel 10 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 offensichtlichsind:
➤ 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 unter-schiedlich dargestellt. Wenn Sie einen HTML-Tag in eine echo -Anweisung verpacken, verlieren Siein einigen Editoren diesen Vorteil. Alles wird in einer Farbe dargestellt, was das Auffinden von Feh-lern erschwert.
➤ Sie müssen alle Texte, die Sie mit echo ausgeben, in Anführungszeichen einschließen. Ich werdespäter noch im Detail darauf eingehen, aber Sie dürfen dieselben Anführungszeichen nicht mehrim Text verwenden, die Sie zum Einschließen verwendet haben. In unserem Beispiel wäre Folgen-des also nicht erlaubt: <?php echo 'Arthur 's '; ?>
➤ Jedes Zeichen, das Sie statt direkt im HTML mit echo ausgeben, sorgt dafür, dass die Seite langsa-mer lädt, da PHP mehr Daten verarbeiten muss. Der Unterschied mag bei kleinen Seiten nicht insGewicht 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 älterenProjekten 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 Datumsakzeptieren gar keinen Code mehr, der irgendwelche HTML-Formatierungen mit PHP-Anweisungenausgibt. Sie werden später noch wesentlich mehr zu diesem Thema hören, also gewöhnen Sie es sicham besten gar nicht erst falsch an:
Versuchen Sie, wo immer möglich, HTML-Code und PHP-Code getrennt zu halten. HTML-Tags mitPHP-Anweisungen auszugeben, ist extrem schlechter Stil und behindert die Übersichtlichkeit IhresCodes.
3.5 Stilfragen 35
3.5.2 Einrückungen
Ein zweiter Punkt beim Thema Stil sind Code-Einrückungen. Vergleichen Sie die beiden Beispiele:
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title>Hallo Welt</title>7 </head>89 <body>
1010 <?php<?php1112 echoecho "So sieht das schon viel besser aus. ";13 echoecho "Wenn Sie jede Anweisung auf eine Zeile schreiben, ";14 echoecho "behalten Sie leichter den Überblick. ";15 echoecho "Trotzdem müssen Sie immer noch ";16 echoecho "ein Semikolon nach jeder Anweisung schreiben, ";17 echoecho "da PHP eine neue Zeile nicht als das Ende ";18 echoecho "einer Anweisung sieht.";192020 ?>?>21 </body>2223 </html>
Codebeispiel 11 schlechter_stil.php
Beispiel
1 <!DOCTYPE html>2 <html>34 <head>5 <meta charset="utf-8" />6 <title>Hallo Welt</title>7 </head>89 <body>
1010 <?php<?php1112 echoecho "So sieht das schon viel besser aus. ";13 echoecho "Wenn Sie jede Anweisung auf eine Zeile schreiben, ";14 echoecho "behalten Sie leichter den Überblick. ";15 echoecho "Trotzdem müssen Sie immer noch ";16 echoecho "ein Semikolon nach jeder Anweisung schreiben, ";17 echoecho "da PHP eine neue Zeile nicht als das Ende ";18 echoecho "einer Anweisung sieht.";192020 ?>?>21 </body>2223 </html>
Codebeispiel 12 guter_stil.php
Sie sollten auf den ersten Blick sehen, was im oberen Beispiel falsch gelaufen ist. In PHP gelten im Prinzipdieselben Regeln wie in HTML: Sie sollten alles einheitlich formatieren und einrücken. Wenn Sie meh-rere echo -Anweisungen nacheinander schreiben, sollten alle gleich eingerückt sein.
36 3 HTML und PHP
3.6
3.7
3.8
Wenn Sie sich jetzt fragen, warum ich das überhaupt erwähne, seien Sie versichert: Solange Ihnen dasEinrücken nicht in Fleisch und Blut übergegangen ist, werden Sie sich immer wieder dabei ertappen,dass Ihr Code nicht einheitlich formatiert ist.
Sobald Sie mehr PHP-Anweisungen beherrschen, werde ich noch mehr Beispiele zu diesem Thema brin-gen. Merken Sie sich aber schon mal:
Formatieren Sie Ihren Code immer auf die gleiche Weise. Der (in)offizielle PHP-Standard ist es, jedeEbene um zusätzliche vier Leerzeichen einzurücken. Viele Editoren unterstützen Sie dabei, indemSie einen einzelnen Tab in vier Leerzeichen umwandeln. Die einzige Ausnahme bildet bei einermehrzeiligen PHP-Anweisung die erste Ebene, welche wir nicht (weiter) einrücken. Diese ist somitbündig zum öffnenden und schließenden PHP-Tag.
Noch besserer Stil ist es übrigens, wenn man statischen Text gar nicht erst mit echo ausgibt, aber zuden variablen Inhalten kommen wir erst in der nächsten Lektion.
Zusammenfassung
In dieser Lektion haben Sie die ersten Gehversuche in PHP unternommen. Sie haben gelernt, dass Siemit den Tags <?php und ?> PHP-Code direkt in HTML einbetten können. Sie haben erfahren, dass Siemehrere Anweisungen mit dem Semikolon trennen müssen, und welchen Zweck die echo -Anweisungerfüllt.
Zusätzlich haben Sie aber auch schon jetzt die ersten Hinweise erhalten, wie Sie sauberen Code schrei-ben, der Ihnen später keinen Ärger macht. Je früher Sie sich an diese Tipps halten, desto besser, denneinmal falsch gelernte Angewohnheiten sind nur schwer wieder loszuwerden. Auch wenn Ihnen das imMoment vielleicht übertrieben erscheint, werden Sie später sehr dankbar sein, sich nicht umgewöhnenzu müssen.
Testen Sie Ihr Wissen!
Wie können Sie PHP-Code in HTML einbetten?
Bitte ankreuzen:
Übungen
Übung 1:
Legen Sie einen Unterordner lektion03 im Ordner phpschulung an. Speichern Sie dort ein HTML-Dokument namens spass.php, das im <body> -Tag den Text PHP macht Spaß! stehen hat.
Hinweis: Legen Sie fortan für alle Übungen einer Lektion zunächst einen entsprechenden Unter-ordner an.
Der Beginn des PHP-Codes kann mit <?php markiert werden.
Der Beginn des PHP-Codes kann mit <php markiert werden.
Das Ende des PHP-Codes kann mit ?> markiert werden.
Der PHP-Interpreter erkennt ohne besondere Markierung den Beginn und das Ende des PHP-Codes von selbst.
3.6 Zusammenfassung 37
3.9
Übung 2:
Verändern Sie das Dokument. Der Text PHP macht Spaß! soll nun mit der PHP-Anweisung echoausgegeben werden.
Übung 3:
Öffnen Sie nun die Datei spass.html direkt im Firefox-Browser über Datei→ öffnen und beobach-ten Sie, was passiert.
Hinweis: Seit Version 4 ist im Mozilla Firefox die Menüleiste standardmäßig deaktiviert. Sie kannjedoch durch Drücken der (linken) Alt-Taste eingeblendet werden. Alternativ lässt sich die Dateiauch einfach auf den Anzeigebereich des Browsers ziehen, wodurch sie im Browser geöffnet wird.
Übung 4:
Öffnen Sie die Datei nun über den Webserver, also über http://localhost/phpschulung/lektion03/spass.php , und beobachten Sie, was passiert.
Übung 5:
Benennen Sie die Datei in spass.html um, öffnen Sie sie über http://localhost/phpschulung/lektion03/spass.html und beobachten Sie den Unterschied in der Darstel-lung.
Optionale Übungen
Übung 6:
Schreiben Sie ein HTML-Dokument mit dem Namen formular.php, das ein Formular mit den fol-genden Feldern enthält:
➤ <input type="text" name="benutzername" value="" /> ,
➤ <input type="password" name="passwort1" value="" /> ,
➤ <input type="password" name="passwort2" value="" /> und
➤ <input type="submit" value="registrieren" /> .
Übung 7:
In dem Feld benutzername soll nun standardmäßig "Mr. X" stehen, was über das value -Attributmöglich ist. Der Text soll dort mittels einer PHP- echo -Anweisung eingetragen werden.
Übung 8:
In den beiden password -Feldern sollen jeweils fünf Sterne ( ***** ) stehen. Auch diese sollendort mit echo eingetragen werden. Wie werden die Sterne im Browser dargestellt?
38 3 HTML und PHP