Johann-Christian Hanke
PHP und MySQL für Kids
Einfacher Einstieg in die Webprogrammierung
Die mühevollen Vorarbeiten sind geschafft! Der Webserver läuft. Höchste Zeit, mit dem Programmieren richtig loszulegen.
In diesem Kapitel lernst du:
Gleich zu Anfang stelle ich die wichtigste Sprachanweisung von PHP vor – echo
. Und ich verspreche dir, es ist eine Anweisung »mit Nachhall«. Doch vorher klären wir, wie PHP-Dokumente überhaupt aufgebaut sind und wo du die PHP-Anweisungen notierst.
Die PHP-Notation ist unkompliziert. Was musst du wissen? Nicht viel.
.php
. Sie enthalten zusätzlich Abschnitte mit PHP-Code. Diese PHP-Abschnitte notierst du ganz einfach irgendwo innerhalb des HTML-Quelltexts. Wo, ist im Prinzip fast egal. Hauptsache, du machst deutlich, dass es sich um einen PHP-Abschnitt handelt.
Ganz einfach. Zu Beginn des PHP-Teils notierst du Folgendes:
<?php
Am Schluss des PHP-Abschnitts schreibst du dagegen:
?>
Das war’s schon. Das ist die Form, die ich dir empfehle.
Du könntest aber auch schreiben:
<?
und
?>
wobei du dann die sogenannte Kurzform gewählt hättest. Man spricht von short tags. (Ich zeige es dir deshalb, damit du dich nicht wunderst, wenn dir diese Schreibweise bei anderen Skripten begegnet.) Die short tags werden jedoch nicht empfohlen. Wir bleiben daher bei der Langform.
Warum ist die Kennzeichnung des PHP-Abschnitts eigentlich so wichtig?
Unter Programmierern ist es eine hübsche Tradition, die »Welt« am Anfang mit einem kräftigen »Hallo« zu begrüßen. Schreibe ein Skript, das den Text »Hallo Welt« ausgibt. Das Dokument soll hallo.php
heißen und in unserem htdocs
-Ordner unter C:\xampp
abgelegt werden.
<body></body>
einen PHP-Bereich vor.
Kleide die PHP-Tags außerdem durch <p></p>
ein. Damit sorgst du dafür, dass der Text innerhalb eines sogenannten HTML-Blockelements notiert wird. Der Bereich innerhalb von <body></body>
sieht dann so aus:<p> <?php ?> </p>
<?php ?>
jetzt folgende PHP-Zeile:echo "Hallo Welt!";
hallo.php
. Denke an den korrekten Speicherpfad: xampp/htdocs
.echo
sorgt dafür, dass die entsprechenden Daten ausgegeben werden. Die auszugebenden Daten notierst du innerhalb von Gänsefüßchen. Das können doppelte, aber oft auch einfache sein. Die Zeile wird am Ende durch ein Semikolon abgeschlossen.
So sieht das gesamte Beispiel aus. Ich habe den Titel in der vierten Zeile angepasst und außerdem eine beschreibende Überschrift eingefügt. Aber Hallo – der eigentliche PHP-Teil ist nur ganz kurz:
<!DOCTYPE html> <html lang="de"> <head> <title>Hallo-Welt-Skript</title> <meta charset="utf-8"> <link rel="stylesheet" href="phpkid.css"> </head> <body> <h3>Hallo-Welt-Skript</h3> <p> <?php echo "Hallo Welt!"; ?> </p> </body> </html>
Du möchtest ebenfalls mit einer externen CSS-Datei arbeiten? Damit die sechste Zeile im Quelltext Sinn macht? Dann vergiss nicht, dass du die Datei phpkid.css
ebenfalls in den Ordner htdocs
kopieren musst. Sonst werden deine »Stile« nicht angezeigt.
Sicher bist du neugierig, ob alles funktioniert. Rufe dein Dokument im Webserver auf. Da du es direkt im Wurzelordner htdocs
gespeichert hast, ist das ganz einfach. Tippe http://localhost/hallo.php
und drücke auf Enter. Wenn alles geklappt hat, müsstest du folgendes Bild sehen:
Der PHP-Code wird interpretiert: Der Browser gibt den Hallo-Welt-Text aus.
Hat’s funktioniert? Herzlichen Glückwunsch!
Mal etwas anderes: Ist dir eigentlich die interessante farbliche Darstellung in PSPad aufgefallen? Sowohl die HTML- als auch die PHP-Befehle werden durch unterschiedliche Farben optisch gut hervorgehoben. Dafür sorgt der HTML multihighlighter – eine raffinierte Farbhervorhebungsautomatik.
Der HTML Multihighlighter ist automatisch aktiv. Du erkennst es an der entsprechenden Anzeige in der Statuszeile.
Stelle zur Probe einmal einen anderen Highlighter ein. Dazu klickst du einfach auf den Text HTML multihighlighter aus der Statuszeile. Nun erscheint ein Dialogfenster und zeigt dir eine Auswahl vieler anderer Farbhervorhebungs-Module. Probiere doch einmal die Einstellung HTML. So wird nur der HTML-Code farblich hervorgehoben. Du kannst den Fokus aber auch ausschließlich auf PHP legen.
Du musst den Highlighter aber normalerweise nicht von Hand wählen. PSPad erkennt den Dateityp automatisch anhand der Endung einer Datei. Rufe doch einmal die phpkid.css
auf und prüfe, welcher Highlighter gewählt ist. Richtig: Cascading Style Sheets.
Die Welt haben wir schon begrüßt. Wunderbar! Richten wir unser Augenmerk deshalb auf die nächste Umgebung: Auf Katja, Tabea, Leon, Peer, Manja und auf wen auch immer. Schmettere einem dieser lieben Menschen ebenfalls einen freundlichen Gruß entgegen.
Bleiben wir im Beispiel einfach bei Katja. Begrüße sie mit PHP. Erstelle ein neues PHP-Dokument. Nenne es katja.php
und lege es wieder in den Ordner htdocs
. Als Titel und Überschrift schlage ich Persönliche Begrüßung mit Variablen vor. Doch was sind Variablen?
Variablen sind Platzhalter! Es sind Speicherstellen im Hauptspeicher des Rechners. Stelle dir eine Variable einfach als Behältnis vor. Es ist ein Behältnis, das dir für die Dauer der Programmausführung zur Verfügung steht. Was du hineinpackst, bleibt dir überlassen. Du kannst den Inhalt der Variablen beliebig ändern und erweitern. Auch den Namen des »Behälters« selbst kannst du frei wählen. Na ja, fast frei zumindest.
$eimer
ein erlaubter Variablenname, nicht aber $meine schüssel
. (Verboten wegen des Leerzeichens und des Umlauts.) Der Bindestrich ist tabu, der Unterstrich (_) erlaubt. Er dient oft als Ersatz für das verbotene Leerzeichen. So wäre $dein_name
eine wunderbare Variable. Selbst kurze Variablen wie $i
oder $k
kannst du verwenden. Weiterhin gilt: Groß- und Kleinschreibung werden unterschieden. So sind $vorname
und $Vorname
zwei unterschiedliche Variablen. (Damit solche Probleme gar nicht erst auftreten, empfehle ich Dir zumindest für den Anfang generelle Kleinschreibung!)
while
, if
, switch
, for
und so weiter und so fort. Außerdem ganz wichtig: Beginne Variablennamen nie mit einer Zahl. Nicht funktionieren wird ein Name wie $68name
. (In den Variablen selbst sind jedoch Ziffern gestattet.)
Für unser »Katja-Beispiel« habe ich mir die Variable $vorname
ausgedacht. Dieser muss ich nur noch einen Wert zuweisen. Im Beispiel soll es der Name Katja sein. Wie mache ich das? So:
$vorname = "Katja";
Die Variable selbst steht links. Danach folgt ein sogenannter Zuweisungsoperator. Dann notiere ich den eigentlichen Wert des »Variablen-Platzhalters«. Und dieser befindet sich rechts, getreu dem Motto »Mein rechter, rechter Platz ist leer«.
Der gesamte Quelltext des PHP-Bereichs sieht so aus.
<?php $vorname = "Katja"; echo "Hallo $vorname!"; ?>
Denke an das Semikolon am Zeilenende. Jede Zeile wird in PHP in der Regel durch ein Semikolon abgeschlossen.
Hallo Katja! So sieht mein Beispiel aus.
Das Beispiel findest du bei den Downloaddateien im Ordner kapitel03
. Schaue in die Datei katja1.php
.
Ganz einfach! In der ersten Zeile taucht die Variable $vorname
das erste Mal auf. Du weist ihr gleich den Wert Katja zu. Doch warum steht Katja in Gänsefüßchen? Bei Katja handelt es sich um Text. Und Text entspricht dem sogenannten Datentyp String. Das muss durch Gänsefüßchen verdeutlicht werden, denn Strings müssen stets in Gänsefüßchen stehen. (Das können doppelte, aber auch einfache Anführungszeichen sein.)
true
oder false
kennen. (Es gibt noch ein paar weitere Typen, die uns in diesem Buch jedoch nicht weiter interessieren.) Wie du siehst, sind es alles in allem nur wenige Datentypen. Da PHP die Datentypen automatisch erkennt, musst du dich darum nicht weiter kümmern. (Der Fachmann sagt: Die Variablen sind nicht typisiert.)
In Zeile 1 hast du die Variable also initialisiert, wie der Profi sagen würde. Nicht vergessen: Die Zeile wird dann durch ein Semikolon abgeschlossen.
Noch einmal im Klartext: Wir haben uns unseren eigenen »Behälter« namens $vorname
eingerichtet und dort den Text Katja hineingetan.
Nun zur zweiten Zeile. Hier sorgt die echo
-Anweisung jetzt dafür, dass etwas ausgegeben wird. Das »Ausgabegut« steht übrigens wieder in Gänsefüßchen, diesmal zwingend in doppelten. Auch hier handelt es sich um Text. Richtig erkannt: Es wird ein String ausgegeben! Nach dem Wort Hallo und einem Leerzeichen hat unsere Variable $vorname
ihren großen Auftritt. Nun wird der Wert ausgegeben, der in der Variablen gespeichert ist. Dieser lautet Katja. Fazit: Im Browser erscheint der Text Hallo Katja.
Die Ausgabe gefällt dir noch nicht? Verschönere sie einfach. Du kannst im Zusammenhang mit echo
ganz problemlos HTML-Tags einsetzen. Die »Version 2« des Katja-Beispiels sieht folgendermaßen aus:
<?php $vorname = "Katja"; echo "Hallo <b>$vorname</b>!"; ?>
Wie du siehst, kannst du ganz problemlos HTML-Tags in deinen Ausgabe-String einfügen. Hier habe ich zusätzlich mit dem Tag-Paar <b></b>
für bold (fett) gearbeitet.
Passe dein Beispiel dementsprechend an. Speichere die Datei und aktualisiere die Ansicht im Browser. Dazu drückst du die Funktionstaste F5. Das geht natürlich nur, wenn du die Seite http://localhost/katja.php
noch aufgerufen hast.
Der Beweis: Ansicht im Browser und im HTML-Quelltext.
Wie du in der Abbildung siehst, werden die Tags korrekt ausgegeben. Zum Vergleich habe ich den Quelltext der »Webseite« aufgerufen. Das solltest du ruhig ebenfalls einmal probieren. Wähle dazu im Kontext-Menü den Befehl Seitenquelltext anzeigen, Quellcode anzeigen, Quelltext anzeigen o. Ä.
Hallo <b>Katja</b>!
an den Browser.
Das Beispiel findest du auch bei den Beispieldateien, und zwar wieder im Ordner kapitel03
. Der Dateiname dieser Version lautet katja2.php
.
PHP ist einfach! Der große Vorteil: Strings und Variablen müssen nicht verkettet werden. Zumindest gilt das in den meisten Fällen. Doch was ist mit Verketten überhaupt gemeint?
.
).
Schaue dir doch noch einmal unser Beispiel von eben an – es arbeitet nicht mit einer Verkettung:
<?php $vorname = "Katja"; echo "Hallo <b>$vorname</b>!"; ?>
Du setzt die Variable einfach so mir nichts, dir nichts in die Zeichenkette hinein. Das spart viel Schreibarbeit und scheint für uns ganz selbstverständlich zu sein. Ist es auch, denn diese raffinierte Technik ist eine Spezialität von PHP.
Was wir eben gemacht haben, ist bei den meisten anderen Programmiersprachen ein Ding der Unmöglichkeit. Da gilt: Eine Variable darf grundsätzlich nicht so einfach innerhalb von Gänsefüßchen notiert werden. Sie muss stets ohne Gänsefüßchen stehen. Sie wird mit dem String verkettet.
Und so geht es in PHP natürlich auch. Du kannst das Beispiel von oben also auch in der »klassischen Verkettungs-Variante« aufschreiben. Hier als die »Version 3« des »Katja-Beispiels«:
<?php $vorname = "Katja"; echo "Hallo <b>" . $vorname . "</b>!"; ?>
Das Ergebnis entspricht dem der Version 2. Nur die Schreibweise ist komplizierter geworden. Interessant ist dabei die zweite Zeile. Die Variable wird zu ihrer linken und rechten je mit dem umgebenden String verkettet. Die Ausgabe jedoch ändert sich nicht, es erscheint weiterhin der Text Hallo Katja! im Browser.
Da wir nun eigentlich keine doppelten Gänsefüßchen mehr brauchen, können wir das Beispiel auch so schreiben:
<?php $vorname = 'Katja'; echo 'Hallo <b>' . $vorname . '</b>!'; ?>
Wir umhüllen also alle Strings mit einfachen Gänsefüßchen. Diese verkettete Fassung mit einfachen Gänsefüßchen findest du in der Datei katja3.php
.
Warum habe ich dir diese umständliche Variante hier schon gezeigt? Wo ich sie doch nicht besonders mag? Nun, in manchen Fällen kommst du um das Verketten nicht drumherum. Zum Beispiel bei Funktionen.
Nehmen wir ein Beispiel. Angenommen, du möchtest den markigen Satz: Hallo Katja, willkommen in 2019! ausgeben. Weiterhin wünschst du, dass das Jahr automatisch erzeugt wird. (Wenn du das Buch in 2020 oder 2021 liest, soll natürlich auch 2020 bzw. 2021 ausgegeben werden.) Wie geht das? Mit einer Funktion! Du nimmst einfach eine entsprechende Funktion mit dem passenden Argument.
date("Y")
oder auch date('Y')
. Um genauer zu sein: Es ist eine Funktion mit Argument. Die Funktion selbst lautet dabei date()
. Das Argument ist die Zeichenfolge "Y"
. Auch hier gilt übrigens: Ob du die Zeichenfolge für das Argument in doppelte oder einfache Gänsefüßchen einkleidest, ist meist egal. Nur wenn nach zusätzlichen Variablen gesucht werden soll, brauchst du zwingend die doppelten Anführungszeichen. (Ich bleibe deshalb der Einfachheit halber wieder bei den double quotes.)
Die Jahreszahl wird durch die Funktion date("Y")
erzeugt.
Schreibe die entsprechende Zeile also folgendermaßen:
echo "Hallo <b>$vorname</b>, willkommen in " . date("Y") . "!";
Hier haben wir mithilfe der Verkettung dafür gesorgt, dass die Funktion »funktioniert«. Das Jahr wird korrekt berechnet. (Vergleiche, wenn du magst, mit dem Vorbild-Beispiel katja4.php
.)
Würdest du auf die Verkettung verzichten, wäre das Ergebnis grausam. Bei der Variante mit doppelten Gänsefüßchen date("Y")
würde es Fehlermeldungen hageln. Warum? Weil du versucht hast, gleichartige Gänsefüßchen ineinander zu verschachteln. Das solltest du dir also nicht antun.
Aber auch eine Veränderung von date("Y")
in date('Y')
führt nicht zum gewünschten Ergebnis. Zugegeben, das Gänsefüßchen-Problem haben wir damit auf raffinierte Art gelöst.
Folgender Quellcode
echo "Hallo <b>$vorname</b>, willkommen in date('Y')!";
führt jedoch zu dieser Anzeige:
Die Funktion wird nicht ausgeführt, sondern im Klartext angezeigt.
Was ist passiert? Statt die Funktion auszuführen, zeigt sie der Webserver im Klartext an. Kunststück, die Funktion wurde als String behandelt, als einfache Zeichenfolge. Fazit: Bei Funktionen kommst du, anders als bei Variablen, um das Verketten nicht drumherum.
Kennst du den »Breakdance«? Oder das berühmt-berüchtigte englische »Breakfast«? Alles hat irgendwie mit »Brechen« zu tun. Beim Breakdance bricht man sich womöglich die Knochen, beim englischen »Breakfast« … nein, lassen wir das jetzt.
Ich wollte eigentlich auf den Break hinaus, auf den Umbruch. Ich zeige dir, wie du problemlos einen Zeilenumbruch (<br>
) in dein Dokument zauberst.
Dafür erweitern wir einfach mal unser Katja-Beispiel. Ich greife dafür auf eine frühere Fassung zurück, auf unsere Version 2: Hier noch einmal der PHP-Teil:
<?php $vorname = "Katja"; echo "Hallo <b>$vorname</b>!"; ?>
Und jetzt ergänzen wir eine zweite echo
-Zeile! Damit die neue Zeile auch wirklich auf die »neue Zeile« rutscht, füge ich zusätzlich einen HTML-Umbruch ein. Dafür sorgt das Zeichen <br>
.
<?php $vorname = "Katja"; echo "Hallo <b>$vorname</b>!<br>"; echo "Super, dass du mal vorbeischaust."; ?>
Im Browser sieht das Ganze so aus, zusätzlich habe ich über den Kontextmenü-Befehl Quellcode anzeigen (Internet Explorer) bzw. Seitenquelltext Anzeigen (Firefox) gleich den HTML-Quelltext aufgerufen:
Im Quelltext siehst du zwar das Tag <br>, aber keinen Zeilenumbruch.
Bisher haben wir nur einen Umbruch im Browser erzeugt. Im Hintergrund findet jedoch kein Zeilenumbruch statt. Dieses Beispiel findest du bei den Beispieldateien unter dem Namen katja-br.php
.
Wie wäre es zusätzlich noch mit einem Umbruch im Quelltext? Zugegeben, bei zwei Zeilen ist das vielleicht nicht so wichtig. Doch wenn du häufiger mit echo
arbeitest, entsteht irgendwann eine »Endlos-Zeile« im Code.
Wenn du hinter den Kulissen einen Zeilenumbruch wünschst, verwendest du den PHP-Befehl new line
. Das entsprechende Zeichen heißt: \n
.
Vor dem n wird lediglich ein Backslash notiert, ein rückwärtsgelehnter Schrägstrich. Das n selbst steht als Abkürzung für new line
. Und so sieht das renovierte Beispiel aus, ich habe gleich zweimal mit \n
gearbeitet:
<?php $vorname = "Katja"; echo "Hallo <b>$vorname</b>!<br>\n"; echo "Super, dass du mal vorbeischaust.\n"; ?>
Beim Aufruf im Browser wirst du keinen Unterschied zur vorherigen Variante feststellen. Nur der Blick in den Quelltext offenbart den kleinen, aber feinen Unterschied:
Mit \n
erzeugst du die Zeilenumbrüche auch im Quelltext.
Vergleiche mit der Datei katja-nl.php
.
Mit dem Backslash hat es eine besondere Bewandtnis. Eben habe ich dir diesen »schiefen Kollegen« im Zusammenhang mit dem »Zeilenumbruch« vorgestellt. Mit \n
wird eine neue Zeile im Editor erzeugt, du erinnerst dich.
In diesem Fall wird unser »Strich-Kumpel« also zu einem Steuerbefehl für die Anzeige des Quelltexts.
Es gibt übrigens noch mehr solcher interessanten Steuerbefehle. Die wichtigsten davon stelle ich dir in dieser Tabelle vor:
\n | \r | \t |
---|---|---|
erzeugt neue Zeile | erzeugt return (neuen Absatz) | erzeugt Tabulatorschritt (Sprung) |
Gut, damit haben wir die eine Bedeutung geklärt. Doch hast du schon einmal darüber nachgedacht, was das komische Zeichen »\« wohl sonst noch bedeuten mag?
Dieser Backslash (\
) wird auch als »Escape-Zeichen« bezeichnet. Denn normalerweise dient er zum Maskieren bestimmter Sonderzeichen, die du sonst nicht so einfach ausgeben darfst.
Doch wenn du unbedingt die Gänsefüßchen benötigst? Vielleicht, weil du eine Passage in Anführungszeichen setzen willst? Die eine Möglichkeit lautet: Ersetze die Gänsefüßchen durch einfache Gedankenstriche.
Die andere Lösung: »Maskiere die Gänsefüßchen« durch das Escape-Zeichen.
<?php $vorname = "Katja"; echo "Hallo <b>\"$vorname\"</b>!<br>\n"; ?>
Das Ergebnis im Browser sieht dann so aus:
Nach dem »Escapen« werden auch Gänsefüßchen korrekt angezeigt.
Vergleiche mit der Datei escape.php
.
$
) oder den Backslash (\
) maskieren, falls du diese Zeichen per echo
als HTML ausgeben willst. Denn auch diese Zeichen haben normalerweise eine Sonderbedeutung.
Steigst du noch durch deinen Quelltext durch? Klar doch! Bei zwei oder drei Zeilen ist das alles noch kein Problem.
Doch wie sieht das bei umfangreichen Projekten aus? Weißt du nach Wochen immer noch genau, was die geniale Zeile 87 macht? Und wozu die schließende geschweifte Klammer in Zeile 145 dient? Der Mensch vergisst … und auch Buchautoren haben nicht immer das beste Gedächtnis.
Willst du schnell mal einen einzeiligen Kommentar setzen, verwendest du den Doppelslash //
:
// Das ist ein einzeiliger Kommentar
Du kannst diesen Kommentar auch direkt an das Ende einer Zeile setzen, z.B. folgendermaßen:
$vorname = "Katja"; // Variable $vorname initialisieren
Wenn du dagegen »ganze Romane« schreiben möchtest, bietet dir PHP auch dafür eine Möglichkeit. Fasse deine mehrzeiligen Kommentare zwischen den Zeichen /*
und */
zusammen:
/* Das ist ein Kommentar, der sich im Beispiel gleich über mehrere Zeilen erstreckt und Platz im Buch verschwendet */
Es ist zum Auswachsen. Du tippst deinen Code und lädst das Dokument in den Webserver. Eine Fehlermeldung taucht auf. Du korrigierst, lädst erneut – der Fehler bleibt. Ach ja, das Speichern. Du hattest vergessen, vor dem Aktualisieren zu speichern. Neu laden und – was sehen deine vom Bildschirmflimmern überanstrengten Äuglein jetzt? Eine neue Fehlermeldung!
Es gibt Momente, da würde Buchautor Hanke den PC mitsamt Monitor oder das Notebook am liebsten aus dem Fenster werfen. Doch halt! Cool bleiben, lautet die Devise. Hier ein paar Tipps, wie du Fehler vermeiden kannst.
Vergiss nicht, dass eine Programmier-Zeile am Ende mit einem Semikolon abgeschlossen werden muss. Das vergessene Semikolon ist einer der häufigsten Fehler. Praktisch alle Zeilen müssen mit einem Semikolon abgeschlossen werden. (Nur in Ausnahmefällen lässt du das Semikolon weg. Aber darauf komme ich noch.)
Grausam: Schon ein vergessenes Semikolon führt zu einer Fehlermeldung. Wo kommt nur diese dämliche Fehlermeldung her?
Schaue dir die Abbildung an. Das Gemeine an der Geschichte: Die Fehlermeldung bezieht sich nicht etwa auf die Zeile, in der das Semikolon fehlt. Es wird die nächste Zeile (hier Zeile 14) moniert. Klar, denn da du das Semikolon vergessen hast, weiß der »PHP-Interpreter« nicht, dass die Zeile schon zu Ende war.
Ein anderer typischer Fehler schleicht sich immer wieder bei den Variablen ein. Hast du dem Variablennamen auch wirklich ein Dollarzeichen vorangestellt?
Verschreiber bei den Variablennamen gehören ebenfalls zu den häufigsten Fehlern.
Wenn ich Dollarzeichen sage, meine ich auch Dollarzeichen. Mir passiert es gelegentlich, dass ich eine Variable statt $vorname
als §vorname
schreibe. Was ich hier im guten Glauben richtig gemacht zu haben glaubte, ist natürlich ein Fehler. Hast du die Groß- und Kleinschreibung bei Variablen beachtet? Wenn du die Variable mit $Vorname
initialisierst und versuchst, mit $vorname
darauf zuzugreifen, kann das einfach nicht gelingen.
Variablen dürfen außerdem nicht mit einer Zahl beginnen, eine Bezeichnung $68vorname
würde ebenfalls zu einer Fehlermeldung führen.
Ein anderer typischer Fehler ist das Vergessen eines Gänsefüßchens. Wenn du statt
$vorname = "Katja";
einfach schreibst
$vorname = "Katja;
gibt es auf jeden Fall Probleme. Jedes »einschaltende« Gänsefüßchen benötigt auch ein »Ausschalt-Pendant«.
Apropos Ein- und Ausschalten. Im Verlauf des Buches wirst du mit »Klammer-Blöcken« arbeiten. Nutze die schon von CSS bekannten geschweiften Klammern { }
, um mehrere Zeilen zu einem Block zusammenzufassen. Bei den sogenannten Fallunterscheidungen oder den Schleifen zeige ich dir dieses Prinzip später noch ganz genau. So viel schon vorweg: Auch das versehentliche Vergessen einer öffnenden oder schließenden Klammer führt natürlich zu Fehlermeldungen.
Probleme gibt es vor allem dann, wenn du mehrere »Klammern-Blöcke« ineinander verschachteln musst und nicht mehr durchblickst, wo welche Klammer nun geschlossen werden soll. Auch hier schon an dieser Stelle mein Tipp: Kommentare setzen! Notiere, wo du welche Klammer öffnest und wieder schließt.
http://localhost/katja.php
? Das einfache Doppelklicken auf den Eintrag funktioniert nicht. Vergiss nicht, dass PHP erst durch den »Webserver gezogen werden muss«: Bei PHP handelt es sich schließlich um Server-Programmierung!
Was für ein Kapitel! Du kannst nun programmieren. Na gut, ein wenig zumindest schon. Du kennst Variablen, weißt, wie du Text ausgibst, und kämpfst (hoffentlich erfolgreich) mit einer Vielzahl von Fehlern.
.php
sind. Du weißt, dass PHP-Bereiche von <?php ... ?>
umschlossen werden.echo
zur Ausgabe von Daten. Setze den auszugebenden String in einfache oder doppelte Anführungszeichen, schließe die Zeile durch ein Semikolon ab: echo "Hallo Welt!";
$vorname = "Katja";
(Die Leerzeichen vor und nach dem Ist-gleich-Zeichen haben lediglich eine optische Funktion.)echo
selbst mit HMTL-Tags arbeiten kannst. Notiere Strings und Variablen einfach innerhalb eines doppelten Gänsefüßchen-Paars. Du benötigst keinen Verkettungsoperator, wenn du mehrere Elemente zu einem String zusammensetzen möchtest. Eine Zeile wie echo "Hallo <b>$vorname</b>!";
ist für PHP kein Problem.date()
kennengelernt.\n
, mit dem man einen Zeilenumbruch auch im HTML-Quelltext erzeugt. Du weißt, dass man mit \
sonst nicht darstellbare Sonderzeichen wie "
oder $
maskieren (escapen) kann: Schreibe z.B. \"
bzw. \$
.//
, mehrzeilige Kommentare kleidest du in die Zeichen /*
und */
ein.fun.php
.$vorname
, die zweite $nachname
. Gib den Namen mit PHP aus, indem du diese beiden Zeichenketten gemeinsam ausgibst. Speichere das Dokument unter dem Namen kumpel.php
.kumpel.php
einen Kommentar ein, der dir jede Zeile erklärt.Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
978-3-95845-569-6
8. Auflage 2019
www.mitp.de
E-Mail:
mitp-verlag@sigloch.de
Telefon:
+49 7953 / 7189 - 079
Telefax:
+49 7953 / 7189 - 082
© 2019 mitp-Verlags GmbH & Co. KG, Frechen
Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Lektorat:
Katja Völpel
Sprachkorrektorat:
Petra Heubach-Erdmann
Covergestaltung:
Christian Kalkert, Sandrina Dralle
Coverhintergrundgrafik:
Adobe Stock/Maksim Kabakou
Satz (E-Book):
Joh.-Christian Hanke, www.buchlayout.info
Dieses E-Book verwendet das EPUB-Format und ist optimiert für die Nutzung mit dem iBooks-Reader auf dem iPad von Apple. Bei der Verwendung anderer Reader kann es zu Darstellungsproblemen kommen.
Der Verlag räumt Ihnen mit dem Kauf des E-Books das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheherrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und Einspeicherung und Verarbeitung in elektronischen Systemen.
Der Verlag schützt seine E-Books vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die E-Books mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert.
Bei Kauf in anderen E-Book-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.
Time is money, Zeit ist Geld! So lautet das »gnadenlose Motto« vieler Erwachsener. Ich habe mir für dieses Kapitel einen ungleich besseren Wahlspruch ausgedacht. Er lautet: Time is fun, Zeit macht Spaß.
In diesem Sinne stürzen wir uns nun ins Abenteuer Zeit. In diesem Kapitel lernst du:
Bist du up to date? Ich bin es nicht! Wenn mich einer nach dem Datum fragt, zucke ich meist mit der Schulter. Wozu gibt es denn Computer? Fragen wir doch einmal den Webserver, welches Datum wir gerade haben.
Du möchtest Datum und Uhrzeit ermitteln? Dann brauchst du die Funktion date()
. Erinnerst du dich? Wir hatten uns diese Funktion im vorigen Kapitel kurz angeschaut, allerdings nur im Zusammenhang mit dem Jahr. Der Code zum Ermitteln des aktuellen Jahrs lautet: date("Y")
. Als Ergebnis bekommst du eine vierstellige Jahresanzeige wie 2019.
Doch das Jahr alleine reicht mir nicht aus. Selbst der schusselige Buchautor kennt in der Regel den richtigen Jahrgang! Wo bleiben die Monate, die Tage? Die holen wir uns schnell dazu. Füge der Funktion einfach weitere »Schalter« hinzu.
Angenommen, du möchtest das Datum im Format 1.8.20 ausgeben. Also den Tag und den Monat ohne führende Null und das Jahr mit zwei Stellen. Dann schreibst du z.B.
echo date("j.n.y");
Wichtig sind die Buchstaben j
, n
und y
. Die Punkte dienen lediglich zum »Gestalten«.
Ran an die Praxis, probiere das doch gleich einmal aus. Erstelle eine neue PHP-Datei, ich schlage den Namen datum1.php
vor. Wir wollen das aktuelle Datum mit der eben beschriebenen Funktion ausgeben.
Ich zeige dir auf der nächsten Seite, was ich zwischen den Tags <body></body>
notiert habe:
<h2>Das aktuelle Datum ausgeben</h2> <p> <?php echo date("j.n.y"); ?> </p>
Diese Funktion verrät dir stets das aktuelle Datum, im Beispiel war es der 17. August 2018.
In der folgenden Tabelle habe ich dir die wichtigsten Schalter zur Ermittlung des Datums aufgeschrieben. Bitte bekomme keinen Schreck, denn hinterher probieren wir das Ganze an weiteren Beispielen aus!
Schalter | Erklärung | Beispiel |
---|---|---|
j |
Monatstag ohne führende Null | 1 bis 31 |
d |
Monatstag mit führender Null | 01 bis 31 |
n |
Monatszahl ohne führende Null | 1 bis 12 |
m |
Monatszahl mit führender Null | 01 bis 12 |
S |
englisches Aufzählungszeichen (st, rd, th) | 1st 3rd 5th |
y |
Jahreszahl mit zwei Stellen | 19 |
Y |
Jahreszahl mit vier Stellen | 2020 |
D |
Wochentag in drei Buchstaben | Mon |
l (kleines »L«) |
Wochentag, ausgeschrieben | Monday |
M |
Monatsname in drei Buchstaben | Jan |
F |
Monatsname, ausgeschrieben | January |
N |
Wochentag als Zahl von 1 bis 7 (1 = Montag) | 1 bis 7 |
w |
Wochentag als Zahl von 0 bis 6 (0 = Sonntag) | 0 bis 6 |
z |
Tag des Jahres als Zahl | 0 bis 365 |
t |
Anzahl der Tage in einem Monat | 28 bis 31 |
Schauen wir uns ein paar Praxisbeispiele an! Du möchtest nur den Wochentag in der Langform ausgeben? Dann genügt folgende Zeile:
echo date("l");
Sollte es das Datum in voller Pracht sein? Wochentag und Monat jeweils mit führender 0, also nach dem Muster 01.05.
? Und das Jahr in vierstelliger Schreibweise nach dem Schema 2019
oder 2020
? Dann notierst du einfach:
echo date("d.m.Y");
Du wünschst z.B. folgende englische Schreibweise: 3rd of July 2019? Dann versuche Folgendes – das of musst du zusätzlich durch einen Backslash »maskieren«, damit es auch im Klartext angezeigt wird:
echo date("jS \of F Y");
date()
mit Leerzeichen und in Grenzen selbst mit anderen Zeichen wie hier mit dem Punkt. Setze diese Zeichen einfach an der gewünschten Stelle innerhalb von date("")
ein, wie bei diesem Beispiel: date("d.m.Y")
. Die Punkte dienen hier lediglich als kosmetisches Beiwerk. Eine längere Zeichenfolge wie das of geht auch, muss aber zusätzlich durch einen Backslash maskiert werden. Im Zweifelsfalle lautet die Devise: Probiere aus, was geht und was nicht geht.
Du möchtest angeben, wie viele Tage der aktuelle Monat hat? Du willst den aktuellen Monat dabei ausschreiben (auf Englisch). Dann notierst du beispielsweise folgenden Code (auf einer Zeile):
echo "Der " . date("F") . " hat " . date("t") . " Tage.";
Beachte, dass du hierbei wieder mit einer Verkettung arbeiten musst. Ansonsten wird die Funktion nicht aktiviert.
Einige Beispiele für die Funktion date()
: Mit den entsprechenden Schaltern gelingt dir die gewünschte Schreibweise im Nu.
Schaue dir zum Vergleichen meine Beispieldatei an. Du findest sie im Ordner kapitel04
unter dem Namen datum2.php
.
Niemand, hoffe ich. Zumal die Zeitanzeige in PHP sowieso digital erfolgt. Das Drehen an irgendwelchen Zeigern ist schon aus diesem Grund gar nicht möglich.
Wie zeigt man die Uhrzeit an? Auch hier hilft uns die Funktion date()
aus der Patsche. Und wieder brauchen wir – du ahnst es sicher längst – ganz bestimmte Schalterchen für diesen Zweck. Die wichtigsten Schalter lauten H
(Stunden im 24-Stunden-Format), i
(Minuten mit führender Null von 00 bis 59) und s
(Sekunden von 00 bis 59). Wenn du die Stunden, Minuten und Sekunden anzeigen möchtest, schreibst du:
echo date("H:i:s");
Wie du siehst, arbeite ich auch hier mit Formatierzeichen. Diesmal verwende ich den für die Uhrzeit typischen Doppelpunkt (:
).
In der folgenden Tabelle habe ich dir die wichtigsten Schalter zur Ausgabe der Uhrzeit aufgeschrieben. Tröstlich – es sind im Gegensatz zum Datum viel weniger:
Schalter | Erklärung | Beispiel |
---|---|---|
a |
am oder pm | am |
A |
AM oder PM (in Großschreibung) | AM |
h |
Stunde im 12-h-Format | 1 bis 12 |
H |
Stunde im 24-h-Format | 1 bis 24 |
i |
Minuten von 00 bis 59 | 04 |
s |
Sekunden von 00 bis 59 | 12 |
Zum Ausprobieren schlage ich ein kleines Beispieldokument vor. Nenne es uhrzeit.php
. Ich zeige dir lediglich den Teil zwischen den Tags <body></body>
, der Rest ist ganz normales HTML.
<h3>Beim Aufruf dieser Seite war es genau ...</h3> <p> <?php echo date("H:i:s") . " Uhr"; ?> </p>
Für die genaue Uhrzeit musst du ständig auf den Reload-Button klicken.
Es gibt auch Schalter, mit denen du Datum und Uhrzeit zusammen anzeigen kannst. Und zwar in zwei verschiedenen Varianten. Es sind die Schalter c
und r
. Und was sie bewirken, zeige ich dir am besten im Screenshot.
Diese Seite wurde am 23. Januar 2019 um 22:00 Uhr und 46 Sekunden aufgerufen.
Das erste Datum folgt dem sogenannten ISO-8601-Standard, das zweite einem Standard namens RFC 2822. Die +01:00 bedeutet: Der Zeitunterschied zur Greenwich Mean Time (GMT) in Stunden.
Auch die nächsten Schalter beweisen, dass man in PHP noch sein eigenes »Zeitzonensüppchen« kocht.
Schalter | Erklärung | Beispiel |
---|---|---|
e |
Zeitzonen-Bezeichner | Atlantic/Azores, Europe/Berlin |
I (großes »i«) |
Sommerzeit oder nicht? | 1 = ja, 0 = nein |
O (Buchstabe 0) |
Zeitunterschied zur GMT | +0200 |
P |
Zeitunterschied zur GMT mit Doppelpunkt | +02:00 |
T |
Abkürzung der Zeitzone | EST, MDT, MST |
So, das war reinweg zur Information. Merken musst du dir das nicht. Mache einfach mal eine Pause …
Wenn, ja, wenn das Wörtchen wenn nicht wär’ … Dann wär’ das Leben nur halb so schwer. Stoßen deine Eltern, Tanten oder Bekannten auch manchmal solche hilflosen Drohungen aus wie: »Wenn du nicht gleich dein Zimmer aufräumst, gibt es kein Fernsehen« oder »Wenn du nicht sofort deine Hausaufgaben machst, darfst du nicht runter auf die Straße«?
Egal ob »unerfreuliche Gegenwart« oder »düstere Vergangenheit«. In diesem Buch sehen wir alles von der optimistisch-heiteren Seite! Glaube es oder nicht: Mit diesen »Beweisen erzieherischer Intoleranz« haben dir deine Erzeuger ganz unbewusst wertvollen Anschauungsunterricht zur Informatik erteilt. Es geht um die Entscheidungsstrukturen.
Nehmen wir doch einmal das »Fernseh-Beispiel«. Formulieren wir es streng logisch: »Wenn du dein Zimmer aufräumst, gibt es Fernsehen, sonst gibt es kein Fernsehen.«
Die dazugehörige Schreibweise in der Programmiersprache PHP sieht folgendermaßen aus – die Betonung liegt hierbei auf wenn und sonst:
Wenn (Zimmeraufräumen) { Fernsehen; } sonst { kein Fernsehen; }
Zugegeben, in der Programmiererei »spricht man« Englisch. Aus wenn wird if
und aus sonst else
. Und da man beim Programmieren schlecht mit »Fernsehen« und »kein Fernsehen« arbeiten kann, fassen wir es allgemeiner. Nennen wir die beiden Fälle Fall A und Fall B. Dann sieht unser Grundgerüst folgendermaßen aus:
if (Bedingung) { Fall A; } else { Fall B; }
Mit anderen Worten: Es wird eine Bedingung geprüft. Wenn diese Bedingung wahr ist, tritt Fall A in Kraft. Sonst – also wenn die Bedingung nicht wahr ist – führt das Programm Fall B aus.
else
-Zweig auch weggelassen werden. Dann sieht die if
-Konstruktion vom Schema her so aus:if (Bedingung) {
Fall A;
}
Es genügt also, ganz einfach die Bedingung zu prüfen. Von der Logik her macht das Sinn. Auch beim »Fernseh-Beispiel« weiß Tochter oder Sohn ganz genau, was ihr oder ihm blüht, wenn sie/er das Zimmer nicht aufräumt.
Sicher fällt dir schon an diesem Beispiel ein interessantes »Detail« ins Auge. Zusammengehörende Ausdrücke wie bei diesen if
-Strukturen werden in PHP in der Regel durch ein Paar geschweifter Klammern zusammengehalten { }. Dadurch fasst du diese Ausdrücke zu einem sogenannten Block zusammen. Dabei gilt: Die Zeile mit der Klammer wird ausnahmsweise nicht mit einem Semikolon abgeschlossen.
if (Bedingung) {
Ich empfehle dir sehr die von mir verwendete Schreibweise: Schaue dir das Beispiel an. Die öffnende geschweifte Klammer setzt du direkt nach einem Leerzeichen an das Ende der Zeile. So wirst du auch besser daran erinnert, an dieser Stelle kein Semikolon zu setzen.
Der schließenden geschweiften Klammer spendierst du dagegen eine eigene Zeile. Auch hier ist kein Semikolon erlaubt:
}
Ich habe noch einen ganz heißen Tipp für dich: Immer wenn ich eine öffnende geschweifte Klammer schreibe, setze ich sofort das Gegenstück. Egal, wie viele Codezeilen ich später noch dazwischen schreiben muss.
Warum? So habe ich immerhin schon einmal den Block geschlossen. Denn das Vergessen einer schließenden Klammer ist eine häufige Fehlerursache! Mit meinem Trick ersparst du dir oft stundenlanges Suchen.
Hier noch einmal in Kurzform: Wenn du eine öffnende Klammer schreibst, drückst du ein paar Mal auf Enter und notierst danach die schließende Klammer.
dokumente/code_einrueckung
und ganz ausführlich auch im Nachfolgeband »PHP und MySQL Praxisbuch für Kids« in Kapitel 2.
Grau ist alle Theorie (und zwar selbst bei Farbfernsehen). Deshalb machen wir gemeinsam eine Pause – eine Mittagspause! Und damit es auch alle Besucher deiner Website merken, teilst du es ihnen einfach mit.
Das folgende Beispiel soll zwischen 12:00 Uhr und 13:00 Uhr (genauer zwischen 12:00 Uhr und 12:59 Uhr und 59 Sekunden) den Text anzeigen: »Wir machen Mittagspause.« Ansonsten soll der Text »Willkommen auf unserer Seite!« erscheinen. Wie geht das? Ganz einfach! Du brauchst lediglich die Funktion date()
mit dem Schalter H
. Schließlich verrät dir date("H")
ganz genau, »was die Stunde geschlagen hat«.
Hier mein Musterbeispiel, das ich pause.php
nenne. Ich zeige dir den wichtigsten Teil der Datei:
<h3>Pause zwischen 12:00 und 13:00 Uhr!</h3> <p> <?php if (date("H") == 12) { echo "Wir machen Mittagspause."; } else { echo "Willkommen auf unserer Seite!"; } ?> </p>
Zwischen zwölf und eins macht jeder seins … Mittagspause!
Du kannst gerne mit dem Musterbeispiel aus den Beispieldateien vergleichen. Schaue in den Ordner kapitel04
.
Jetzt schauen wir uns die Funktionsweise dieses Beispiels einmal genauer an. Zuerst schreibst du das Schlüsselwort if
und tippst ein Leerzeichen. In den runden Klammern wird nun die Bedingung auf ihren Wahrheitswert überprüft. Die Funktion date("H")
ist dir vertraut, doch was hat das doppelte Gleichheitszeichen an dieser Stelle verloren?
==
) ist der sogenannte Vergleichsoperator. Aus dem Mathematikunterricht kennst du das einfache Istgleich. Das gibt es in PHP auch, wie ich dir im vorigen Kapitel bewiesen habe. Das einfache Istgleich (=
) ist jedoch nur der Zuweisungsoperator. Mit $vorname = "Katja"
; hast du der Variablen $vorname
z.B. den String Katja
zugewiesen. Damit es nicht zu Verwechslungen kommt, hat man als Vergleichsoperator in PHP deshalb das doppelte Istgleich (==
) gewählt. Achtung aufgepasst! Verwechsle die beiden Operatoren deshalb auf keinen Fall, du musst zum Vergleichen unbedingt das doppelte Istgleich (==
) verwenden!
Der Vergleich liest sich also so: Wenn es wahr ist, dass der von date("H")
zurückgegebene Zahlwert (also die Uhrzeit) der Zahl 12 entspricht, dann wird die nächste Zeile ausgeführt. Diese Zeile macht nichts weiter, als den Text »Wir machen Mittagspause.« auszugeben. Tipp: Falls es bei dir zufällig gerade nicht 12 Uhr ist, kannst du diesen Wert probeweise verändern. (Oder du stellst einfach mal die Uhr deines PCs um.)
Wenn dieser Vergleich jedoch nicht wahr ist? Dann wird der else
-Zweig ausgeführt. Und dieser gibt lediglich den Satz »Willkommen auf unserer Seite!« aus. Einfach, oder?
if
-Block, zum anderen mit dem else
else