PHP und MySQL für Kids

23,3 mm 6. Auflage anke Johann-Christian H ISBN 978-3-8266-8649-8 Der Bestseller aktualisiert in der 6. Auflage! Alles...

235 downloads 4960 Views 15MB Size Report

This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!

Report copyright / DMCA form



Breite festlegen über Inline-CSS Fehlt noch die Breite (width). Richtig, das könnten wir in der CSS-Datei festlegen. Zu umständlich! Es handelt sich schließlich nur um eine einzige Angabe. Wir lösen das Ganze deshalb kurz und schmerzlos mit Inline-CSS. Bei Inline-CSS werden die CSS-Anweisungen direkt im Tag notiert. Ich habe es dir in Zusammenhang mit text-align (Absatzausrichtung), border (Rahmen), width (Breite) und height (Höhe) schon gezeigt! Eine Inline-CSS-Passage beginnt mit dem Attribut style="...". Die CSS-Regeln werden nun innerhalb der Gänsefüßchen notiert. Inline-CSS ist dann ideal, wenn man kurze Anweisungen festlegen möchte, die sich nicht wiederholen sollen. 58

Eine Umfrage! Wie findest du meine Page? Gehe deshalb in das einschaltende
. Ergänze style="width: 600px;". Insgesamt sieht das Tag also so aus:


Exakte Breite durch die CSS-Regel width: 600px;

Eine Umfrage! Wie findest du meine Page? Du möchtest wissen, wie deine Seite bei den Besuchern ankommt? Erstelle eine Umfrage! Dazu nimmst du einfach eine neue Seite, die wir im Beispiel umfrage.html nennen. Speichere sie ebenfalls unter C:/phpkid/html.

>

Baue die Seite auf dem schon bekannten Grundgerüst auf. Füge ebenfalls den schon verwendeten CSS-Link zur Datei phpkid.css ein! Eine Umfrage mit Radioknöpfen – Der Besucher wählt eine Option aus.

Ein Formular mit Radioknöpfen Und hier zeige ich dir den kompletten Quelltext dieser Umfrage. Denke zuallererst an den Titel. Passe den Bereich zwischen an. Setze eine Überschrift in das Dokument.

59

Kapitel

1

Deine coole Homepage mit HTML Aus Platzgründen habe ich den HTML-Code im Gegensatz zur index.html nicht eingerückt. Es ist schließlich keine Pflicht. Und wenn du doch einrücken willst: Es gibt in PSPad eine clevere Automatik. Mehr dazu gleich …

Umfrage: Wie findest du meine Seite? <meta http-equiv="content-type" content="text/html; charset=utf-8">

Wie findest du meine Page?

echt super
ziemlich gut
geht so



Das eigentliche Formular beginnt mit dem
-Tag. Du musst hier außerdem das Attribut action eintragen. Wir haben es jedoch leer gelassen. (Vergiss nicht, das Formular mit
auch wieder abzuschalten.) Im Formular selber arbeiten wir mit sogenannten Radiobuttons. Dieser Typ wurde tatsächlich von alten Röhrenradios abgeschaut. Drückt man einen Knopf rein, springt der andere heraus. Radiobuttons werden auch als Kontrollkästchen bezeichnet. Radiobuttons werden mit erzeugt. Gib allen zusammengehörigen Buttons den gleichen Namen. Dazu dient das Attribut name. Im Beispiel heißen alle Buttons ergebnis. Der value wiederum ist der Wert, den der Button beim Absenden »mitschickt«. Hier bekommt jeder Button einen eigenen Wert, z. B. 1, 2 und 3. Das dient zum späteren Wiedererkennen. Du als »Formularbesitzer« bekommst schließlich das Name-Werte-Paar zugeschickt, z. B. ergebnis="1". 60

Tipps und Tricks zu PSPad

Submit! Doch wo bleibt die Action? Jedes Formular benötigt zum Abschicken einen Submit-Button. Submit steht für Versenden, übermitteln. Dieser Button sieht im Beispiel so aus:

Der Wert hinter dem Attribut ist übrigens die Beschriftung. Du könntest hier auch »Los!« oder »Klicken auf eigene Gefahr« eintragen. Aber darauf will ich nicht hinaus. Klappe die Erste. Und Action! Wenn du auf den Submit-Button klickst, geht die »Action« los. Es passiert … nichts. Oder fast nichts. Kunststück. Schließlich passiert das, was wir im einleitenden
-Tag hinter action notiert haben. Doch da steht bis jetzt ebenfalls nichts. So ganz stimmt das nicht mit dem »nichts«. Schaue doch einmal in die Adress-Leiste des Browsers. Nach dem Klicken wird hinter die Adresse noch ein Fragezeichen angehangen. Nun steht hier plötzlich z. B. ergebnis=2 (je nachdem, welche Auswahl du getroffen hast). Das ist doch sehr interessant! Mehr können wir an dieser Stelle jedoch nicht machen. Zum Auswerten des Formularinhalts kommen wir allein mit HTML nicht weiter. Hier brauchen wir PHP.

Ein Grund mehr, PHP zu lernen!

Tipps und Tricks zu PSPad PSPad ist ein toller Editor mit vielen genialen Funktionen. Man muss sie nur kennen.

HTML-Quellcode automatisch ausrichten Du möchtest den HTML-Quellcode schön einrücken und formatieren? Damit es ordentlich und übersichtlich aussieht? HTML-Kenner wissen: Zusätzliche Umbrüche und Leerzeichen im Editor werden nicht im Browser dargestellt. Fazit: Gliedere und formatiere den Quellcode so, wie du magst. Per Leerzeichen eingerückt, mit zusätzlichen Leerabsätzen und und und … Keine Lust, das Gliedern von Hand zu erledigen? PSPad bietet dir gleich zwei Tools. Die »sanfte« Variante findest du unter HTML|HTML-CODE NEU

61

Kapitel

1

Deine coole Homepage mit HTML STRUKTURIEREN.

Der Code wird ausgerichtet und automatisch eingerückt. Ab und an musst du noch ein überschüssiges Leerzeichen entfernen, denn in dieser Beziehung ist das Tool noch nicht perfekt. Schärfere Geschütze führt »Tidy« auf, tidy up heißt saubermachen. Wähle z. B. HTML|TIDY|TIDY CLEAN DOCUMENT WRAP oder TIDY CLEAN DOCUMENT NOWRAP und staune! Tidy darfst du aber nur bei reinen HTML-Dateien anwenden. Sobald PHP mit dazukommt, ist dieser »Code-Verschönerer« tabu! Tidy schreibt automatisch eine zusätzliche Meta-Zeile in das Dokument: <meta name="generator" content="HTML Tidy for Windows...

Diese Zeile kannst du löschen.

Automatischen Zeilenumbruch einfügen Du hast den Quellcode automatisch ausgerichtet, aber auf die Umbrüche verzichtet? Die Zeilen sind nun so lang, dass du ständig scrollen musst? Schalte die automatischen Zeilenumbrüche an. Wähle ANSICHT|ZEILENUMBRUCH. Der Umbruch erfolgt jetzt rein optisch für die Anzeige im Editor, wird jedoch nicht mitgespeichert.

Mehr Überblick in der Codeansicht Der Quellcode wird zu klein angezeigt, du kannst ihn nicht lesen? Oder du möchtest alles auf einen Blick sehen? Na dann zoome doch einfach – so wie vom Internetbrowser oder aus der Textverarbeitung bekannt. Halte die Taste [Strg] gedrückt und drehe am Mausrad.

Lesezeichen für mehr Übersicht Genial finde ich auch die Möglichkeit, mit Lesezeichen zu arbeiten. So kannst du dir besonders bei langen Codeabschnitten wichtige Zeilen besser »merken«. Mit [Alt] + [æ] setzt du ein (gelbes) Lesezeichen. Mit [Alt] + [Æ] dagegen kannst du ein einmal gesetztes (gelbes) Lesezeichen wieder löschen. Mit den Tastentricks [Alt] + [¼] bzw. [Alt] + [½] springst du zwischen mehreren Lesezeichen hin und her. Weitere (rote) Lesezeichen gibt es auch. Die setzt du am besten über das Kontextmenü. Nach dem Schließen der Datei werden die Lesezeichen automatisch gelöscht.

Datei vom Windows-Explorer aus öffnen 62

Eines der genialsten Features von PSPad? Das ist für mich eindeutig die Möglichkeit, Dateien direkt vom Windows-Explorer aus laden zu können.

Tipps und Tricks zu PSPad Und zwar über das Kontextmenü. Klicke also mit der rechten Maustaste auf die zu öffnende Datei, beispielsweise die index.html. Wähle den Befehl PSPAD. Schön öffnet sich die entsprechende Datei. Du kannst dabei übrigens auch mehrere Dateien auswählen, beispielsweise den Inhalt des gesamten Ordners. Alle Dateien werden auf einen Schlag in PSPad geladen!

Arbeit mit Verknüpfungen Besonders nützlich ist auch die Arbeit mit Verknüpfungen. So kannst du dir zu den wichtigsten Ordnern Querverweise direkt in PSPad anlegen. Nach Klick springt PSPad sofort zum entsprechenden Ordner im Mini-Explorer. Verknüpfungen heißen in PSPad Links. Sie gehören ins Register mit dem Herz. Und so erstellst du einen Link zum Ordner xampp/htdocs.

>

Achte darauf, dass das Toolfenster sichtbar ist (ANSICHT|TOOLFENSTER). Wechsle ins Favoriten-Register, du erkennst es am Herz.

>

Klicke mit der rechten Maustaste auf das Ordner-Symbol und wähle den Befehl Neuen Link hinzufügen.

>

Das Dialogfenster Neuen Link hinzufügen erscheint. Schaue rechts neben das Feld Pfad / URL und klicke auf die Schaltfläche mit den drei Punkten. Suche den gewünschten Ordner heraus.

>

Nach Klick auf OK ist der neue Link fertig – eine praktische Verknüpfung zum gewünschten Ordner!

Lege dir so viele Verknüpfungen an, wie du brauchst.

Werkzeuge und Suchfunktion Schau dir doch auch die pfiffigen Werkzeuge von PSPad an. Du findest sie im gleichnamigen Menü. Mir hat es neben der schon getesteten Farbauswahl besonders der Code-Explorer angetan. Dieses Tool zeigt dir die Elemente der aktiven Datei in einer baumartigen Struktur. Ausprobieren! Mein zweitliebstes Tool heißt Text-Diff: Aktuelle Datei vergleichen. So kannst du zwei verschiedene Versionen eines Dokuments laden. PSPad hebt die Unterschiede farblich hervor. Auch die ausgefeilte Suchfunktion benötige ich recht häufig, du findest sie im gleichnamigen Menü. Mein Favorit heißt Suchen/Ersetzen in Dateien. Damit kannst du beispielsweise ganze Ordner durchsuchen.

63

Kapitel

1

Deine coole Homepage mit HTML

Schlussbemerkung Uff! Das war eine ganze Menge HTML auf einmal. Gute HTML-Kenntnisse sind jedoch die Voraussetzung für die PHP-Programmierung. Immerhin bist du jetzt schon ein kleiner »HTML-Experte«. Beim Thema HTML haben wir uns für die klassische Version HTML 4 entschieden, wobei ich schon in Richtung HTML 5 vordenke. Wir lassen die strengere und weniger beliebte XHTML-Syntax außen vor. Du möchtest tiefer in (X)HTML (und CSS) einsteigen und die modernsten Versionen und neusten Techniken kennenlernen? Dann empfehle ich dir die wunderbaren Bücher »HTML für Kids« und »CSS für Kids« von meinen Autorenkollegen Robert Agular bzw. David Sigos. Vor allem das letztgenannte Buch bietet dir eine hervorragende Einführung in schickes Seitenlayout. Die Beispieldateien findest du übrigens auch auf der CD zum Buch. Schaue in den Unterordner beispiele/kapitel01.

Zusammenfassung 0 Du kannst mit dem PSPad blitzschnell das Grundgerüst eines HTMLDokuments »zaubern«. Wähle im Menü DATEI den Befehl NEU und doppelklicke auf den entsprechenden Eintrag. 0 Du fügst mit den entsprechenden Tags ganz lässig Überschriften (z. B.

) und Absätze ein. Setze den entsprechenden Text einfach innerhalb der Tags ein. 0 Du weißt, wie du mit dem Tag eine Grafik in deine Homepage einfügst. Ziehe die Grafikdatei einfach aus der Dateiliste des Toolfensters in dein HTML-Dokument. Passe die Attribute und Werte des Tags dann wunschgemäß an. 0 Du kannst mit
    Aufzählungen und mit
      Listen mit HTML erstellen. Du notierst beliebig viele Listen-Einträge zwischen
    1. . 0 Du erstellst Hyperlinks nach dem Muster Text für Hyperlinks. 64

      0 Du schreibst HTML-Tabellen mit den entsprechenden Tags
      , , und .

      Ein paar Fragen … 0 Du erstellst externe CSS-Dateien und steuerst damit das Aussehen deiner Homepage. Das sind Textdateien mit der Endung .css. Hier notierst du mit Hilfe von Attributen, wie die einzelnen Tags formatiert werden sollen. Das Attribut für die Schriftart heißt z. B. font-family. 0 Du arbeitest mit Farben, legst die Breite fest mit Hilfe eines
      -Containers und dem Attribut width. 0 Du weißt, wie du mit den
      -Tags und mit Kontrollkästchen ein Umfrageformular vorbereiten kannst und hast den SUBMITButton ausprobiert.

      Ein paar Fragen … Und jetzt bist du an der Reihe. Beantworte zuerst ein paar Fragen und löse dann ein paar Aufgaben. Viel Spaß und viel Erfolg! 1. Zwischen welchen Tags wird der Kopfbereich des Dokuments notiert? 2. Wie heißt der Farbname für kastanienbraun? Wie lautet der dazugehörige hexadezimale Farbcode und wie die RGB-Syntax? 3. Wie sehen die Kommentarzeichen aus, die in CSS-Dateien verwendet werden? Die Antworten zu den Fragen stecken allesamt auf der CD zum Buch. Schaue im Ordner fragen nach!

      … und ein paar Aufgaben 1. Schaue in die Seite index.html. Füge unter der Aufzählung deiner Hobbys eine Linie ein. Welches Tag verwendest du dafür? 2. Setze ganz oben auf die Seite index.html einen neuen Absatz, und zwar unterhalb von
      . Füge dort einen Verweis auf die zweite Seite umfrage.html ein. Schreibe als Linktext: Zur Umfrage. Setze ganz oben auf der Umfrage-Seite (direkt unter ) ebenfalls einen Absatz ein. Hier soll einen Link zurück verweisen. Dieser soll heißen: Zur Startseite.

      65

      Kapitel

      Deine coole Homepage mit HTML

      1

      Verlinke dein Projekt mit internen Querverweisen.

      3. Prüfe deine Seiten auf Korrektheit. Surfe dazu zum »Prüfdienst« des W3C. (Dahinter stecken die Leute, die HTML erfunden haben.) Surfe zu http://validator.w3.org. Gehe ins Register Validate by File Upload. Klicke auf den Button DURCHSUCHEN. Suche die zu prüfende Datei heraus und klicke auf CHECK. Die Prüfung funktioniert nur richtig, wenn die Datei eine DokumenttypDeklaration besitzt. Du darfst diese erste Zeile mit . So sparen wir uns in Zukunft auch das Schreiben dieser Passage. Die Lösungen für die Aufgaben findest du, falls möglich, stets auf der CD zum Buch, und zwar unter dem Ordner loesungen. Schaue im Beispiel unter loesungen/kapitel01 nach! Und wundere dich nicht – ich habe den HTML-Quellcode mit Tidy automatisch eingerückt.

      66

      2 Installiere deinen eigenen Webserver! In diesem Kapitel wird es richtig spannend! Du installierst deinen eigenen Webserver und testest, ob alles funktioniert. Reiten wir gemeinsam »mit den Apachen durch die Prärie«! In diesem Kapitel lernst du also $ wie du deinen eigenen Webserver mit PHP und MySQL installierst $ wie du testest, ob alles funktioniert An alle, die jetzt Angst bekommen: Du kannst deine Eltern, Tanten und anderweitige potenzielle Geldgeber beruhigen. Der eigene Webserver ist kein schwerer Kasten, den du nun zusätzlich in deine Stube schieben musst. Es kostet nichts extra, dein eigener Rechner genügt. Alles, was du zusätzlich brauchst, liefere ich dir auf CD mit! Doch bevor es losgeht, lass mich etwas ausholen … Wir müssen da so einige Dinge klären!

      67

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      Warum eigentlich ein Webserver? Warum eigentlich ein Webserver? Und was ist das für ein Ding? Fragen über Fragen, die wir vorher unbedingt beantworten müssen.

      Der Webserver ist ein Computer … Zum einen ist der Webserver ein Computer. Es ist der Rechner im Internet, auf dem deine Webseiten liegen. Dieser Webserver steht in einem großen Rechenzentrum. Er wird von deinem Dienstleister für dich bereitgehalten. (Und um ganz offen zu sein: In den meisten Fällen legt dein Dienstleister unzählige weitere Homepages auf diesem Server ab, um Platz zu sparen.)

      Der exklusive Server für die eigene Homepage? Zu teuer! Muss nicht sein!

      Kommen wir gleich auf die für dich wohl wichtigste »Kommunikation« mit dem Webserver zu sprechen, auf das Hochladen. Denn wenn du mit dem Erstellen deiner Homepage fertig bist, lädst du die fertigen Seiten auf den Webserver. Zum Hochladen deiner Seiten brauchst du ein sogenanntes FTPProgramm. Aber keine Sorge, das findest du ebenfalls in diesem Buch. Auch wie man eine Seite auf den Webserver lädt, erkläre ich dir ebenfalls, und zwar weiter hinten. Schaue einfach in den Anhang B! Der Webserver sorgt nun dafür, dass deine Homepage für alle sichtbar ist. Besucher können zu deiner Adresse surfen und sehen deine Seiten. So weit, so gut. Fazit: Ohne Webserver geht es nicht. Denn solange deine Seiten noch auf deinem eigenen Rechner daheim liegen, kann sie niemand außer dir sehen. (Oder außer deinen Freunden, denen du die Seite zeigst.) 68

      Warum eigentlich ein Webserver?

      … und der Webserver ist ein Programm! Zum anderen ist der Webserver aber auch eine Software, ein Programm. Dieses Programm sorgt dafür, dass die Seite weltweit abgerufen werden kann. Dieses Programm läuft nun – du ahnst es schon – auf dem Webserver. Versuche dir einmal vorzustellen, wie das mit dem Surfen funktioniert: Der Webserver-Rechner mit Webserver-Programm steht »irgendwo im Internet«, in irgendeinem Rechenzentrum. Dort liegt deine Homepage, wie eben geklärt. Doch was passiert, wenn ein »Surfer« deine Homepage betrachten möchte? Dann tippt sie oder er erst einmal die entsprechende Webadresse in den Browser ein, z. B. http://www.phpkid.de. Nach Druck auf [Enter] erhält der Webserver (also dieser Computer im Internet) eine Anforderung zum Abruf der Seite. Fachleute sprechen von einem sogenannten HTTP-Request. Der Webserver sucht deine Homepage »aus seinem Speicher heraus« und schickt sie zum Betrachter zurück. Der Betrachter an seinem heimischen PC sieht nun deine Homepage in seinem Browser und kann sie lesen. Dieser Betrachter wird übrigens als Client bezeichnet. Der Client schaut sich die Seiten auf dem Server an. Und schon haben wir die schönste Client-Server-Beziehung.

      Warum unbedingt ein eigener Webserver? Das mit dem Webserver ist ganz schön und gut. Doch wozu brauchst du deinen eigenen Webserver? Reicht denn nicht dieses Teilchen beim Dienstleister im Internet? Leider nicht! Die Programmiersprache PHP ist eine Programmiersprache, die auf dem Webserver läuft. Ohne Webserver funktioniert sie nicht. In Zusammenhang mit PHP spricht man deshalb auch von »WebserverProgrammierung«. Daraus folgt: Wenn du PHP ausprobieren möchtest, bist du auf einen Webserver angewiesen. Eine derartige Programmiersprache wird Server-seitige Programmiersprache genannt. Wie gesagt: PHP läuft nur auf dem Server, auf dem Webserver. Der Browser allein kann mit PHP nichts anfangen. Wenn du versuchst, eine PHP-Seite direkt im Browser aufzurufen, wird das nicht zum gewünschten Ziel führen! 69

      Kapitel

      2

      Installiere deinen eigenen Webserver! Da du PHP sicher auf deinem heimischen Rechner ausprobieren möchtest, musst du wohl oder übel einen eigenen Webserver installieren. Darum also brauchst du den eigenen Webserver.

      Und warum geht das so problemlos bei JavaScript? Kennst du Raffael Voglers tolles, aber leider nicht mehr erhältliches Buch »JavaScript für Kids«? Oder den gleichnamigen Nachfolgetitel von Frank Biet? (JavaScript ist eine weitere Programmiersprache, mit der man Webseiten aufpeppen kann.) Oder hast du dich vielleicht schon anderweitig über JavaScript informiert und einiges ausprobiert? Dann wirst du an dieser Stelle möglicherweise die Stirn runzeln. Moment mal, wirst du protestierend einwerfen. Der Autor spinnt. Von wegen Webserver! Bei JavaScript ist dieser ganze WebserverZirkus doch auch nicht nötig. Du öffnest deine Seite direkt im Browser – es funktioniert. JavaScript wird ausgeführt. Du brauchst keinen Webserver. Warum? Nun, JavaScript läuft direkt im Browser! Fachleute sagen: JavaScript wird vom Client (Client = Browser) interpretiert. Im Klartext: JavaScript wird vom Browser des Betrachters ausgeführt. Der beste Beweis für diese Aussage: Schalte doch einmal JavaScript im Browser ab. Viele Seiten werden jetzt nicht mehr richtig funktionieren. Ganz im Gegensatz zu PHP ist JavaScript also eine Clientseitige Programmiersprache. Fassen wir zusammen: JavaScript wird vom Browser ausgeführt. (Und wenn du im Browser JavaScript abschaltest, geht gar nichts mehr). PHP dagegen wird nur vom Server ausgeführt. Der Browser bekommt stets eine HTML-Seite zugeschickt. Das hat einen großen Vorteil. Für PHP ist es egal, welchen Browser der Betrachter verwendet. PHP funktioniert immer! Das ist natürlich toll. Doch wo Licht ist, gibt es auch viel Schatten. Und da kommen wir schon zum ersten Haken!

      70

      Wie teuer ist die Homepage mit PHP/MySQL?

      Wie teuer ist die Homepage mit PHP/MySQL? Wir sprachen eben darüber, dass an der Sache mit PHP ein Haken ist: PHP funktioniert nur dann, wenn dir dein Dienstleister einen Webserver mit PHP-Unterstützung bietet. Und spätestens an dieser Stelle fängt es an, richtig ärgerlich zu werden. Du führst deine Homepage bisher bei T-Online, AOL oder Freenet? Fehlanzeige! Diese Dienstleister sind ungeeignet. Aber auch preiswerte »WebVisitenkarten« bzw. »Starterangebote« z. B. von 1 und 1, Strato, Domainfactory usw. bieten oft kein PHP an. Auch hier kommst du also nicht weiter. Fazit: Du benötigst einen Dienstleister mit PHP- und MySQL-Unterstützung. Schauen wir uns deshalb einige dieser Dienstleister einmal an. Wir benötigen PHP 5-Unterstützung, um ganz genau zu sein. MySQL sollte mindestens in Version 4.1, besser in Version 5 oder höher vorliegen.

      Kostenlos, aber nicht umsonst: MultiMania Gerade kein Geld übrig? Das macht nichts! Der Anbieter MultiMania bietet unter www.multimania.de eine kostenlose Homepage an. Das alleine ist nichts Besonderes, kostenlose Homepages kannst du an vielen Stellen im Netz bekommen. Interessant ist, dass MultiMania PHP und – täterätäää – auch MySQL-Unterstützung bietet. Sogar das Administrations-Tool phpMyAdmin zum Einrichten von Datenbanken ist schon vorinstalliert. Der Haken: Du musst dich mit Zwangswerbung auf deiner Seite abfinden. Auch an deine E-Mail-Adresse wird Werbung geschickt. Abgesehen davon sind die dort eingerichteten Versionen von MySQL und phpMyAdmin nicht aktuell. Auch die neuen MySQLi-Funktionen von PHP funktionieren zum Zeitpunkt des Schreibens noch nicht. Du kannst dann beim Datenbankteil (vorerst) leider nicht mitmachen. Doch zumindest für den Einstieg in PHP ist MultiMania gut geeignet! Immerhin kannst du zumindest PHP nach Herzenslust ausprobieren, ohne einen Cent zu bezahlen. MultiMania ist ein Angebot der Conversis Hosting GmbH. Früher gehörte der Dienst zu Lycos und hieß »Tripod«. 71

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      Bei MultiMania registrieren Du hast dich für dieses Angebot entschieden? Trage deinen Usernamen und das Passwort ein. Das Passwort musst du aus Sicherheitsgründen zweimal angeben. Klicke auf LOS GEHTS!:

      Bei der Anmeldung legst du Benutzernamen und Passwort fest.

      Dann füllst du das entsprechende Formular aus. Der Mitgliedsname ist besonders wichtig. Dieser Name wird später zum letzten Teil der Adresse deiner Homepage. Du musst aber auch dein Geburtsdatum, dein Geschlecht und eine schon existierende E-Mail-Adresse angeben. Du hast das Anmelde-Formular ausgefüllt und abgeschickt? Dann bekommst du nun eine E-Mail. Erst mit dieser E-Mail wird die Anmeldung perfekt: Aktiviere den Hyperlink aus der E-Mail. Du landest auf einer »Bestätigungs-Seite«. Gib Mitgliedsnamen und Passwort ein. Geschafft! Du bist Mitglied bei MultiMania!

      Login bei MultiMania Zum Einloggen gehst du zu http://www.multimania.de. Nun gibst du Benutzernamen und Passwort ein und klickst auf ANMELDEN. Schon bist du im Verwaltungsbereich. Wie bekommst du deine Homepage auf den MultiMania-Server? Mit FTP! Wie das funktioniert und welche Daten du dafür benötigst, zeige ich dir im Anhang B ganz genau! 72

      Wie teuer ist die Homepage mit PHP/MySQL? Hat alles geklappt? Dann findest du deine Seite im Endeffekt möglicherweise unter dem Namen http://mitglied.lycos.de/mitgliedsname – mit Mitgliedsname ist hier natürlich der von dir selbst gewählte Benutzername gemeint. Auf jeden Fall zeigt dir MultiMania die Adresse der Seite gleich nach dem Einloggen an.

      Kostenlos, aber nicht umsonst: Massive Werbung bei jedem Laden der Seite.

      Für »ältere Kids«: Eigene WWW-Domain Nase voll von der MultiMania-Reklame? Du bist schon ein etwas »größeres Kid«? Oder die »Augenaufschlag-Papi-ist-der-Beste-Taktik« war erfolgreich? Dann lohnt es sich vielleicht, über eine eigene Domäne nachzudenken! Das ist eine Adresse, die z. B. nach dem Muster www.deinName.de aufgebaut wird. Die Vorteile sind groß: Deine Webseite ist unter einer kurzen, von dir selbst wählbaren Adresse zu finden. Gerade hier werben unzählige Dienstleister (sogenannte Webhoster) um deine Gunst. Viele dieser Firmen bieten natürlich auch »Hosting-Pakete« mit PHP-Unterstützung, in aller Regel auch gleich mit MySQL. Leider kostet die PHP/MySQL-Option bei einigen Anbietern ordentlich viel Knete. Nicht so bei der Firma Neue Medien Münnich. Hier gibt es eine Homepage mit eigener Domäne und PHP/MySQL-Unterstützung für recht Taschengeld-freundliche 4,95 Euro pro Monat. Dafür, dass dieser Dienstleister zu den besten gehört, ist das eine gute Leistung! Informiere dich auf der Seite www.all-inkl.com genauer über Preise und Leistungen! Ebenfalls überzeugt bin ich von der Schwarzkünster GbR unter www.schwarzkuenstler.info. Hier gibt es PHP-fähige Webpakete schon ab mageren 1,45 Euro pro Monat. Noch einen Tick günstiger ist die Hosting-Firma MW Internet mit dem Paket Zero Light. Hier gibt es PHP- und MySQL-Unterstützung schon ab 1,40 Euro im Monat. Und das alles ohne Werbung, dafür aber mit 250 Megabyte Speicherplatz: www.mw-internet.de. (Tipp für alle mitlesenden Eltern: Dieser Anbieter ist nicht nur sehr günstig, sondern vergibt auch Geschenkgutscheine! Und zwar in der Rubrik Sonstiges.) Und es geht sogar noch günstiger. Bei http://webnet-service.de bekommst du das günstigste PHP- und MySQL-fähige Paket ab 1,29 pro Monat. 73

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      Neue Medien Münnich und Schwarzkünstler GbR haben einen großen Vorteil: Du kannst deren Angebot vorab kostenlos auf Herz und Nieren prüfen! Bei Neue Medien Münnich dauert dieser Test 7 Tage. Suche einfach nach der Option Jetzt gratis testen. Bei Schwarzkünstler GbR kannst du das Angebot bis zu 10 Tage testen. Suche die Rubrik Testen Sie uns! Mit diesem kostenlosen Testaccount erfährst du zum einen, wie so ein Anbieter tickt. Zum anderen bekommst du eine zeitlich befristete Testhomepage mit PHP und MySQL und damit kannst du schon alles machen. Arbeite das Buch durch und teste die Skripte auf deren Server! Im nächsten Bild siehst du die Begrüßungsseite von Neue Medien Münnich. Die Schaltfläche JETZT GRATIS TESTEN führt zum kostenlosen Testaccount:

      All-inkl.com ist nicht nur einer der günstigsten, sondern auch besten Anbieter.

      Ich habe mich bei den meisten der bisher genannten Dienstleister angemeldet und bin zufrieden. Hallo Eltern, Großeltern, Tanten, Onkels, Verwandte: Vielleicht wäre das ein tolles Weihnachts-, Oster-, Geburtstags-, Tauf-, Konfirmations- bzw. Jugendweihegeschenk? Die eigene Domain für die Tochter, für den Sohn? Du suchst den günstigsten und besten Anbieter? Du möchtest dich vorher über Preise und Leistungen informieren? Surfe zur Seite www.webhostlist.de und informiere dich. Hier ist besonders die Übersicht zu den Top Ten interessant. Du findest hier Geschwindigkeitstests und Erfahrungsberichte von anderen Nutzern. Außerdem führt der Autor auf www.phpkid.de/?billig_hosten eine Liste besonders preiswerter Anbieter, die er mithilfe seiner Leser zusammengetragen hat. 74

      How! Im Reich des »Apachen«

      Lasse dir beim Anmelden von einem Erwachsenen helfen. Denn gerade bei der Registrierung von Domänen-Namen müssen rechtliche Aspekte beachtet werden. Du darfst z. B. keinen geschützten Markennamen für deine Homepage verwenden. Nicht nur bei gewerblicher Nutzung (früh übt sich, hehe!) benötigst du außerdem ein ordentliches Impressum. Das ist ein Bereich, der deine Adresse, Telefonnummer, Steuernummer usw. enthält. Verstöße können dazu führen, dass du teure »Strafgebühren« entrichten musst. Viel mehr dazu, was erlaubt ist und was nicht, verrate ich dir auch in meinem Buch »Bloggen mit WordPress für Kids«.

      How! Im Reich des »Apachen« Nun haben wir uns auf den vorangegangenen Seiten ausführlich über Webserver unterhalten. Es gibt den Webserver als Rechner und natürlich auch das Webserver-Programm. Das Webserver-Programm? Gibt es da nur ein Programm? Und was kostet diese Software? Interessante Fragen! Die gute Nachricht: Webserver-Programme gibt es viele. Zum einen teure wie den sogenannten Internet Information Server von Microsoft. Zum anderen auch kostenlose. Und – du wirst es nicht glauben – am beliebtesten ist der frei verfügbare Webserver namens Apache. How! Und weil der so gut ist und weil der weiter nichts kostet, wird er auf den meisten Webservern im Internet eingesetzt. Es handelt sich dabei um sogenannte Open Source Software. Die Nutzung ist kostenlos. Das Projekt wird von vielen Leuten weiterentwickelt. Es gibt Versionen des »Apachen« für Unix/Linux (das Betriebssystem im Web) und natürlich auch für Windows. Im Klartext: Du kannst dir dieses tolle Programm gemütlich auf deinem heimischen Windows-Rechner installieren.

      Ganz einfach: Webserver selbst installiert! Genau das machen wir. Wir installieren uns den Apache-Webserver auf unserem heimischen Rechner. Damit schaffen wir uns eine tolle Testumgebung. Ideal auch als Trostpflaster, wenn du noch keine Möglichkeit hast, deine Seiten im Internet zu veröffentlichen. 75

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      Nach der herkömmlichen Methode musst du zuerst den ApacheWebserver einzeln installieren. Dann installierst du PHP, zum Schluss noch MySQL und phpMyAdmin. Nach jedem Schritt nimmst du unzählige schwierige Konfigurations-Einstellungen in irgendwelchen Textdateien vor. Wenn man sich da nur ein einziges Mal verschreibt, geht gar nichts mehr! Arghh. Da bekommt man schon am Anfang die ganz große Krise! Unser Buch bleibt krisenfrei! Wir sind pfiffig und nutzen eine spezielle »Installations-Software«. Ich meine das Installationspaket XAMPP von den Apachefriends. Hinter den Apachefriends stecken Kai Oswald Seidler, Carsten Wiedmann und Kay Vogelgesang – die Entwickler dieses tollen Installationspakets. Frisch ans Werk! Installiere deinen eigenen Webserver auf der lokalen Festplatte. Nebenbei werden außerdem gleich PHP, MySQL und das geniale Tool phpMyAdmin eingerichtet. Das Beste: Alle diese »Kostbarkeiten« liegen für dich auf der CD bereit, und zwar unter programme/xampp. Unser Dank geht an Kai, Carsten und Kay, die sich freuen, dass wir ihr XAMPP mit auf unsere CD legen! Die XAMPP-Homepage – übrigens mit einem Hilfe-Forum auch bei Installationsproblemen – findest du unter http://www.apachefriends.org. Kleiner Tipp für Mac-Nutzer: Auch für dich gibt es eine praktische Alternative: MAMP. Du kannst dir das Paket unter www.mamp.info herunterladen, für die Buch-CD war es etwas zu groß. (Sonst hätten die Videos nicht mehr gepasst.) Die Installation von MAMP geht zwar anders vor sich als die von XAMPP. (Sie wird auf www.mamp.info bei Dokumentation erklärt.) Vom Prinzip her arbeitet MAMP jedoch genau wie XAMPP.

      So installierst du XAMPP Und so einfach gelingt die Installation unter Windows. Es funktioniert bei allen Windows-Versionen ab Windows 2000 bis Windows 7. Und zwar sowohl auf der lokalen Festplatte als auch transportabel auf USB-Stick. (Du kannst dir die Schrittfolge auch zeigen lassen. Das entsprechende Video für dieses Kapitel 2 findest du auf der CD im Ordner videos.)

      > 76

      Zuerst achte darauf, dass kein Programm auf deinem Rechner aktiv ist. Das könnte die Installation stören. Gehe nun in den entsprechenden Ordner für XAMPP auf der CD, und zwar in programme/xampp.

      Ganz einfach: Webserver selbst installiert!

      Der Doppelklick startet die Installation.

      >

      Doppelklicke auf die Datei xampp-win32-1.7.3.exe. (Falls du die neuste Version von XAMPP aus dem Internet geladen hast, lautet der Dateiname vielleicht schon xampp-win32-1.7.4.exe.) Es handelt sich um ein selbstauspackendes RAR-Archiv. Die Installation wird automatisch gestartet. Unter Windows Vista und 7 musst du vorher in aller Regel noch eine Sicherheitswarnung bestätigen.

      >

      Das Fenster XAMPP for Windows erscheint. Schaue zum Feld Destination Folder. Steht bei dir auch C:\ in diesem Feld? Super! Hier sollte auf jeden Fall der Laufwerksbuchstabe hin – wobei das Laufwerk auch ein USB-Stick oder eine externe Festplatte sein darf!

      Der Installationspfad (Destination Folder) sollte im Beispiel C:\ lauten.

      >

      Klicke auf INSTALL und gedulde dich – die Dateien werden entpackt! Das kann eine ganze Weile dauern. Im Ergebnis entsteht unter C: bzw. dem von dir gewählten Laufwerk ein Extraordner namens xampp. (Davon kannst du dich gleich nach erfolgreicher Installation überzeugen.)

      77

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      >

      Nun erscheinen nacheinander merkwürdige schwarze Setup-Bildschirme! Dort musst du jeweils den aktiven Buchstaben (y wie yes bzw. n wie no) mit [Enter] bestätigen bzw. ggf. wunschgemäß anpassen, damit der Einrichtungsprozess abgeschlossen werden kann.

      Shortcuts (Verknüpfungen) auf dem Desktop und im Startmenü sind eine feine Sache. Das »y« für »yes« ist voreingestellt. Bestätige mit [Enter]!

      >

      Drücke jetzt immer wieder auf [Enter], um die Fragen zu bestätigen.

      An einer Stelle wirst du gefragt: Should I make a portable XAMPP without drive letters? Wenn du XAMPP nur auf der lokalen Festplatte installierst, könntest du das »n« für no eigentlich belassen. Soll XAMPP jedoch als portable (tragbare) Version auf einem USB-Stick oder einer tragbaren Festplatte eingerichtet werden, darfst du keine drive letters (Laufwerksbuchstaben) zulassen. Aber auch auf der lokalen Festplatte entscheide ich mich dagegen. So kann ich XAMPP immer schnell mal »mitnehmen«. Einfach den XAMPP-Ordner nachträglich auf den USB-Stick kopieren und direkt am Computer von Freunden nutzen! Ist doch super, oder? Folge meiner Empfehlung und tippe an dieser Stelle vorher auf alle Fälle ein »y« für yes. Drücke erst dann auf [Enter].

      >

      78

      Es geht weiter mit dem [Enter], [Enter] um die nächsten beiden Fenster zu bestätigen. Am Schluss landest du bei dieser Auswahl:

      Ganz einfach: Webserver selbst installiert!

      >

      Tippe ruhig erst einmal ein x für exit. Durch Druck auf [Enter] verlässt du das Setup-Skript und kannst dich in Ruhe umsehen.

      Apropos installiert: XAMPP hinterlässt dabei keinerlei Spuren. Keine Einträge in irgendwelchen Registrierdatenbanken, kein nichts! Wenn du XAMPP löschen möchtest, löschst du einfach den kompletten Ordner xampp! (Oder du rufst die Datei uninstall_xampp.bat aus dem xampp-Ordner auf.)

      So startest du XAMPP Du möchtest XAMPP starten? Und damit den Apache Webserver, PHP, MySQL und phpMyAdmin? Kein Problem! Wozu gibt es denn das neue Verknüpfungssymbol auf dem Desktop? Doppelklicke einfach auf das Symbol XAMPP Control Panel bzw. rufe diesen Eintrag über das Startmenü auf. Das geniale XAMPP Control Panel startet. Damit »zündest« du nun den Apache-Webserver und den MySQL-Datenbankserver. Dafür benötigst du nur die beiden oberen START-Schaltflächen. Klicke zuerst auf den obersten START-Knopf, den rechts neben Apache. Warte ein paar Sekunden. Wähle danach den START-Knopf darunter, den rechts neben MySQL.

      Starte den Apache-Webserver (oberstes Modul) und MySQL (zweites Modul von oben) jeweils durch Klick auf die daneben angeordnete START-Schaltfläche. Der Text Running erscheint und die START-Schaltfläche verwandelt sich in eine STOP-Schaltfläche.

      Nach Klick auf die jeweilige START-Schaltfläche meldet sich gegebenenfalls ein warnendes Fenster deiner Firewall. Das geht in Ordnung, Windows passt schließlich auf. Erlaube je nach Firewall den Zugriff bzw. Einsatz des Webservers und von MySQL in deinem lokalen Netz.

      79

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      Nanu, es gibt Probleme mit XAMPP? Achte darauf, dass kein konkurrierendes Webserver-Programm aktiv ist. Unter Windows 2000 bzw. XP Professional könnte das der Internet Information Server sein. Den darfst du nicht aktivieren, da dieser den Apache-Webserver behindern würde. Auch das »Telefonierprogramm« Skype (www.skype.com) musst du ggf. herunterfahren, da es sich oft nicht mit XAMPP bzw. dem lokalen Apache-Webserver verträgt. Es kann auch sein, dass eine lokale Firewall oder ein im Hintergrund arbeitender Virenscanner dafür sorgt, dass XAMPP nicht richtig läuft. Auch die aktuellen Browser präsentieren ggf. alle möglichen Sicherheitsabfragen und Warnungen, ehe sie dich an XAMPP heranlassen. Im Zweifelsfalle gilt: Versuch macht klug! Trenne dich während der Arbeit mit XAMPP unbedingt vom Internet – aus Sicherheitsgründen! Schalte erst dann die Firewall aus bzw. überwinde die Sicherheitsmechanismen deines Browsers.

      So beendest du XAMPP Du möchtest deine PHP-MySQL-XAMPP-Sitzung beenden? Dann musst du beide Module durch Klick auf STOP wieder herunterfahren. Schalte erst MySQL ab und warte einige Sekunden. Stoppe danach den Apache-Webserver. Der grüne Text Running muss an beiden Stellen verschwunden sein. Auch wenn du das Fenster des XAMPP Control Panel schließt – das Steuerpult bleibt aktiv! Es nistet sich ganz rechts unten im Systembereich ein. Du findest es neben der Uhrzeit. Ein Doppelklick auf dieses Symbol zaubert das Steuerpult hervor.

      Du möchtest nun auch das XAMPP-Steuerpult beenden? Klicke im XAMPP Control Panel auf die Schaltfläche EXIT. Du findest sie als unterste Schaltfläche in der rechten »Reihe«. Erst jetzt ist XAMPP wirklich inaktiv.

      80

      Nur noch etwas Handarbeit … und fertig!

      Wo liegen die Dateien von XAMPP? XAMPP hat nun alles installiert, Webserver, PHP, MySQL, phpMyAdmin usw. Fantastisch. Doch wo liegen die ganzen »Module«? XAMPP legt den Apache-Webserver, PHP, MySQL, phpMyAdmin usw. in Unterordnern unter C:\xampp ab. 0 Den Apache-Webserver findest du unter C:\xampp\apache 0 Die PHP-Dateien liegen unter C:\xampp\php 0 MySQL findest du z. B. unter C:\xampp\mysql Auch andere Module wie Perl, Mercury Mail Server und der FileZilla-FTPServer werden installiert. Diese Komponenten benötigen wir jedoch nicht, du kannst sie ignorieren. Was für uns wichtig ist: Für deine eigenen Daten hat XAMPP den Ordner htdocs eingerichtet. Du findest dieses Verzeichnis unter C:\xampp\htdocs. Merke dir diesen Ordner gut! Noch einmal langsam und zum Mitschreiben: Alles, was du jetzt PHP-mäßig anstellen wirst, legst du ab unter C:\xampp\htdocs!

      Nur noch etwas Handarbeit … und fertig! Hat alles perfekt funktioniert? Probiere es aus! Teste, ob dein lokaler Webserver funktioniert. Die Startseite für deinen lokalen Webserver findest du stets unter der Adresse http://127.0.0.1. Tippe diese Adresse einfach in deinen Browser ein. Falls dir diese Nummer zu kryptisch ist, kannst du dir auch die Adresse http://localhost merken. Last but not least gibt es noch eine dritte Methode. Kennst du den Namen deines PCs? Meiner heißt z. B. Monarch. Dann tippe ich http://monarch und drücke [Enter]. Auch das geht also, es führen tatsächlich drei Wege zum gleichen Ziel!

      81

      Kapitel

      2

      Installiere deinen eigenen Webserver! Wir einigen uns am besten auf http://localhost! Tippe diese Adresse ein und drücke [Enter]. Je nach Version von XAMPP siehst du – nach Klick auf den Link Deutsch – diese oder eine ähnliche Seite:

      XAMPP begrüßt dich mit einer Begrüßungs-Seite.

      Dahinter verbirgt sich aber nichts weiter als eine Status- und Demoseite, die die Macher von XAMPP für dich vorinstalliert haben. Du wunderst dich, warum in diesem Ordner schon so viel drin steckt? Das sind vor allem Demo- und Beispielprogramme. Du kannst diese Dateien und Ordner bedenkenlos löschen. Du traust dich nicht, das alles zu löschen? Dann habe ich einen anderen Tipp: Benenne den Ordner htdocs um in htdocs_alt. Erstelle nun unterhalb von xampp einen neuen, leeren Ordner namens htdocs. Auch das funktioniert! (Wenn du dich nicht beim Ordnernamen verschrieben hast!) Nach dem Druck auf [Enter] will sich dein PC stets ins Internet »einwählen«? Versuche eine Option wie »Offline bleiben«. Wähle z. B. den Befehl DATEI|OFFLINEBETRIEB. Probiere es dann erneut.

      82

      Testen: phpinfo() auf localhost

      Testen: phpinfo() auf localhost Wunderbar, jetzt hast du deinen eigenen Webserver. Teste doch einmal, ob alles funktioniert. Zuerst prüfen wir, ob unsere eigenen HTML-Seiten angezeigt werden.

      Zuerst eine HTML-Seite … Erinnerst du dich an deinen Ordner html, den du unter C:\phpkid eingerichtet hattest? Ich meine unser kleines Projekt aus Kapitel 1. Das kommt uns wie gerufen, denn hier gibt es eine Datei index.html. Das ganze Projekt binden wir einfach zur Probe in unseren Webserver ein!

      >

      Kopiere diesen Ordner html komplett nach C:\xampp\htdocs. Der neue Pfad muss also lauten C:\xampp\htdocs\html!

      >

      Rufe diese Seite nun auf. Dazu tippst du http://localhost/html. Wenn alles klappt, wird die im ersten Kapitel erstellte Seite index.html aufgerufen! Es klappt: Aufgerufen wird die index.html aus dem Ordner html.

      Aber auch hier sind die Vorteile eines Webservers noch nicht ersichtlich. Es macht keinen großen Unterschied, ob du die Datei direkt von PSPad bzw. dem Windows Explorer aus startest, oder über den Webserver »abrufst«.

      Die »Magie« der index.html Du könntest diese Datei index.html auch direkt durch Doppelklick starten. Da es eine reine HTML-Seite ist, macht das keinen Unterschied – zumindest vom Erscheinungsbild her. Bemerkst du etwas? Wenn du sie über http://localhost/html öffnest, dauert das ein wenig länger. 83

      Kapitel

      2

      Installiere deinen eigenen Webserver! Schließlich muss der Webserver die Anfrage (HTTP-Request) erst bearbeiten und die passende Seite zurück zum Browser schicken. Apropos http://localhost/html! Gezeigt wird die index.html, obwohl du diesen Namen überhaupt nicht getippt hattest? Der Engländer würde jetzt sagen How come, was ist los? Nun, eine index.html wird immer dann angezeigt, wenn du den entsprechenden Ordnernamen eintippst. Wenn keine index.html vorhanden ist, reicht oft auch eine index.htm oder sogar eine index.php als Startdatei. Das ist ziemlich praktisch. So musst du nicht erst umständlich http://localhost/html/index.html tippen, da http://localhost/html genügt!

      … und nun ein PHP-Test Und nun folgt ein kleiner PHP-Test! Dafür schreibst du deine erste PHPDatei. Diese nennen wir info.php und legen sie in den Ordner C:\xampp\htdocs. Richtig, diesmal direkt in den Stammordner deines »lokalen Webs«. Wie geht das?

      > > >

      Starte PSPad. Wähle nun im Menü DATEI den Befehl NEU. Bleibe im voreingestellten Register Leere Datei erstellen und doppelklicke auf PHP. Eine Datei wird erzeugt, wirklich leer ist sie allerdings nicht. Du findest hier schon die PHP-Tags vor. Klicke in die leere Zeile zwischen

      >

      Notiere folgenden Befehl: phpinfo();

      >

      84

      Vergiss nicht, die Datei zu speichern. Zur Erinnerung: Wir wollten sie info.php nennen (Endung .php!).

      Testen: phpinfo() auf localhost

      Achte unbedingt darauf, die Datei in XAMPP zu speichern. Und zwar im Ordner xampp, Unterordner htdocs. Denn nur wenn sie in htdocs (oder einem Unterordner von htdocs) liegt, wird PHP ausgeführt.

      >

      Rufe die Seite nun folgendermaßen auf. Tippe in den Browser: http://localhost/info.php

      und bestätige mit [Enter]. Wenn alles geklappt hat, siehst du solch ein oder ein ähnliches Bild: Es funktioniert: PHP ist auf deinem System korrekt installiert.

      Das ist zum einen der Beweis, dass PHP funktioniert. Zum anderen gibt dir die Funktion umfangreiche Auskünfte. Welche PHP-Version ist auf deinem System installiert? Wir arbeiten mit PHP 5.3.1. Welches Betriebssystem wird verwendet? Welche Einstellungen wurden vorgenommen? Für den Kenner ist diese Anzeige eine wahre Fundgrube. Für uns Grund, einen Indianer-Freudentanz aufzuführen!

      85

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      Du versuchst, die info.php direkt aufzurufen? Das wird misslingen. Entweder du siehst den Quelltext. Oder Windows beschwert sich, weil es mit diesem Dateityp nichts anfangen kann. Spätestens an diesem Beispiel merkst du, wie wichtig der Webserver ist. Erst der Webserver sorgt dafür, dass die PHP-Anweisung – hier die Funktion phpinfo() – ausgeführt wird. Wichtig zu wissen: Der PHP-Befehl wird ausgeführt, aber nicht angezeigt. Der Browser erhält reinen HTML-Code zugeschickt. Wenn du’s nicht glaubst, mache den Test: Tippe noch einmal die Adresse http://localhost/info.php. Wähle nun im Browser je nach Version den Befehl SEITE|QUELLCODE ANZEIGEN, ANSICHT|QUELLTEXT bzw. SEITENQUELLTEXT ANZEIGEN. Du wirst keine einzige Zeile PHP finden! Was du siehst, ist der HTML-Quellcode, der durch die phpinfo() entstanden ist!

      Noch ein Test: Funktioniert phpMyAdmin? Hattest du auf der ursprünglichen XAMPP-Begrüßungsseite den Punkt TOOLS entdeckt? Dort steckt auch phpMyAdmin, unser Datenbankverwaltungsprogramm. Wir brauchen es zwar erst später – trotzdem solltest du jetzt schon testen, ob der Zugriff funktioniert! Ich empfehle dir, dieses Tool nicht über den Link, sondern stets direkt aufzurufen. Dazu tippst du in die Adresse-Zeile des Browsers: http://localhost/phpmyadmin Normalerweise startet phpMyAdmin ohne Kommentar. Bei dir erscheint eine Dialogbox zur Eingabe von Benutzernamen und Passwort? Dann tippst du als Benutzernamen einfach root, das Passwort-Feld jedoch lässt du frei. Das sind übrigens die gleichen Daten, die du später auch für MySQL verwenden wirst: root und nichts.

      Schlussbemerkung Viel Theorie, ich weiß. Aber das war wichtig. Außerdem weißt du jetzt, wo du Platz für deine PHP-Homepage bekommst. Und du bist stolzer Besitzer eines eigenen lokalen Webservers. Und das ist doch schon allerhand!

      86

      XAMPP gibt es übrigens auch für Mac und für Linux. Dort ist die Vorgehensweise leider etwas anders. Lies dir die entsprechenden Anleitungen auf www.apachefriends.de durch. Du bist Macianer und kommst mit XAMPP nicht zurecht? Dann solltest du das schon erwähnte MAMP ausprobieren. Dieses Tool bekommst du unter www.mamp.info.

      Zusammenfassung

      Zusammenfassung 0 Du weißt jetzt, wozu ein Webserver dient. Hier liegen die Seiten. Der Betrachter kann sie über Eintippen der entsprechenden Webadresse anfordern. Diese Anforderung heißt »HTTP-Request«. 0 Du kennst einige Dienstleister mit PHP/MySQL-Unterstützung. Du kennst z. B. MultiMania (vormals Tripod bei Lycos), einen werbefinanzierten Anbieter einer kostenlosen PHP/MySQL-Homepage. 0 Du weißt, wie das beste Webserver-Programm heißt – Apache Webserver. Es ist ein frei verfügbares Programm. 0 Wir haben den Apachen selber auf unserem Rechner eingerichtet. Dabei half uns ein Installations-Tool namens XAMPP. Angenehmer Nebeneffekt: Jetzt laufen auch PHP und MySQL ganz automatisch auf deinem heimischen Rechner. 0 Du weißt, wie du dein eigenes Web aufrufst. Tippe http://localhost in die Adresse-Zeile des Browser. Drücke [Enter]. 0 Du hast am Beispiel der Funktion phpinfo() herausgefunden, dass eine PHP-Datei nur beim Aufruf über den Webserver richtig angezeigt wird. Grund: PHP wird vom Webserver ausgeführt. Der Browser bekommt jedoch reinen HTML-Code zugeschickt.

      Ein paar Fragen … 1. Kannst du bei Anbietern wie T-Online oder AOL deine Homepage mit PHP/MySQL installieren? 2. Wie heißt das Programm, welches dir den Apache-Webserver, PHP, MySQL und noch viel mehr auf deinem heimischen Computer einrichtet? 3. Unter welchem Pfad legst du deine PHP-Dateien ab, wenn du den Apache-Webserver mit XAMPP installierst hast? 4. Welche Endung hat eine PHP-Datei? 5. Wozu brauchst du einen eigenen Webserver?

      87

      Kapitel

      2

      Installiere deinen eigenen Webserver!

      … und eine Aufgabe Diese Aufgabe wendet sich an Windows-Nutzer, die mit PSPad arbeiten. Und damit es nicht so schwer wird, beginne ich mit einem Trick. Du möchtest noch schneller ein HTML-Grundgerüst in PSPad einfügen? Klicke auf den Pfeil rechts neben der NEU-Schaltfläche (Sie heißt eigentlich NEUE DATEI ERSTELLEN) und wähle HTML. Oder wähle DATEI|NEU und bleibe im Register Leere Datei erstellen. Doppelklicke auf HTML. Auch jetzt wird ein HTML-Dokument im Standard 4.01 Transitional eingefügt – sogar mit verkürzter DTD. (Allerdings ohne lang="de" und utf-8.) Und nun kommt endlich deine Aufgabe: Finde heraus, welche Vorlage sich dahinter verbirgt. Passe diese Vorlage an deine Wünsche an. Sorge also dafür, dass unser perfektes HTML-Grundgerüst von Seite 32 eingebunden wird. Meinetwegen mit verkürzter DTD und gerne auch ohne Einrückung der Zeilen. (Damit die Einrückung von PHP besser zur Geltung kommt.) Aber bitte dafür wieder mit CSS-Link von Seite 50.

      88

      3 Hallo echo – »Hallo Welt« Die mühevollen Vorarbeiten sind geschafft! Der Webserver läuft. Höchste Zeit, mit dem Programmieren richtig loszulegen. In diesem Kapitel lernst du: $ wie du mit PHP Daten ausgibst $ wie du mit Variablen arbeitest, den »variablen Platzhaltern« $ wie du Zeilenumbrüche setzt $ wie du Sonderzeichen »maskierst« $ wie du Fehler erkennst und vermeidest

      89

      Kapitel

      3

      Hallo echo – »Hallo Welt«

      Daten ausgeben mit echo 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.

      Wie sind PHP-Dokumente aufgebaut? Die PHP-Notation ist unkompliziert. Was musst du wissen? Nicht viel! PHP-Dokumente sind eigentlich nichts weiter als HTML-Dokumente. Sie besitzen die Endung .php. Sie enthalten zusätzlich Abschnitte mit PHPCode. 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.

      Wie kennzeichne ich meinen PHP-Code? Ganz einfach. Zu Beginn des PHP-Teils notierst du Folgendes:
      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 Kurzform gewählt hättest. (Ich zeige es dir deshalb, damit du dich nicht wunderst, wenn dir diese Schreibweise bei anderen Skripten begegnet.) Wir bleiben bei der Langform, da sie zu 100% dem Standard entspricht. Warum ist die Kennzeichnung des PHP-Abschnitts eigentlich so wichtig? 90

      Daten ausgeben mit echo

      Erst durch diese Kennzeichnung »weiß« der Webserver, dass es sich um PHP-Abschnitte handelt. Denn diese Abschnitte werden nicht einfach so an den Browser geschickt. Sie werden vorher interpretiert, ausgeführt. Vergiss nicht: Der Benutzer bekommt nur eine HTML-Seite mit HTMLAnweisungen »zugeschickt«. Den PHP-Code bekommt er nie zu Gesicht!

      »Hallo Welt« – dein erstes Skript Unter Programmierern ist es eine hübsche Tradition, die »Welt« am Anfang mit einem kräftigen »Hallo« zu begrüßen. Schreibe ein Skript, welches den Text »Hallo Welt« ausgibt. Das Dokument soll hallo.php heißen und in unserem htdocs-Ordner unter C:\xampp abgelegt werden.

      >

      Erzeuge mit deinem bevorzugten Code-Editor (PSPad, Aptana Studio usw.) eine neue, leere HTML-Datei. In PSPad wählst du DATEI|NEU, gehst ins Register Neue Datei aus Vorlage erstellen und doppelklickst auf die Vorlage HTML 4.01 Transitional. (Falls du die Aufgabe von Seite 88 gelöst hast, gibt es auch einen schnelleren Weg.)

      >

      Nun erscheint das schon bekannte Grundgerüst einer HTML-Datei. Bereite zwischen einen PHP-Bereich vor. Kleide die PHP-Tags außerdem durch

      ein. Damit sorgst du dafür, dass der Text innerhalb des obligatorischen HTML-Blockelements notiert wird. Der Bereich innerhalb von sieht dann so aus:



      >

      Notiere zwischen den PHP-Tags jetzt folgende PHP-Zeile: echo "Hallo Welt!";

      >

      Nicht vergessen: Speichere dein Dokument. Wähle den Namen hallo.php. Denke an den korrekten Speicherpfad: xampp/htdocs!

      PSPad bietet dir beim Speichern den Dateityp HTML Document an. Doch wir brauchen PHP. Stelle daher im Listenfeld bei Dateityp vorher Alle Dateien (*.*) ein. Notiere dann den Dateinamen im Dateiname-Feld. 91

      Kapitel

      3

      Hallo echo – »Hallo Welt«

      Die Sprachanweisung echo sorgt dafür, dass die entsprechenden Daten ausgegeben werden. Die auszugebenden Daten notierst du innerhalb von Gänsefüßchen. Die Zeile wird am Ende durch ein Semikolon abgeschlossen.

      Quelltext für die hallo.php 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: Hallo-Welt-Skript <meta http-equiv="content-type" content="text/html; charset=utf-8">

      Hallo-Welt-Skript



      Du möchtest auch 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!

      Teste dein Dokument mit dem Webserver 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: 92

      Daten ausgeben mit echo

      Der PHP-Code wird interpretiert: Der Browser gibt den Hallo Welt-Text aus.

      Hat’s funktioniert? Herzlichen Glückwunsch! Huch, bei dir gibt es eine Fehlermeldung? Oder der Text wird nicht angezeigt? Beachte, dass die Anzeige nur funktioniert, wenn du die Seite über den Webserver startest. Das direkte Aufrufen mit Doppelklick führt dazu, dass der PHP-Abschnitt nicht interpretiert wird. Kunststück, wenn du den Webserver umgehst? Weitere Fehlermöglichkeiten bespreche ich ein paar Seiten weiter hinten im Abschnitt Fehlermeldung. Also, cool bleiben!

      PSPad: Raffinierte Farbhervorhebung Mal was 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

      93

      Kapitel

      3

      Hallo echo – »Hallo Welt« 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.

      Variablen: Mein rechter, rechter Platz ist leer Die Welt haben wir schon begrüßt. Wunderbar! Richten wir unser Augenmerk deshalb auf die nächste Umgebung: Auf Katja, 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?

      Was sind Variablen? Variablen sind Platzhalter! Es sind Speicherstellen im Hauptspeicher des Rechners. Stell dir eine Variable einfach als Behältnis vor. Es ist ein Behältnis, welches 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.

      94

      Die Namen von Variablen beginnen immer mit einem Dollarzeichen. Verwende keine Umlaute, Leer- oder Sonderzeichen! So wäre $eimer ein erlaubter Variablenname, nicht aber $meine schüssel. Der Unterstrich (_) ist jedoch gestattet. 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, rate ich zu genereller Kleinschreibung!)

      Variablen: Mein rechter, rechter Platz ist leer

      Beachte zusätzlich: Einige in PHP reservierte Wörter dürfen nicht als Variablenname verwendet werden. Das sind Wörter wie while, if, switch, for usw. usf. Außerdem ganz wichtig: Beginne Variablennamen nie mit einer Zahl. Nicht funktionieren wird ein Name wie $68name. (In der Variablen selbst sind jedoch Ziffern gestattet.)

      Der Platzhalter $vorname 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 »VariablenPlatzhalters«. Und dieser befindet sich rechts, getreu dem Motto »Mein rechter, rechter Platz ist leer«. Warum notiere ich den Namen Katja in Gänsefüßchen? Weil es sich um Text handelt. In diesem Zusammenhang spricht man von einem sogenannten String. Strings werden stets im Gänsefüßchen notiert. Bei Zahlen dagegen brauchst du keine Gänsefüßchen zu setzen. Klar? Der gesamte Quelltext des PHP-Bereichs sieht so aus.

      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.

      95

      Kapitel

      3

      Hallo echo – »Hallo Welt« Das Beispiel findest du auf der CD im Ordner kapitel03. Schaue in die Datei katja1.php.

      Wie funktioniert das Skript? 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. Neben dem Datentyp String kennt PHP noch den Datentyp Integer. Dieser Datentyp steht für eine normale Ganzzahl wie 5 oder 9834. Als weiteren Datentyp gibt es in PHP den Datentyp Float (Kommazahl). Später lernst du den Typ Boolean für Wahrheitswerte wie true oder false kennen. 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 nun dafür, dass etwas ausgegeben wird. Das »Ausgabegut« steht übrigens wieder in Gänsefüßchen. 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!

      Ausgabe verschönern mit HTML-Tags 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: 96

      Wie Pech und Schwefel: Strings verketten $vorname!"; ?>

      Wie du siehst, kannst du ganz problemlos HTML-Tags in deinen AusgabeString einfügen. Hier habe ich zusätzlich mit dem Tag-Paar für bold (fett) gearbeitet. Passe dein Beispiel dementsprechend an. Speichere 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 HTMLQuelltext.

      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 Menü ANSICHT den Befehl QUELLTEXT. Vergewissere dich! Im Quelltext der »Webseite« ist tatsächlich kein PHPCode mehr enthalten. Denn schließlich sorgt der Webserver dafür, dass PHP interpretiert, ausgeführt wird. Und der Webserver schickt halt den HTML-Code Hallo Katja! an den Browser. Das Beispiel findest du auch auf der CD, und zwar wieder im Ordner kapitel03. Der Dateiname dieser Version lautet katja2.php.

      Wie Pech und Schwefel: Strings verketten PHP ist einfach! Unter dem Motto »Freiheit für Kettenhunde« reden wir nun über die »Hundeleine« in PHP. Ich meine den Verkettungsoperator Punkt. Doch eigentlich brauchen wir über diesen Punkt gar nicht so viele Worte zu

      97

      Kapitel

      3

      Hallo echo – »Hallo Welt« verlieren. 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? Unter Verketten versteht man das Verbinden von zwei oder mehr Zeichenketten. Dazu wird normalerweise ein sogenannter Verkettungsoperator verwendet. Als Verkettungsoperator dient in PHP der Punkt. Schaue dir doch noch einmal unser Beispiel von eben an: $vorname!"; ?>

      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. Bei herkömmlichen Programmiersprachen gilt jedoch: Eine Variable darf grundsätzlich nicht so einfach innerhalb von Gänsefüßchen notiert werden. Sie muss stets ohne Gänsefüßchen stehen. Das können wir mit PHP »nachspielen«. Schau dir zum Vergleich dieses vereinfachte Beispiel an. Hier geben wir nur den Wert aus der Variablen aus:

      Die Variable selber wurde dank der Gänsefüßchen schon in der ersten Zeile als Zeichenkette »gekennzeichnet«. Es ist also völlig überflüssig, in der zweiten Zeile noch Gänsefüßchen aufzuschreiben.

      Strings und Variablen verketten? Meist unnötig! Eine Variable wird normalerweise nicht in Gänsefüßchen gesetzt. Der Rest jedoch muss als Zeichenkette gekennzeichnet werden. Um Variable und umgebende Zeichenketten zu verbinden, bedient man sich in »herkömmlichen« Programmiersprachen der Technik des Verkettens. 98

      Wie Pech und Schwefel: Strings verketten Warum? In diesen Sprachen darf die Variable nicht einfach Teil des Strings sein. Sie muss mit dem String verkettet werden. Was in anderen Programmiersprachen das einzig Wahre ist, geht natürlich auch in PHP. Du kannst das Beispiel von oben also auch in dieser »Verkettungs-Variante« aufschreiben. Hier als die »Version 3« des »Katja-Beispiels«: " . $vorname . "!"; ?>

      Interessant ist die zweite Zeile. Das Ergebnis entspricht der Version 2. Nur die Schreibweise ist komplizierter geworden. 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. Wie schon erwähnt: In PHP ist das umständliche Verketten von Strings mit Variablen in den meisten Fällen nicht nötig. Die Variable verträgt es, mit in das »Gänsefüßchen-Boot« genommen zu werden. Wir haben uns in diesem Beispiel also zu viel Arbeit gemacht. Dieses »Zuviel an Arbeit« findest du zum Vergleichen unter dem Namen katja3.php auf der Buch-CD.

      Strings verketten – manchmal geht’s nicht ohne! Warum habe ich dir diese umständliche Variante hier schon gezeigt? Nun, in manchen Fällen kommst du um das Verketten nicht drum herum! Zum Beispiel bei Funktionen. Oder bei den sogenannten Feldvariablen, den Arrays. Einverstanden, die Arrays kennst du noch nicht. Das verschieben wir also auf später. Doch mit einer Funktion können wir uns an dieser Stelle schon beschäftigen. Nix verstehen? Nehmen wir ein Beispiel! Angenommen, du möchtest den markigen Satz: Hallo Katja, willkommen in 2010! ausgeben. Weiterhin wünschst du, dass das Jahr automatisch erzeugt wird. (Wenn du das Buch in 2011 oder 2012 liest, soll natürlich auch 2011 bzw. 2012 ausgegeben werden.) Wie geht das? Mit einer Funktion! Du nimmst einfach eine entsprechende Funktion mit dem passenden Argument.

      99

      Kapitel

      3

      Hallo echo – »Hallo Welt«

      Zum Ausgeben der aktuellen Jahreszahl dient die Funktion 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 hierbei "Y". Und nun noch ein paar Worte zu den Gänsefüßchen: Ob du die doppelten oder die einfachen Gänsefüßchen wählst, ist eigentlich egal. Da du aber Gänsefüßchen nicht einfach ineinander verschachteln darfst, musst du in manchen Fällen die Variante mit den einfachen Gänsefüßchen wählen. Entscheide also von Fall zu Fall.

      Die Jahreszahl wird durch die Funktion date("Y") erzeugt.

      Schreibe die entsprechende Zeile also folgendermaßen: echo "Hallo $vorname, willkommen in " . date("Y") . "!";

      Hier haben wir mit Hilfe der Verkettung dafür gesorgt, dass die Funktion »funktioniert«. Das Jahr wird korrekt berechnet. (Vergleiche, wenn du magst, mit dem Vorbild-Beispiel katja4.php auf der CD.) Achte beim Verketten unbedingt darauf, dass Leerzeichen mit berücksichtigt werden müssen. So musst du im Beispiel nach dem Wort in unbedingt ein Leerzeichen setzen, bevor du das schließende doppelte Gänsefüßchen setzt. Da das Ausrufungszeichen jedoch direkt hinter der Jahreszahl notiert werden soll, ist dort kein Leerzeichen nötig. 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, 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 100

      echo "Hallo $vorname, willkommen in date('Y')!";

      Kleine Zeilenumbruchkunde 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. Und das ist natürlich Quatsch mit Soße, denn so kann sie nicht funktionieren.

      Kleine Zeilenumbruchkunde 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.

      Mit
      einen HTML-Zeilenumbruch erzeugen Ich wollte eigentlich auf den Break hinaus, auf den Umbruch. Ich zeige dir, wie du problemlos einen Zeilenumbruch (
      ) 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: $vorname!"; ?>

      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 HTMLUmbruch ein. Dafür sorgt das Zeichen
      .

      101

      Kapitel

      3

      Hallo echo – »Hallo Welt«

      $vorname!
      "; echo "Super, dass du mal vorbeischaust."; ?>

      Im Browser sieht das Ganze so aus, zusätzlich habe ich über den Befehl SEITE|QUELLTEXT ANZEIGEN (Internet Explorer) bzw. ANSICHT|SEITENQUELLTEXT ANZEIGEN (Firefox) gleich den HTML-Quelltext aufgerufen.

      Im Quelltext siehst du zwar das Tag
      , aber keinen Zeilenumbruch.

      Bisher haben wir nur einen Umbruch im Browser erzeugt. Im Hintergrund findet jedoch kein Zeilenumbruch statt. Dieses Beispiel kannst du unter dem Namen katja-br.php von der CD abrufen.

      Umbruch im Editor: Der Befehl \n wie new line Wie wäre es zusätzlich noch mit einem Umbruch im Editor? Zugegeben, bei zwei Zeilen ist das vielleicht nicht so wichtig. Doch wenn du häufiger mit echo arbeitest, entsteht irgendwann eine »Endlos-Zeile« im Editor. 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:

      102

      $vorname!
      \n"; echo "Super, dass du mal vorbeischaust.\n"; ?>

      Maskenball: Das Escape-Zeichen »\« 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 von der CD.

      Maskenball: Das Escape-Zeichen »\« 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 Quelltextes.

      Die wichtigsten Umbruch-Steuerbefehle Es gibt übrigens noch mehr solcher interessanten Steuerbefehle. Die wichtigsten davon stelle ich dir in dieser Tabelle vor: \n erzeugt neue Zeile

      \r \t 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?

      103

      Kapitel

      3

      Hallo echo – »Hallo Welt«

      Backslash als »Escape-Zeichen« Dieser Backslash (\) wird auch als »Escape-Zeichen« bezeichnet. Denn normalerweise dient er zum Maskieren bestimmter Sonderzeichen, die du sonst nicht so einfach ausgeben darfst. So darfst du z. B. Gänsefüßchen nicht einfach »im Klartext« in dein Skript hineinschreiben. Gänsefüßchen signalisieren schließlich, dass ein String beginnt bzw. endet. 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 EscapeZeichen. \"$vorname\"!
      \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 auf der Buch-CD. Du musst auch das Dollar-Zeichen ($) oder den Backslash (\) maskieren, falls du diese Zeichen per echo als HTML ausgeben willst. Denn auch diese Zeichen haben normalerweise eine Sonderbedeutung. 104

      Keinen Durchblick? Kommentare setzen!

      Keinen Durchblick? Kommentare setzen! 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 Buffi-Hunde haben nicht gerade das beste Gedächtnis.) Gewöhne dir deshalb frühzeitig an, mit Kommentaren zu arbeiten! Das sind Bereiche, die nur von dir gesehen werden, aber auf den Programmablauf keinen Einfluss haben. Kommentare helfen dir, den PHP-Quellcode zu erklären.

      Einzeilige Kommentare 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

      Kommentare über mehrere Zeilen ziehen 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 */

      105

      Kapitel

      3

      Hallo echo – »Hallo Welt«

      Also ich habe es mir inzwischen angewöhnt, ausgiebig mit Kommentaren zu arbeiten. Ich kann dir diese Vorgehensweise nur empfehlen. Ein anderer Trick besteht darin, dein Skript einfach durch Leerzeilen zu gliedern. Tippe ruhig auf [Enter], um vor und nach einer wichtigen Zeile eine Leerzeile zu erzeugen. Das erhöht die Übersicht enorm. Der Programmablauf wird dadurch jedoch nicht gestört.

      Fehlermeldung? Cool bleiben! 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 ist manchmal fast zum Auswachsen und es gibt Momente, da würden Hund Buffi und Buchautor Hanke den PC mitsamt Monitor am liebsten gemeinsam aus dem Fenster werfen. Doch halt! Cool bleiben, lautet die Devise. Hier ein paar Tipps, wie du Fehler vermeiden kannst.

      Semikolon ; am Zeilenende vergessen? 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 kommen wir noch zu sprechen!)

      Grausam: Schon ein vergessenes Semikolon führt zu einer Fehlermeldung.

      Schau 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. 106

      Fehlermeldung? Cool bleiben!

      Variablen korrekt benannt? 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äufigen 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.

      Gänsefüßchen richtig gesetzt? 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«.

      Falsche Klammersetzung? 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 zusammen zu fassen. Bei den sogenannten Fallunterscheidungen oder den Schleifen zeige ich dir dieses Prinzip später noch ganz genau. Soviel schon vorweg: Auch das versehentliche Vergessen einer öffnenden oder schließenden Klammer führt natürlich zu Fehlermeldungen.

      107

      Kapitel

      3

      Hallo echo – »Hallo Welt« 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. Bei dir wird der PHP-Code überhaupt nicht ausgeführt? Nur der HTMLTeil der Seite erscheint? Hast du denn die Seite über den Webserver aufgerufen? Also z. B. über 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!

      Schlussbemerkung 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.

      Zusammenfassung 0 Du weißt, dass PHP-Dokumente HTML-Dokumente mit der Endung .php sind. Du weißt, dass PHP-Bereiche von umschlossen werden. 0 Du kennst die Sprachanweisung echo zur Ausgabe von Daten. Setze den auszugebenden String in Gänsefüßchen, schließe die Zeile durch ein Semikolon ab: echo "Hallo Welt!"; 0 Du kennst das Konzept der Variablen, der »variablen Platzhalter«. Du möchtest eine Variable initialisieren? Notiere die Variable links, den Wert rechts. Setze dazwischen das Gleichheitszeichen, hier Zuweisungsoperator genannt: $vorname = "Katja"; (Die Leerzeichen vor und nach dem Istgleichzeichen haben lediglich eine optische Funktion.) 0 Du weißt, dass du bei der Ausgabe mit echo selbst mit HMTL-Tags arbeiten kannst. Notiere Strings und Variablen einfach innerhalb eines Gänsefüßchen-Paars. Du benötigst keinen Verkettungsoperator, wenn du mehrere Elemente zu einem String zusammensetzen möchtest. Eine Zeile wie echo "Hallo $vorname!"; ist für PHP kein Problem. 108

      Ein paar Fragen … 0 In wenigen Fällen musst du doch den Verkettungsoperator Punkt verwenden, beispielsweise bei der Rückgabe von Werten aus Funktionen. Du hast den Verkettungsoperator im Zusammenhang mit der Funktion date() kennengelernt. 0 Du kennst den Steuerbefehl \n, mit dem man einen Zeilenumbruch auch im Editorfenster erzeugt. Du weißt, dass man mit \ sonst nicht darstellbare Sonderzeichen wie " oder $ maskieren (escapen) kann: Schreibe z. B. \" bzw. \$ 0 Du kennst meine Empfehlung zum Setzen von Kommentaren. Einzeilige Kommentare notierst du hinter //, mehrzeilige Kommentare kleidest du in die Zeichen /* und */ ein. 0 Wir haben besprochen, woher viele Fehler herrühren. Vergiss keinesfalls das Semikolon am Zeilenende oder das schließende Gänsefüßchen. Achte stets auf die korrekte Schreibweise der Variablen.

      Ein paar Fragen … 1. Wie nennt man das Gleichheitszeichen zwischen Namen und Wert einer Variablen? 2. Nenne drei Datentypen für Variablen in PHP! 3. Mit welchem Steuerbefehl erzeugst du eine neue Zeile im Editor?

      … und ein paar Aufgaben 1. Schreibe ein PHP-Dokument, welches den Satz »PHP macht Spaß!« ausgibt. Nenne es fun.php. 2. Wie heißt dein bester Kumpel? Speichere ihren/seinen vollständigen Namen in zwei Variablen. Nenne die erste Variable $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. 3. Füge in die Datei kumpel.php einen Kommentar ein, der dir jede Zeile erklärt.

      109

      4 Spaß mit Datum und Uhrzeit 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: $ wie du mit den entsprechenden Funktionen Zeit und Datum ausgibst $ wie du mit if-else-Kontrollstrukturen eine tageszeitabhängige Begrüßung programmierst $ wie du mit sogenannten Feldvariablen (Arrays) die Wochentage ausgibst $ wie du mit Arrays in der Kurzform umgehst $ wie du Monatsnamen in sogenannten assoziativen Arrays speicherst

      111

      Kapitel

      4

      Spaß mit Datum und Uhrzeit

      Immer up to date 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! Bei den nun zu besprechenden Funktionen wird stets Datum und Uhrzeit des Webservers zurückgegeben. Du arbeitest am heimischen PC? Dann sind Datum und Uhrzeit natürlich identisch mit den Angaben deines PCs. Auch bei den zu Beginn besprochenen Dienstleistern sollte es keine Probleme geben. Wenn deine Seiten jedoch auf einem amerikanischen Webserver liegen, handelt es sich bei der Serverzeit natürlich um die amerikanische Zeit!

      Das Datum ermitteln 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 2008. 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.08 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 besprochenen Funktion ausgeben. Ich zeige dir auf der nächsten Seite, was ich zwischen den Tags notiert habe:

      112

      Immer up to date

      Das aktuelle Datum ausgeben



      Diese Funktion verrät dir stets das aktuelle Datum.

      Die Schalter zur Ermittlung des Datums In der folgenden Tabelle habe ich dir alle Schalter zur Ermittlung des Datums aufgeschrieben. Bitte bekomme keinen Schreck, denn hinterher probieren wir das Ganze an weiteren Beispielen aus! Schalter j d n m S y Y D l (kleines »L«) M F w z t

      Erklärung Monatstag ohne führende Null Monatstag mit führender Null Monatszahl ohne führende Null Monatszahl mit führender Null englisches Aufzählungszeichen (st, rd, th) Jahreszahl mit zwei Stellen Jahreszahl mit vier Stellen Wochentag, Kurzschreibweise Wochentag, Langschreibweise Monatsname, Kurzschreibweise Monatsname, Langschreibweise Wochentag als Zahl (0=Sonntag) Tag des Jahres als Zahl Anzahl der Monatstage

      Beispiel 1 bis 31 01 bis 31 1 bis 12 01 bis 12 1st 3rd 5th 10 2010 Mon Monday Jan January 0 bis 6 0 bis 365 28 bis 31

      Weitere Praxisbeispiele 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");

      113

      Kapitel

      4

      Spaß mit Datum und Uhrzeit Solle 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? Dann notierst du einfach: echo date("d.m.Y");

      Du wünschst z. B. folgende englische Schreibweise: 3rd of July 2010? Dann versuche Folgendes – es funktioniert aber nicht unter allen PHP-Versionen: echo date("jS of F Y");

      Wie du siehst, kannst du die Ausgabe des Datums sogar gestalten. Arbeite innerhalb von 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. Nicht alle Zeichen lassen sich jedoch verwenden, deshalb würde ich mich auf Leerstellen und den Punkt beschränken. Im Zweifelsfalle lautet die Devise: Probieren geht über Studieren. 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.

      Mit den entsprechenden Schaltern gelingt dir die gewünschte Schreibweise im Nu.

      114

      Schau dir zum Vergleichen meine Beispieldatei an. Du findest sie im Ordner kapitel04 unter dem Namen datum2.php.

      Wer hat an der Uhr gedreht?

      Wer hat an der Uhr gedreht? 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 (:).

      Alle Uhrzeitschalter im Blick In der folgenden Tabelle habe ich dir alle Schalter zur Ausgabe der Uhrzeit aufgeschrieben. Tröstlich – es sind im Gegensatz zum Datum viel weniger: Schalter a A h H i s

      Erklärung am oder pm AM oder PM Stunde im 12-h-Format Stunde im 24-h-Format Minuten von 00 bis 59 Sekunden von 00 bis 59

      Beispiel am AM 1 bis 12 1 bis 24 04 12

      Die Zeit vergeht … ein kleines Beispiel Zum Ausprobieren schlage ich ein kleines Beispieldokument vor. Nenne es uhrzeit.php. Ich zeige dir lediglich den Teil zwischen den Tags , der Rest ist ganz normales HTML.

      Beim Aufruf dieser Seite war es genau ...



      115

      Kapitel

      Spaß mit Datum und Uhrzeit

      4 Für die genaue Uhrzeit musst du ständig auf den Reload-Button klicken.

      Ist PHP dafür gedacht, um ständig die ganz aktuelle Uhrzeit auszugeben? Und zwar sekundengenau? Die Antwort lautet: Nein! Denn dann müsste das Skript im Sekundentakt immer wieder aufgerufen werden. Die Seite müsste also sechzigmal pro Minute vom Server abgerufen und an den Browser geschickt werden. Das ist nicht Sinn der Sache, denn dann wäre der »Arbeitsaufwand« (die »Last«) für den Server zu groß. Für solche Aufgaben bietet sich dagegen die Skriptsprache JavaScript an. Diese läuft schließlich direkt im Browser.

      Pause muss sein: Die if-elseEntscheidungsstruktur 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.

      Die Entscheidungsstruktur if-else 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«. 116

      Pause muss sein: Die if-else-Entscheidungsstruktur 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. Übrigens kann der sogenannte 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 er das Zimmer nicht aufräumt.

      Geschweifte Klammern: Wichtiges Know-how 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 117

      Kapitel

      4

      Spaß mit Datum und Uhrzeit 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: Schau 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. Sicher hast du es längst bemerkt: Passagen innerhalb von geschweiften Klammern werden eingerückt. Dabei tippst du vor den einzurückenden Zeilen 2–4 Leerzeichen. Mehr zu den Einrückregeln erfährst du in einer PDF-Datei auf der Buch-CD unter dokumente/code_einrueckung und ganz ausführlich auch im Nachfolgeband »PHP und MySQL Praxisbuch für Kids« im Kapitel 2.

      Wir machen … Mittagspause 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.

      118

      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«.

      Pause muss sein: Die if-else-Entscheidungsstruktur Hier mein Musterbeispiel, welches ich pause.php nenne. Ich zeige dir den wichtigsten Teil der Datei:

      Pause zwischen 12:00 und 13:00 Uhr!



      Zwischen Zwölf und Eins macht jeder seins … Mittagspause!

      Du kannst gerne mit dem Musterbeispiel von der Buch-CD vergleichen. Schaue in den Ordner kapitel04.

      So funktioniert das Beispiel 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? Das doppelte Gleichheitszeichen (==) 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! 119

      Kapitel

      4

      Spaß mit Datum und Uhrzeit Der Vergleich liest sich also so: Wenn es wahr ist, dass 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 nicht gerade 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. Eigentlich ganz einfach, oder? Beachte unbedingt die korrekte Klammersetzung. Wir haben es in diesem Beispiel mit zwei Blöcken zu tun. Zum einen mit dem if-Block, zum anderen mit dem else-Block. Wie wichtig die richtige Klammersetzung ist, kannst du durch ein Experiment feststellen. Entferne doch zur Probe einmal die Klammer hinter else. Bei mir ist das in Zeile 15. Nach dem erneuten Aufruf der Seite im Browser bekommst du eine Fehlermeldung. Diese weist jedoch auf Zeile 17 hin. Klar, denn PHP wusste ja nicht, dass du in Zeile 15 einen Block öffnen wolltest. Das Programm meckert deshalb die schließende Klammer in Zeile 17 an! Falls es bei dir öfter zu solchen Problemen kommt, empfehle ich dir noch einmal die »heißen Hundetipps« von den Vorseiten: Setze zur öffnenden geschweiften Klammer stets sofort das schließende Pendant! Übrigens: Gute Editoren wie PSPad, Notepad++ oder Aptana Studio heben die dazugehörige schließende Klammer farblich hervor, sobald du die öffnende markierst! Achte einmal darauf!

      Vergleichsoperatoren im Überblick Kompliziert? Eigentlich nicht! Mit dem doppelten Istgleich testet man auf Gleichheit. Das ist jedoch noch nicht alles. Höchste Zeit, dass ich dir nun auch die anderen Vergleichsoperatoren zeige. Operator == != > < >= <=

      Bedeutung Gleich Ungleich Größer als Kleiner als Größer gleich Kleiner gleich

      Diese sechs Operatoren sind relativ einfach zu verstehen. Den Gleichheitsoperator hast du schon kennengelernt, das doppelte Istgleich. 120

      Pause muss sein: Die if-else-Entscheidungsstruktur Du kannst jedoch auch prüfen, ob zwei Elemente ungleich sind. So ist 12 ungleich 13. Du kannst auch testen, ob das erste Element größer oder kleiner als das zweite ist. Die 13 ist z. B. größer als die 12. Oder du prüfst, ob gilt: Das erste Element ist größer gleich bzw. kleiner gleich dem zweiten Element. Die 12 ist größer gleich 12. Damit ergeben sich sehr interessante Einsatzmöglichkeiten. Zum Beispiel für eine etwas längere Mittagspause? Apropos Mittagspause. Angenommen, du machst zwischen 11:00 und 13:00 Uhr eine »Brotzeit«. Wie baust du diesen Tatbestand in den Vergleich ein? Nichts leichter als das! Schreibe einfach zwei Vergleiche und verknüpfe diese miteinander. Beide Teilausdrücke müssen wahr sein. Moment mal, verknüpfen? Wie geht das denn? Da kommen uns die nächsten Operatoren doch wie gerufen!

      Na logo! Logische Operatoren zum Verknüpfen Zum Verknüpfen von Vergleichen benötigst du die sogenannten logischen Operatoren. Hier stehen dir die folgenden zwei Operatoren zur Verfügung: Operator Bedeutung && bzw. and Logisches Und, alle Teilausdrücke müssen wahr sein || bzw. or Logisches Oder, mindestens ein Teilausdruck muss wahr sein

      Wundere dich nicht, dass es zwei Schreibweisen gibt. Ich zeige dir beide, damit du auch mit der jeweils anderen Schreibweise vertraut bist. Ich jedoch bevorzuge für das logische Und das doppelte kaufmännische Und (&&). Beim logischen Oder empfehle ich dir die zwei senkrechten Striche, die »Pipe-Zeichen« (||). Wie erzeugst du die Pipe-Zeichen? Kein Problem! Halte die Taste [AltGr] gedrückt. Tippe dann die zweite Taste von links in der zweiten Reihe von unten. Die mit den spitzen Klammern, die Taste [<]!

      Lange Mittagspause per Und-Verknüpfung Doch jetzt probieren wir diese Operatoren ganz schnell einmal aus! Es ging schließlich um unsere »lange Mittagspause«. Hier das Skript, welches ich und.php getauft habe.

      Pause zwischen 11:00 und 13:00 Uhr!


      121

      Kapitel

      4

      Spaß mit Datum und Uhrzeit if (date("H") >= 11 && date("H") < 13) { echo "Wir machen Mittagspause."; } else { echo "Willkommen auf unserer Seite!"; } ?>



      Interessant ist vor allem die vierte Zeile. Hier habe ich zwei Bedingungen mit dem Und-Operator (&&) miteinander verknüpft. Nur wenn beide Teilausdrücke wahr sind, wird der Satz »Wir machen Mittagspause« ausgegeben. Beide Teilausdrücke? Richtig! Es muss zum einen wahr sein, dass die Stunde größer oder gleich 11 ist. Damit wären zuerst einmal 11, 12, 13 usw. zugelassen. Der nächste Teilausdruck beschränkt den Bereich jedoch auf alle Werte unter 13. Hier wird verlangt, dass die Stunde kleiner 13 ist. Mit anderen Worten: Nur wenn die Stundenzahl zwischen 11 und 13 liegt, ist die Bedingung wahr. Um noch genauer zu sein: Die Zeitspanne muss zwischen 11:00 Uhr und 12:59 Uhr liegen, da die 13 selber nicht erreicht werden darf. Probiere es aus!

      Wo gibt’s denn so was? Zwei Pausen am Tag! Fehlt zum Schluss noch die Oder-Verknüpfung. Diese sorgt schließlich dafür, dass mindestens ein Teilausdruck wahr sein muss. Was kompliziert erscheint, wird mit dem nächsten Beispiel sicher ganz einfach! Nehmen wir unser »Mittagspausen-Beispiel«. Wie wäre es mit zwei Mittagspausen? Die eine recht früh von 11:00 bis 11:59 Uhr. Die andere dagegen von 14:00 bis 14:59 Uhr, praktisch als Siesta. Da hilft folgende Vergleichs-Konstruktion. if (date("H") == 11 || date("H") == 14) { echo "Wir machen Mittagspause."; }

      Dank des Oder-Operators zeigt die Seite den »Mittagspausen-Satz« nun in den oben genannten zwei »Zeitfenstern« an. Zum einen, wenn es zwischen 11:00 und 11:59 Uhr ist; zum anderen aber auch dann, wenn der Zeiger zwischen 14:00 und 14:59 »pendelt«. Vergleiche mit der Datei oder.php, wo ich diese Änderung eingebaut habe. 122

      Der Tag vergeht: Zwischentöne mit elseif

      Der Tag vergeht: Zwischentöne mit elseif Eltern haben ja manchmal Phantasie. Sie versuchen, Tochter oder Sohn durch unterschiedliche »Vergütungsmodelle« zu motivieren. Nehmen wir zum Beispiel das Taschengeld. Wenn du sofort das Zimmer aufräumst, wird das mit 3 Euro Taschengeld honoriert. Räumst du das Zimmer dagegen später auf, gibt es immerhin noch 2 Euro. Wenn du das Zimmeraufräumen jedoch vergisst, gibt es überhaupt kein Taschengeld. Auch mit diesem Modell haben uns unsere Erzeuger wieder eine wunderbare Informatik-Lektion erteilt! Um das Beispiel darzustellen, müssen wir unsere if-else-Konstruktion um einen weiteren Zweig ergänzen.

      Einbau eines elseif-Zweigs Und schon sind wir beim sogenannten elseif-Zweig angelangt. Der elseif-Zweig ist immer dann interessant, wenn man mehrere konkrete Fälle voneinander unterschieden möchte. Das »Taschengeld-Beispiel« lässt sich folgendermaßen symbolisieren: if (Zimmeraufräumen sofort) { 3 Euro Taschengeld; } elseif (Zimmeraufräumen später) { 2 Euro Taschengeld; } else { kein Taschengeld; }

      Ziemlich praktisch und raffiniert, findest du nicht? Dabei können sogar noch mehr elseif-Zweige eingebaut werden. Der nächste elseif-Zweig wird nur ausgeführt, wenn die Prüfung im übergeordneten Zweig nicht wahr war. Also wenn das if oder elseif nicht zum Erfolg geführt hat. Auch hier gilt: Der else-Zweig ganz am Schluss kann wieder weggelassen werden.

      123

      Kapitel

      4

      Spaß mit Datum und Uhrzeit

      Tageszeitabhängige Begrüßung Wie wäre es mit einem sinnvollen Beispiel? Schreibe doch einmal ein Skript, welches die Besucher je nach Uhrzeit mit einem anderen Spruch begrüßt. Von 0:00 Uhr bis 10:59 Uhr soll die Begrüßung lauten: »Guten Morgen!«. Von 11:00 Uhr bis 14:59 Uhr dagegen »Mahlzeit!«. Bis 16:59 Uhr schlage ich »Willkommen zur Kaffeezeit!« vor. Ansonsten (also wenn keiner der obigen Fälle zutrifft), soll das Skript »Guten Abend« einblenden. Das ist ein Fall für elseif, und zwar gleich in doppelter Verpackung. Schau dir mein Beispiel an, ich zeige dir wieder den wichtigen Teil zwischen . Ich habe das Dokument willkommen.php genannt.



      Mahlzeit! Mit elseif wird die Entscheidungsstruktur erweitert.

      Auch hier noch ein interessantes Syntax-Detail: Wenn du mit else oder elseif arbeitest, notierst du dieses Schlüsselwort und die dazugehörige öffnende geschweifte Klammer am besten in der gleichen Zeile wie die schließende geschweifte Klammer des vorhergehenden Blocks. Das spart Platz und erhöht die Übersicht. 124

      Feldvariablen: Wochentage aufschreiben

      Feldvariablen: Wochentage aufschreiben Zurück zur Funktion date(), zurück zu den Wochentagen. Blättere ruhig ein paar Seiten zurück und schaue dir die Tabelle an. Wenn du den Wochentag als Namen ermitteln möchtest, verwendest du den Schalter l: date("l")

      Die ganze Sache hat einen Haken: Der Wochentag wird in Englisch ausgegeben, in der Schreibweise Sunday, Monday, Tuesday usw. Für pfiffige englischkundige Schüler und Fachbuchautoren ist das kein Problem. Doch ob Otto Normalsurfer immer die englischen Wochentage kennt? Es wäre doch schön, wenn man die Wochentage auf Deutsch anzeigen könnte!

      Wochentage auf Deutsch ausgeben Richtig! Man könnte für jeden Wochentag eine eigene Variable verwenden! Dann könnte man eine if-else-Kontrollstruktur schreiben, die aus Monday Montag, aus Tuesday Dienstag usw. macht. Es geht aber auch anders! Warum eine Variable für jeden Tag? Eine Variable für alle Tage ist viel besser! Eine sogenannte Feldvariable, ein Array! Wenn man mehr als einen Wert in einer Variablen speichern möchte, kommen die sogenannten Feldvariablen ins Spiel. Eine Feldvariable bildet ein »Feld« zusammengehöriger Elemente. Stelle es dir vor wie eine Fußballmannschaft oder wie die Schulklasse. Die Feldvariable ist der 1. FC Pokalsieg oder die Klasse 8c. Die einzelnen »Elemente« sind die Spieler bzw. Schüler der Klasse.

      Feldvariablen werden Array genannt Feldvariablen werden auch als Arrays bezeichnet, als Werteliste. Das Wort Array betonst du auf der letzten Silbe. Das »A« am Anfang wird kurz gesprochen. Die Syntax wiederum sieht folgendermaßen aus: $Variablenname[Index-Wert]

      125

      Kapitel

      4

      Spaß mit Datum und Uhrzeit Im Klartext: Zuerst notierst du den Variablennamen wie gewohnt. Dann setzt du ohne Leerzeichen ein paar eckige Klammern. Doch wie unterscheidet man die einzelnen Elemente voneinander? Wie macht man kenntlich, dass es sich um Fußballspieler 1 oder Schüler 5 handelt? Das leistet der sogenannte Index-Wert. Dieser wird in eckigen Klammern notiert. Der Index-Wert ist eine Art Zähler zur Durchnummerierung! Er wird auch als key (Schlüssel) bezeichnet. Ganz wichtig: Der erste Wert in einem Array trägt per Voreinstellung die Schlüssel-Nummer 0. Der erste Index-Wert lautet also 0 und nicht 1. Weil das so wichtig ist, wiederhole ich es noch einmal: In einem Array beginnt die Zählung bei 0. Der 8. Spieler der Fußballmannschaft würde also den Index-Wert 7 tragen! Fassen wir zusammen: Arrays, die Wertelisten, bestehen aus mehreren Werten. Diese werden von PHP intern durchnummeriert. Der entsprechende Zähler nennt sich Index-Wert oder auch Schlüssel (key). Der key (Zähler) beginnt in der Voreinstellung stets bei 0.

      Die Tage als Array Zurück zu unseren Wochentagen! Schau dir die Sache am Beispiel an! Die Variable selbst nennen wir $tag. Die einzelnen Wochentage werden durchnummeriert. Wir fangen beim Sonntag an. Der Sonntag bekommt die 0 (bei 0 beginnen!) und wird so notiert: $tag[0]. Der Montag sieht so aus $tag[1] usw. usf. Liste einfach alle Tage auf und weise die entsprechenden Werte zu. Als Test gibst du den Donnerstag mit der Sprachanweisung echo aus. Ich habe mein Dokument wochentage.php genannt. Ich zeige dir hier den PHP-Teil.

      126



      Feldvariablen: Wochentage aufschreiben Beachte, dass ich hier mit einem Kommentar arbeite (Zeichen //), um das Skript direkt im Quellcode erläutern zu können.

      Da Sonntag Tag 0 ist, muss der Donnerstag Tag 4 sein.

      Welcher Tag ist heute? Das bisherige Skript reißt dich sicher nicht gerade zu Begeisterungsstürmen hin. Mich auch nicht! Um lediglich das Wort Donnerstag auszugeben, hätten wir uns den Stress mit dem Array auch ersparen können. Viel interessanter ist der heutige Wochentag, als der Tag, an dem du das Buch liest. Wie ermittelst du mit PHP den Wochentag? Ganz einfach: Dafür sorgt die Funktion date() im Zusammenspiel mit dem Schalter w: date("w"). Das Schöne an date("w") ist, dass am Sonntag 0 und am Samstag 6 zurückgegeben wird. Was für ein Zufall, denn das passt ganz hervorragend für unsere Zwecke. Schließlich beginnt die Zählung bei Arrays ja auch bei 0! Mit dem folgenden Skript kannst du den aktuellen Wochentag auf Deutsch dynamisch im Dokument ausgeben. Vergleiche einfach mit der Datei heute.php aus dem Ordner kapitel04.

      Das Prinzip ist einfach! Ich ermittle die »tagnummer« mit Hilfe der Funktion date("w") und speichere sie in der gleichnamigen Variablen. Diese Zahl übergebe ich der Feldvariablen $tag[] in den eckigen Klammern. Heraus kommt … der aktuelle Wochentag.

      127

      Kapitel

      4

      Spaß mit Datum und Uhrzeit

      Arrays die Zweite: Es geht auch kürzer! Bei der bisherigen Array-Schreibweise handelt es sich um die sogenannte Langform. Da Programmierer faul sind, mögen sie besonders die alternativen Kurzformen. Die sieht für das Wochentage-Array folgendermaßen aus:

      Nach dem Schlüsselwort array folgt die Werteliste. Diese notierst du in runden Klammern. Jeder Wert wird vom nächsten durch ein Komma getrennt. Da es sich um Strings handelt, notierst du die Tage selbstverständlich in Gänsefüßchen. Beachte, dass es sich trotz des Umbruchs im Buch um eine Zeile handelt! Wenn du aus Platzgründen ebenfalls einen Umbruch einbauen möchtest, dann nur nach einem Komma. Zerreiße keinesfalls Text, der innerhalb von Gänsefüßchen notiert wurde. Das Komma hat eine besondere Bedeutung. Alle Werte werden durch Komma voneinander getrennt. Die Zuweisung der keys (Index-Werte) erfolgt dabei automatisch hintereinander. Du musst sie nicht extra notieren. Das Beispiel findest du unter dem Namen heutekurz.php.

      Array-Elemente zählen Wie viele Tage hat die Woche? Wie viele Schüler befinden sich in deiner Klasse? Zähle die Array-Elemente doch einfach einmal durch! Stelle es fest mit der Funktion count(). Und wie geht das nun mit count()? Die Funktion funktioniert ganz einfach: In runden Klammern übergibst du Namen des Arrays. Und zwar ohne irgendwelche eckigen Klammern. Schließlich beziehst du dich nicht auf ein einziges Element. Das gesamte Array wird »ausgewertet«. 128

      Assoziativ: Monatsnamen als Array \n"; $elementzahl = count($tag); echo "Die Woche hat $elementzahl Tage.\n"; ?>

      Du findest das Beispiel zum Vergleich unter dem Namen count.php.

      Die Funktion count() zählt die Elemente eines Arrays.

      Keine Bange, die Funktion count() zählt korrekt. Du musst dir also keine Sorgen machen, dass der Index-Wert 0 irgendeinen Einfluss hat. Wenn die Fußballmannschaft ein Array darstellen würde, bekäme der elfte Spieler zwar den Index-Wert 10. Trotzdem würde beim Zählen mit count() natürlich korrekt die 11 ermittelt.

      Assoziativ: Monatsnamen als Array Das mit den Arrays ist eine ganz feine Sache. Gewiss. Doch nicht immer sind diese Index-Nummern der Weisheit letzter Schluss. Nehmen wir als Beispiel ein paar europäische Städte. Diese sollen in einem Array namens $hauptstadt festgehalten werden. Nach der »klassischen« Index-Variante sieht das folgendermaßen aus: $hauptstadt[0] $hauptstadt[1] $hauptstadt[2] $hauptstadt[3]

      = = = =

      "Berlin"; "Wien"; "Warschau"; "Paris";

      Doch unter $hauptstadt[1] kannst du dir sicher nicht viel vorstellen. Du musst dir halt merken, dass sich dahinter Wien verbirgt. Je mehr Hauptstädte das Array enthält, desto komplizierter wird die ganze Geschichte.

      129

      Kapitel

      4

      Spaß mit Datum und Uhrzeit Logisch, denn unter nackten Zahlen kann sich ein Normalsterblicher – von ein paar Mathematik-Genies abgesehen – wenig vorstellen. Anders ausgedrückt: Mit bloßen Zahlen kann man wenig verbinden, wenig assoziieren. Viel praktischer ist es, wenn man diese Index-Nummern einfach durch eigene Werte ersetzt. Durch Werte, mit denen man etwas assoziieren kann. Was liegt bei Hauptstädten näher, als die im Web gebräuchliche Länderkennung zu verwenden? In unserer »assoziativen Variante« sieht das Array folgendermaßen aus: $hauptstadt["DE"] $hauptstadt["AT"] $hauptstadt["PL"] $hauptstadt["FR"]

      = = = =

      "Berlin"; "Wien"; "Warschau"; "Paris";

      In assoziativen Arrays wird als key statt der Index-Nummer ein ganz eigenes Schema erzeugt. Dieses darfst du dir (fast) frei ausdenken. Es kann sich bei diesen »Ersatz-Schlüsseln« um Strings aber auch um Zahlen handeln. Der key in assoziativen Arrays wird – von Ausnahmen abgesehen – innerhalb von Gänsefüßchen notiert.

      Einen einzelnen Index-Wert ausgeben Du möchtest einen einzelnen Index-Wert ausgeben? Kein Problem! Das Prinzip ist genau das gleiche wie bei den »klassischen Arrays« mit Zahlen als Index-Wert. Als zusätzlichen Test kannst du gleich noch die Elemente im Array durchzählen. Auch hier arbeitet count() wie gewohnt. Hier zeige ich dir den wichtigsten Teil meiner PHP-Datei hauptstadt.php.

      \n"; echo "Elemente im Array: " . count($hauptstadt); ?>



      130

      … und wieder die Kurzform

      Bei assoziativen Arrays kannst du dir den Schlüssel frei ausdenken.

      Die Wirkungsweise ist klar? In der ersten echo-Zeile ist eigentlich nur die Ausgabe von $hauptstadt["PL"] interessant. Damit daraus aber eine ganze Wortgruppe wird, verknüpfe ich den String Polen: mit $hauptstadt["PL"]. Am Schluss sorgt ein Zeilenumbruch
      dafür, dass die nächste Zeile auch auf einer neuen Zeile steht. Und das Zeichen \n kümmert sich darum, dass auch im Quelltext ein Zeilenumbruch erfolgt. In der nächsten Zeile zähle ich die Elemente des Arrays durch.

      … und wieder die Kurzform Übrigens gibt es auch bei den assoziativen Arrays eine Lang- und eine Kurzform. Auch bei dieser Kurzform arbeitet man mit runden Klammern. Davor notierst du wieder das Schlüsselwort array. Zusätzlich kommt jedoch das Zeichen »Daraus folgt« zum Einsatz. Das sieht so aus: =>. Zum Vergleich zeige ich dir hier die Kurzform des obigen Beispiels:

      "Berlin", "AT" => "Wien", "PL" => "Warschau", "FR" => "Paris"); echo "Polen: " . $hauptstadt["PL"] . "
      \n"; echo "Elemente im Array: " . count($hauptstadt); ?>



      Die lange »Array-Zeile« liest sich wie folgt: Key DE daraus folgt Berlin, Key AT daraus folgt Wien usw. usf. Vergleich mit der Datei hauptkurz.php.

      131

      Kapitel

      4

      Spaß mit Datum und Uhrzeit

      Den Monat ausgeben Zurück zu unserem Datums-Beispiel. Wir wollen diesmal den aktuellen Monat komplett auf Deutsch ausgeben. Damit es übersichtlich bleibt, setze ich ein assoziatives Array in der Langform ein: Als Schlüssel verwende ich die ausgeschriebenen englischen Monatsnamen. Warum? Weil die Funktion date("F") schließlich die Monatsnamen ausgeschrieben ermittelt. Dann brauche ich diesen englischen Monatsnamen nur noch in der Variablen $monatsname zu speichern. Diesen nutze ich als Key. Und schon habe ich den deutschen Monatsnamen. Hier das entsprechende Skript:

      \n"; echo "Das Jahr hat " . count($monat). " Monate."; ?>



      Die Monatsnamen werden durch ein assoziatives Array übersetzt.

      132

      Vergleiche mit der Datei monatsnamen.php im Ordner kapitel04.

      Schlussbemerkung

      Schlussbemerkung Nicht schlecht, Herr Specht: Du hast dich ein gutes Stück qualifiziert auf dem Weg zum »richtigen Programmierer«: Schließlich zählen die Entscheidungsstrukturen und die Arrays zu den wichtigsten Programmiergrundlagen. Und das »Spielen« mit Datum und Uhrzeit hat hoffentlich ein wenig darüber hinweggetröstet, dass der Stoff nicht immer ganz einfach ist.

      Zusammenfassung 0 Du weißt, dass du mit der Funktion date() das Datum ermitteln kannst. Mit den richtigen »Schaltern« und mit Formatierzeichen wie Punkt oder Leerzeichen gelingt fast jede gewünschte Ausgabe. Für Tag und Monat ohne führende Null und das Jahr mit zwei Stellen schreibst du z. B. echo date("j.n.y"); 0 Auch die Uhrzeit kann mit der Funktion date() ganz einfach ermittelt werden. Wenn du die Stunden, Minuten und Sekunden anzeigen möchtest, schreibst du z. B.: echo date("H:i:s"); 0 Du hast die if-else-Entscheidungsstruktur kennengelernt. Es wird eine Bedingung auf Wahrheit 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: if (Bedingung) { Fall A; } else { Fall B; }

      0 Du kennst die wichtigsten Vergleichsoperatoren wie das Istgleich (==), die Zeichen Größer als (>), Kleiner als (<) und Größer gleich (>=) und Kleiner gleich (<=). 0 Du kennst die logischen Operatoren Und (&&) bzw. Oder (||), mit denen du mehrere Vergleiche miteinander verknüpfen kannst. Beim logischen Und müssen alle Teilausdrücke wahr sein. Beim logischen Oder muss dagegen mindestens ein Teilausdruck wahr sein.

      133

      Kapitel

      4

      Spaß mit Datum und Uhrzeit 0 Du kennst den elseif-Zweig, mit dem mehrere Bedingungen hintereinander geprüft werden können. Der nächste elseif-Zweig wird nur ausgeführt, wenn die Prüfung im übergeordneten Zweig nicht wahr war. 0 Du hast dich mit dem Konzept der Feldvariablen vertraut gemacht, der sogenannten Arrays. Eine Feldvariable bildet ein »Feld« zusammengehöriger Elemente. Indizierte Arrays besitzen als Schlüssel einen Zähler, der normalerweise bei Null anfängt zu zählen. So wird das erste Element des Arrays $tag so definiert: $tag[0]; 0 Du weißt, dass es neben den indizierten Arrays auch die sogenannten assoziativen Arrays gibt. Dabei wird der Nummern-Schlüssel durch eine selbst wählbare Zeichenfolge ersetzt. Nimm Zeichenfolgen, mit denen du etwas assoziieren kannst. So wäre $hauptstadt["DE"] = "Berlin"; eine gute Möglichkeit, die Hauptstadt von Deutschland zu speichern. 0 Du weißt, dass es bei Arrays eine Lang- und eine Kurzform gibt. Bei der Kurzform werden die einzelnen Array-Elemente in runden Klammern zusammengefasst. Vorangestellt wird das Schlüsselwort array. Bei assoziativen Arrays musst du zusätzlich mit dem Zuweisungsoperator => (Daraus folgt) arbeiten. 0 Du kennst die Funktion count(), mit der sich die Elemente eines Arrays zählen lassen.

      Ein paar Fragen … 1. Mit welcher Funktion kannst du Datum und Uhrzeit darstellen? Nenne nur die Funktion ohne Schalter oder Formatierzeichen. 2. Was bedeutet if-else und wofür brauchst du diese Schlüsselworte? 3. Welches Zeichen verwendet man, wenn man zwei Elemente auf Gleichheit testen will? 4. Wie sieht der Vergleichsoperator aus, der auf Ungleichheit prüft? 5. Mit welcher Zahl beginnt die Zählung bei indizierten Arrays? 6. Mit welcher Funktion kannst du die Elemente eines Arrays zählen?

      134

      … und ein paar Aufgaben

      … und ein paar Aufgaben 1. Schreibe ein PHP-Dokument, welches einen Satz nach diesem Muster ausgibt: »Heute ist Tag 5 des 3. Monats in 2009«. Dabei sollen natürlich der aktuelle Tag, der aktuelle Monat und das aktuelle Jahr eingesetzt werden. Speichere das Dokument unter dem Namen heuteist.php. 2. Spaß muss sein. Erzeuge eine Seite, die den Surfer an allen Werktagen normal begrüßt. Nur am Sonntag soll der Text ausgegeben werden: »Am Sonntag ist das Internet leider geschlossen«. Nenne das Dokument sunday.php. (Tipp: Nutze die Entscheidungsstruktur für diesen Zweck.) 3. Erstelle ein Dokument, welches das Datum in folgender freundlicher Schreibweise ausgibt: »Heute ist Mittwoch, der 11. Februar 2011«. (Gemeint ist das zum Zeitpunkt des Lesens aktuelle Datum!) Im Klartext: Sowohl der Wochentag als auch der Monatsname sollen in der deutschen Schreibweise ausgegeben werden. Der Dateiname soll tagmonat.php heißen.

      135

      5 Seiten mit Passwort schützen Webseiten so sicher wie die Bank von England? Solange es Hacker gibt, wird das wohl immer ein Traum bleiben. Doch etwas Sicherheit ist möglich: Erzeuge einen Passwortschutz, der zumindest von »Normalsterblichen« schwer zu knacken sein wird. Sorge dafür, dass bestimmte Informationen nur nach Eingabe eines Passwortes angezeigt werden. Schließlich stehen die Passwörter selber im PHP-Code, werden also dem Betrachter nicht angezeigt. Beste Gelegenheit, gleich ein paar weitere wichtige PHP-Techniken zu trainieren. Deshalb lernst du in diesem Kapitel: $ wie du Daten aus einem Formular mit post bzw. get verschickst $ wie du Daten aus Formularfeldern ausliest und verarbeitest $ wie du Bedingungen nicht nur mit if-else, sondern auch mit der sogenannten switch-Anweisung überprüfen kannst $ wie du Variablen auf Vorhandensein testest und Fehler vermeidest $ wie du externe Dateien mit include einbindest

      137

      Kapitel

      5

      Seiten mit Passwort schützen

      Formular für das Passwort Auf los geht’s los! Erstelle eine Datei mit einem Passwortschutz. Wer das Passwort kennt, sieht die geheimen Inhalte. Wer nicht, hat einfach Pech gehabt. Doch wie fragen wir das Passwort ab? Ganz einfach, mit einem Formular! Für das nächste Kapitel empfehle ich gute HTML-Formularkenntnisse. Falls du hier noch Lücken hast, schlage einfach noch einmal im 1. Kapitel nach. Immerhin haben wir dort schon eine erste Formularseite erstellt.

      Schreibe ein Formular Ich zeige dir Schritt für Schritt, wie das Beispiel aufgebaut wird. Mache einfach mit. Das Beispiel nennst du passwort.php. Hier siehst du die erste Version dieser Datei, ich präsentiere dir diesmal das komplette Dokument. Kennen Sie das Passwort? <meta http-equiv="content-type" content= "text/html; charset=utf-8">

      Wie lautet das Passwort?



      Zum Überprüfen: Du findest mein Beispiel in einem Unterordner namens version1.

      138

      Senden mit Methode: post oder get?

      Die Seite erzeugt ein Formular mit einem Eingabefeld. Mehr nicht!

      Zur Erinnerung: Das Formular wird durch
      eingeleitet und mit
      geschlossen. Das Formular selber besteht aus folgenden Zeilen:


      Schau dir die zweite Formularzeile an, denn hier entsteht das Texteingabefeld. Dafür sorgt die Anweisung . Ganz wichtig ist für unsere Zwecke der Name des Feldes. Dafür habe ich mir die Bezeichnung pass ausgedacht. (So kurz wie möglich!) Die Zuweisung erfolgt durch das Attribut-Werte-Paar name="pass". Das Formular selber wird durch Klick auf den Submit-Button abgeschickt. Damit hier die Aufschrift Senden prangt, verwende ich das Attribut-WertePaar value="Senden". Tja, und wenn du nun auf den Button SENDEN klickst? Dann passiert erst einmal überhaupt nichts! Oder passiert doch etwas?

      Senden mit Methode: post oder get? Das, was mit einem Formular geschieht, wird direkt im einleitenden
      -Tag festgelegt. Schau dir dieses Tag und seine Attribute etwas genauer an:

      139

      Kapitel

      5

      Seiten mit Passwort schützen

      Das Attribut action Das Attribut action kümmert sich um die »Formular-Aktion«. Action ist also dafür verantwortlich, was mit dem Formularinhalt passiert. Und was passiert damit? In unserem Beispiel besteht die Aktion lediglich aus dem Dateinamen passwort.php. Im Klartext: Die Formulardatei verschickt den Inhalt an sich selbst! Nanu, ist das denn richtig? Ja, genau das ist beabsichtigt! Beachte bitte, welchen Dateinamen du deiner Datei verpasst hast. Falls du von meinem Vorschlag abgewichen bist, musst du den Namen eintragen, den du für deine Datei gewählt hast! Im Zweifelsfall lässt du das Gänsefüßchenpaar einfach leer. Dann wird die aktuelle Datei aufgerufen: und du bist alle Sorgen los!

      Das Attribut method Das zweite wichtige Attribut ist das Attriut method. Es handelt sich dabei praktisch um die Versende-Methode. Es gibt zwei Werte, die du verwenden kannst. Das sind zum einen der Wert get und zum anderen der Wert post. Was ist der Unterschied? Mache den Test! Probiere doch einmal den Wert get aus. Ersetze post durch get und rufe das Formular über den Webserver auf. Tippe einen Wert in das Formularfeld und klicke auf SENDEN. Der Wert wird einfach nach einem Fragezeichen an die Adresse (an die URL) angehängt. Dort steht pass= und dahinter das, was du in das Texteingabefeld getippt hast.

      Völlig ungeignet: method="get" hängt

      die Werte an die URL.

      Für unsere Passwortabfrage ist das völlig ungeeignet. Es sei denn du möchtest, dass das Passwort für alle sichtbar übertragen wird. 140

      Ausgabe des Passworts Ich empfehle generell die Verwendung von post. Denn nur bei der Verwendung des Wertes post wird der Formularinhalt im Hintergrund weitergeleitet. Und tatsächlich verwendet man in der Praxis bei Formularen in der Regel den Wert post. Der Wert get dagegen kommt seltener vor. In Ausnahmefällen ist method="get" doch interessant. Denn nur so ist es möglich, dass der Benutzer auch einen Bookmark (Lesezeichen) auf eine Seite setzen kann. Die Formulardaten werden dabei mit im Lesezeichen gesichert, schließlich gehören sie dann zur URL dazu.

      Ausgabe des Passworts Ich fasse zusammen: Wir fangen das Passwort in unserem Formular auf. Der Formularinhalt (also das Passwort) wird im Hintergrund an das Dokument passwort.php geschickt. Nach Klick auf SENDEN ruft sich die Seite praktisch erneut auf. Das alles ist inzwischen sicher klar. Jetzt steht das Passwort zur Verfügung. Doch wie kommst du an das Passwort heran?

      Formularwerte als assoziatives Array Im vorigen Kapitel hatte ich dich mit den sogenannten assoziativen Arrays gequält. Erinnerst du dich? Die Mühe war nicht umsonst, denn jetzt trägt dieses Wissen Früchte. Auch Formulare werden von PHP als assoziatives Array verwaltet. Hoppla, du hast vergessen, was Arrays sind? Arrays sind Wertelisten, die aus einem Schlüssel-Werte-Paar (key-value) bestehen. Bei den einfachen indizierten Arrays ist der Schlüssel ein bei 0 beginnender Index-Wert. Bei den assoziativen Arrays dagegen lässt sich nicht nur der Wert, sondern auch der Schlüssel (key) frei bestimmen. Bei den von PHP zurückgegebenen Formularen entspricht der Name des Formularfelds dem Schlüssel (key). Der Wert (value) ist dagegen das, was der Benutzer in das Feld eingetippt hat. Das Array selber jedoch heißt $_POST, zumindest gilt das dann, wenn im -Tag das Attribut-Werte-Paar method="post" verwendet wurde. Beachte: Wenn du method="get" verwenden würdest, würde das Array $_GET heißen. Wir bleiben in unseren Beispielen jedoch stets bei method="post". 141

      Kapitel

      5

      Seiten mit Passwort schützen

      Ein Versuch: Das Passwort ausgeben Was weißt du inzwischen? Das von einem Formular zurückgegebene Array heißt $_POST. Das Formularfeld selber heißt im Beispiel pass. Ergo: Der im Formularfeld pass eingetragene Wert muss sich mit $_POST["pass"] ermitteln lassen. »Beweise, mein lieber Watson, wir brauchen Beweise!« »Natürlich, Holmes.« Also mache einen Versuch. In unserer zweiten Version der passwort.php gebe ich das Passwort einfach im Klartext aus! Und zwar mit der allseits beliebten Sprachanweisung echo. Ergänze einfach den PHP-Bereich unterhalb des Formulars. Notiere also unter dem Tag
      und über dem abschließenden noch Folgendes. " . $_POST["pass"] . "

      \n"; ?>

      Die

      -Tags dienen einfach nur dazu, einen Block zu bilden. Du hättest sie auch weglassen können. Wenn du sie verwendest, musst du in diesem Fall wieder mit dem Verkettungsoperator Punkt (.) arbeiten.

      Tatsache! Nach Klick auf Senden wird das Passwort angezeigt.

      Damit ist der Beweis erbracht: Der Zugriff auf den in das Formularfeld pass eingegebenen Wert funktioniert! Zum Vergleich: Diese zweite Version des Dokuments findest du im Unterordner version2.

      142

      Du ärgerst dich, dass du assoziative Array-Variablen auf umständliche Art und Weise mit dem String verketten musst? Gewöhnliche Variablen dagegen nicht? Dann verrate ich dir einen Geheimtrick: Du musst den key bei assoziativen Variablen nicht unbedingt in Gänsefüßchen schreiben. Statt $_POST["pass"] kannst du unter bestimmten Bedingungen auch mit $_POST[pass] auf das Passwort zugreifen. Und zwar immer dann, wenn diese Variable selber zu einem Abschnitt gehört, der in Gänsefüßchen eingekleidet wurde.

      Testen mit if-else

      Dann kannst du das Passwort also statt auf diese Weise echo "

      " . $_POST["pass"] . "

      \n";

      auch folgendermaßen ohne Verkettung ausgeben: echo "

      $_POST[pass]

      \n";

      Das ist aber nur deshalb gestattet, weil die gesamte echo-Anweisung innerhalb von Gänsefüßchen notiert wurde. Außerhalb von Gänsefüßchen solltest du diese Schreibweise nicht verwenden!

      Testen mit if-else Frisch ans Werk, nun kommt die Passwortabfrage. Wer das Passwort kennt, gelangt an die Inhalte heran. Wer nicht, wird über seine Unkenntnis informiert. Als Musterpasswort schlage ich die Zeichenfolge a?iX379 vor. Die Version 3 der Passwort-Abfrage arbeitet mit if-else. Damit sind wir zwar noch nicht am Ziel aller Wünsche angelangt, aber immerhin schon ein Stück weiter. Ich zeige dir diesmal den gesamten Teil zwischen :

      Wie lautet das Passwort?

      Geschützter Bereich

      Hier stehen die geheimen Inhalte ...

      Leider kennen Sie das Passwort nicht!



      143

      Kapitel

      5

      Seiten mit Passwort schützen Die für uns interessante Zeile steckt in: if ($_POST["pass"] == "a?iX379") {

      Hier wird getestet, ob der aus dem Feld pass ausgelesene Inhalt mit der Zeichenfolge a?iX379 übereinstimmt. Nur dann zeigt das Skript den Bereich mit den geschützten Inhalten an. Ich arbeite dabei mit einer if-else-Entscheidungsstruktur. Im if-Bereich teste ich auf Übereinstimmung. Wenn dieser Ausdruck wahr ist, wird der »geschützte Bereich« angezeigt. Falls nicht, greift der else-Zweig. Es erscheint der Satz »Leider kennen Sie das Passwort nicht«! Ist dir etwas aufgefallen? In diesem Beispiel habe ich PHP- und HTMLAbschnitte miteinander vermischt. Die HTML-Abschnitte stehen zwar außerhalb der PHP-Bereiche. Zumindest scheinbar. Trotzdem befinden sie sich innerhalb eines »PHP-Klammer-Blockes« ({ }): Dafür arbeite ich einfach mit mehreren PHP-Abschnitten, die die HTML-Bereiche jeweils »umklammern«. Je nach Bedarf schalte ich den PHP-Bereich dafür ab und wieder ein. Wie du siehst, kannst du HTML-Abschnitte also ganz problemlos in PHP einbinden. Hauptsache, du markierst korrekt, wo ein PHPAbschnitt beginnt und wo er wieder aufhört. Hauptsache, du vergisst nicht eine der hier notwendigen geschweiften Klammern!

      Schönheitsfehler? Variablentest mit isset()! Fällt dir an der dritten Version des Beispiels etwas auf? Richtig, es funktioniert! Herzlichen Glückwunsch. Nur wer das Passwort kennt, wird an die geschützten Inhalte herangelassen. Doch der Satz »Leider kennen Sie das Passwort nicht« wird auch dann eingeblendet, wenn die Seite zum allerersten Mal aufgerufen wird. Soviel Häme ist ungesund. Du musst dem Besucher ja nicht gleich am Anfang auf die Nase binden, dass du ihr oder ihm die Passwortkenntnis nicht zutraust.

      144

      Schönheitsfehler? Variablentest mit isset()!

      Gleich beim Aufrufen der Seite wird dem Besucher Unkenntnis unterstellt.

      Und tatsächlich befindet sich an dieser Stelle ein Schönheitsfehler. Der Satz sollte erst dann eingeblendet werden, nachdem der Formularinhalt abgeschickt wurde. Und nicht gleich am Anfang! Wie schaffst du das?

      Prüfen, ob die Variable überhaupt vorhanden ist Du prüfst einfach, ob die Variable überhaupt definiert und damit vorhanden ist. Denn wenn das Formular noch nicht abgeschickt wurde, kann eine Variable namens $_POST["pass"] noch nicht existieren! Oder? Das Array $_POST wird schließlich erst nach dem Abschicken des Formularinhalts erzeugt. Nutze die Funktion isset(). Die Funktion isset() prüft, ob eine Variable überhaupt gesetzt ist. Erst dann gibt sie den Wert wahr (true) zurück. Bei Nichtvorhandensein wird als Testergebnis jedoch false zurückgegeben. Die Syntax dieser Funktion sieht folgendermaßen aus: isset($Variable). Du übergibst die zu testende Variable einfach in runden Klammern. Baue das Skript um, verbessere es: Aus dem else-Zweig machst du einfach ein elseif! Und hier testest du nun, ob die Passwort-Variable gesetzt ist. Verändere also folgende Zeile: else {

      in elseif (isset($_POST["pass"])) {

      und schon hast du das Problem (vorerst) gelöst. 145

      Kapitel

      5

      Seiten mit Passwort schützen Die Wirkungsweise ist noch nicht ganz klar? Die Zeile liest sich wie folgt: Prüfe, ob die Variable $_POST["pass"] »gesetzt« ist. Wenn ja, gibt die Funktion isset() den Wert true zurück. Und if bzw. elseif testet schließlich auf Wahrheit. In diesem Fall (also nur bei gesetzter Variable) wird der Text »Leider kennen Sie das Passwort nicht« ausgegeben. Da die Variable beim ersten Aufruf der Seite jedoch noch nicht gesetzt ist, passiert gar nichts. Falls du vergleichen willst, schaust du dir das Beispiel im Ordner version4 an! Aufgepasst mit den vielen Klammern in der elseif-Zeile! Das Vergessen solch einer Klammer führt unweigerlich zu einer Fehlermeldung. Wo kommen die ganzen Klammern her? Die Bedingung für elseif wird in runden Klammern getestet. Die notierst du zuerst. Dann setzt du dort den isset()-Test hinein, der schließlich auch ein paar runde Klammern benötigt. Zum Schluss platzierst du innerhalb dieser runden Klammern die Variable, in unserem Fall $_POST["pass"]. Nach einem Leerzeichen folgt dann noch die geschweifte Klammer, die schließlich unseren Block einleitet. Mit dieser »vierten Version« der Passwortabfrage hast du ein wichtiges »Etappenziel« erreicht. Und da das Passwort im PHP-Bereich steht, wird es für Außenstehende auch nicht angezeigt.

      Das Skript noch etwas sicherer machen In diesem Skript steckt ein kleines Problem. Es handelt sich um einen unsichtbaren Hinweis (Notice), den ich für dich hier sichtbar gemacht habe:

      Das Skript produziert intern einen (normalerweise unsichtbaren) Hinweis.

      Der Hinweis bezieht sich auf Zeile 15 und besagt, dass der Index pass nicht definiert wäre. Schau dir Zeile 15 noch einmal genau an: 146

      if ($_POST["pass"] == "a?iX379") {

      Mehr Möglichkeiten mit switch Und tatsächlich steht dort $_POST mit dem Index pass. Fakt ist: Der Hinweis erscheint nur beim allerersten Aufruf der Seite. Wenn der Nutzer also noch keinen Formularinhalt eingetragen und abgeschickt hat. Das ist logisch: Wenn noch kein Formularinhalt abgeschickt wurde, kann es auch keine Variable $_POST mit dem Index pass geben. Derartige Notices (Hinweise) sind zwar keine Fehler, sie gelten aber als schlechter Programmierstil und lassen sich vermeiden. Undefinierte Indizes oder undefinierte Variablen geben Hackern gewisse Chancen, in das Skript einzudringen und Variablenwerte zu manipulieren. (Auch wenn die Chancen in diesem Fall sicher recht klein sind.) Die Lösung ist in diesem Fall ganz einfach. Füge auch in das einleitende if von Zeile 15 die eben besprochene isset()-Variablenprüfung ein – und zwar zusätzlich als erster von zwei Teilausdrücken. Verknüpfe beide Teilausdrücke mit dem &&-Operator. if (isset($_POST["pass"]) && $_POST["pass"] == "a?iX379") {

      Nun

      wird

      auch

      hier

      zuerst

      das

      Vorhandensein

      der

      Variablen

      $_POST["pass"] überprüft. Erst bei einem Erfolg findet der zweite Test statt. Vergleiche mit dem Beispiel aus dem Ordner version5.

      Wie du diese normalerweise unsichtbaren Hinweise einblendest, verrate ich dir übrigens im Nachfolgeband »PHP und MySQL Praxisbuch für Kids«.

      Mehr Möglichkeiten mit switch Ich bin nie zufrieden! Ein einziges lumpiges Passwort abfragen? Das kann doch jeder! Als nächste Stufe schwebt mir eine Seite vor, die mehrere Passwörter entgegennimmt. Je nach Passwort soll der Betrachter andere Informationen angezeigt bekommen. Das ist sozusagen die »Hohe Schule der Passwortkunst«. Folgende Passwörter sollen möglich sein: 0 a?iX379 0 a?iX380 0 a?iX381 »Richtig«, denkst du dir vielleicht: Da arbeite ich mit if und mehreren elseif-Bereichen. Stimmt. Gute Idee. Der Ansatz ist vom Prinzip her völlig korrekt! Doch gerade für solche Fälle gibt es eine Alternative zur ständigen »Elseifferei«. Schau dir die switch-Fallunterscheidung an.

      147

      Kapitel

      5

      Seiten mit Passwort schützen

      Die switch-Fallunterscheidung Du möchtest auf verschiedene Eingaben unterschiedlich reagieren? Dann bietet sich die switch-Fallunterscheidung an. Hier schlägst du gleich mehrere Fliegen mit einer Klappe. Die Syntax lautet: switch(Variable) { case Wert1: Anweisung; break; case Wert2: Anweisung; break; case Wert3: Anweisung; break; ... default: Anweisung; }

      Sieht kompliziert aus? Es ist einfacher, als du vielleicht denkst: Die switch-Fallunterscheidung untersucht, ob eine Variable mit den aufgelisteten Werten übereinstimmt. Deshalb schreibst du in der ersten Zeile switch(Variable) {

      Dabei ist das Wort Variable der Platzhalter für die zu prüfende Variable. (Für unsere Zwecke setzen wir an dieser Stelle nachher natürlich wieder $_POST["pass"] ein.) Beachte die öffnende geschweifte Klammer ({) am Schluss der Zeile, da switch() wieder einen Block benötigt. Die Übereinstimmung selber wird nun mit dem Schlüsselwort case getestet. Hinter dem Leerzeichen notierst du den Wert, mit dem die Variable evtl. übereinstimmen könnte. case Wert1: Wert1 ist hier natürlich der Platzhalter für die entsprechende Zahl bzw. Zeichenfolge. In unserem Fall würdest du als ersten Wert notieren a?iX379.

      148

      Beachte, dass am Ende der case-Zeile ein Doppelpunkt gesetzt werden muss. Gibt es eine Übereinstimmung? Dann wird die betreffende Anweisung nach dem Doppelpunkt ausgeführt. Die Programmabarbeitung muss

      Mehr Möglichkeiten mit switch durch das Schlüsselwort break beendet werden. Das Wort break steht hier für Abbruch. Falls es keine Übereinstimmung gibt, wird in der nächsten case-Zeile weitergeprüft. Sollte in keiner der case-Zeilen eine Übereinstimmung erzielt worden sein, wird die unter default: stehende Anweisung ausgeführt. Soweit die Theorie. Nun zur Praxis!

      Wir »switchen« los: Das praktische Beispiel Das praktische Beispiel nenne ich zur Unterscheidung switch.php. Achte also auf diesen neuen Dateinamen. Und hier die genaue Schrittfolge zur Erstellung des Quelltexts.

      >

      Zuerst übernimmst du das Formular aus dem allerersten PasswortBeispiel. Der einzige Unterschied: Beachte den bei action einzutragenden Wert. Da das neue Projekt unter dem Namen switch.php gesichert wird, musst du hier auch switch.php notieren!

      >

      Hier drucke ich ganz schnell zur Veranschaulichung noch einmal den gesamten HTML-Quellcode ab, der vorerst zwischen stehen muss. Die Überschrift kannst du natürlich frei wählen:

      Drei Passworte abfragen



      >

      Ich zeige dir nun die Vorgehensweise, mit der ich meine Skripte erstelle. Und zwar beginne ich dabei stets »außen« und arbeite mich »nach innen« vor. Also, mach mit: Unter dem Formular fügst du zuerst einen PHP-Bereich ein. Dazwischen lässt du genug Platz zum Ergänzen der noch folgenden Codezeilen.

      >

      Nun notierst du innerhalb des PHP-Bereichs zuerst eine ifAnweisung, mit der du auf das Vorhandensein der Variable $_POST["pass"] testest. Nun sieht der gesamte PHP-Bereich folgendermaßen aus:

      149

      Kapitel

      5

      Seiten mit Passwort schützen

      Was habe ich hier gemacht? Ich spanne die if-Abfrage praktisch um das gesamte Skript herum. Und zwar als eine Art Klammer. Im Klartext: Die in diesem untergeordneten Block enthaltenen Zeilen sollen nur dann ausgeführt werden, wenn die Variable gesetzt ist. Das schützt uns zum einen vor unsichtbaren Hinweisen. Zum anderen macht unsere noch folgende switch-Fallunterscheidung tatsächlich nur bei gesetzter Variable Sinn! Diese »alles umspannenden if-Abfragen« sind übrigens eine häufige Programmiertechnik. In den meisten Fällen wird dabei wie hier auf den else-Zweig verzichtet, da dieser nicht benötigt wird.

      >

      Das Prinzip ist klar? Gut! Innerhalb des if-Blocks notiere ich nun die switch()-Fallunterscheidung.

      >

      So sieht der gesamte PHP-Bereich aus. Die von mir hervorgehobenen ersten zwei und letzten zwei Zeilen sind die, die du eben aufgeschrieben hast. Der Rest ist neu hinzugekommen, er erzeugt die switch()Fallunterscheidung.

      Passwort-Bereich 1

      "; break; case "a?iX380": echo "

      Passwort-Bereich 2

      "; break; case "a?iX381": echo "

      Passwort-Bereich 3

      "; break; default: echo "

      Leider kennen Sie das Passwort nicht!

      "; } } ?>

      150

      Inhalt mit include einbinden Zur Information: Aus Gründen der Übersichtlichkeit habe ich hier auf das Einbinden von HTML-Bereichen verzichtet. Eine Zeile wie echo "

      Passwort-Bereich 3

      ";

      steht als Platzhalter für den entsprechenden Passwortbereich.

      Drei Passwörter stehen zur Auswahl.

      Und, schon ausprobiert? Sehr gut! Wie du siehst, kannst du auch mit switch() eine Passwortabfrage erzeugen.

      Inhalt mit include einbinden Apropos Platzhalter für den entsprechenden Passwortbereich. Wäre es nicht schöner, die betreffende Seite extern ablegen zu können? Damit du die »geheimen Infos« viel einfacher bearbeiten kannst? Wie gut, dass es include() gibt! Mit der Funktion include() kannst du externe Dateien einbinden und auswerten. Notiere in runden Klammern einfach den Dateinamen und evtl. den Pfad zur jeweiligen Datei, und zwar von Gänsefüßchen umhüllt. Wichtig zu wissen: Durch den Einsatz von include() wird die PHPNotation automatisch abgeschaltet. Die einzubindende Datei wird als normale HTML- bzw. Textdatei betrachtet. Um die Datei info1.html einzubinden, schreibst du z. B. include("info1.html").

      >

      Erstelle nun eine Datei für jeden Passwort-Bereich. Als Endung entscheidest du dich für die Endung .html. Die erste Datei nennst du im Beispiel info1.html.

      Bereich für Passwort 1

      Hier stehen die Infos für die Besitzer des 1. Passworts.



      151

      Kapitel

      5

      Seiten mit Passwort schützen

      >

      Erzeuge nach diesem Muster die zwei weiteren externen Dateien namens info2.html und info3.html. Achte darauf, dass du diese Dateien im Beispiel in den gleichen Ordner legst, in dem die switch.php liegt.

      Und nun baust du die switch.php um. Der derart umgestaltete switch()-Block sieht folgendermaßen aus: switch($_POST["pass"]) { case "a?iX379": include("info1.html"); break; case "a?iX380": include("info2.html"); break; case "a?iX381": include("info3.html"); break; default: echo "

      Leider kennen Sie das Passwort nicht!

      "; }

      Probiere es aus, es funktioniert. (Das Vergleichs-Beispiel auf CD heißt hier switch2.php.) Der Vorteil liegt auf der Hand: Es ist für dich nun viel einfacher, den Inhalt der Passwort-Bereiche zu bearbeiten und anzupassen. Merkst du etwas? Du kennst jetzt zwar die switch()-Fallunterscheidung an einem praktischen Beispiel. Doch mit dem Thema Sicherheit hat die bisherige Vorgehensweise nicht das geringste zu. Der Besucher braucht nur (durch Raten) den direkten Link zur Datei info1.html, info2.html bzw. info3.html zu kennen. Schon gelangt sie oder er an deine ach so geheimen Daten heran! Mehr Tipps zur Sicherheit folgen deshalb im nächsten Abschnitt.

      Mehr Sicherheit: Endungs- und Ordnertricks Zurück zum Thema Sicherheit. So flexibel und angenehm die »includeMethode« zu sein scheint. Hier zeigen sich offenbar die Grenzen. Trotzdem 152

      Mehr Sicherheit: Endungs- und Ordnertricks habe ich ein paar Ideen, wie du mehr Sicherheit erreichen kannst. Schau dir einfach meine Ideen an und mache dir deine eigenen Gedanken: 0 Verwende Dateinamen, die sich nicht so leicht raten lassen. Wie wäre es mit d_75uzRxei.html? 0 Verwende eine andere Dateiendung als .html. Der Funktion include() ist die Endung egal. Du kannst deine Dateien auch .txt, .inc oder sogar .exe nennen. 0 Es geht noch wilder: Verwende z. B. die Endung .gif, .zip oder .mid. Bei all diesen Endungen zeigen die meisten Browser die Datei nicht im Klartext an, da sie keine HTML-Datei erwarten. Gif-Grafiken werden als Bild erkannt. Dateien mit .zip am Ende will der Browser herunterladen, da er hier ein sogenanntes gepacktes ZIP-Archiv vermutet. Noch pfiffiger ist vielleicht die Endung .mid. Die meisten Browser bestehen darauf, eine derartige Datei abzuspielen, da sie an der Endung eine MidiKlangdatei zu erkennen glauben. 0 Nutze einen (oder mehrere) Unterordner für deine Dateien. Wie wäre es mit content007? Dass der Besucher zum einen den richtigen Ordnernamen für den Unterordner errät und zum anderen den korrekten Dateinamen, ist schon mehr als unwahrscheinlich.

      Verstecke die Dateien im Unterordner und verpasse ihnen eine falsche Dateiendung.

      Ich habe mich im ersten Beispiel für eine Kombination aus der letzten und der vorletzten Idee entschieden. Der Funktion include() ist die Dateiendung der einzubindenden Datei schließlich herzlich egal. Also benenne ich meine Textdateien einfach um.

      153

      Kapitel

      5

      Seiten mit Passwort schützen Vergleiche mit meiner Beispieldatei include.php. Die einzelnen Textdateien habe ich mit der Endung .mid versehen und in einem Unterordner namens content007 abgelegt. Tipp: Das Umbenennen einer Datei gelingt im Windows-Explorer. Rechtsklicke auf die Datei, wähle den Befehl UMBENENNEN. Lege die neue Endung fest. Schon wieder wirst du nur mit einem Teil der Wahrheit abgespeist. Ich fürchte, dass an dieser Stelle wohl wieder etwas handfestes HundeKnow-how gefragt ist! Es gibt eine weit sicherere Lösung, als dir der Buchautor glauben machen möchte. Zugegeben, nicht bei allen Dienstleistern klappt es. Jedoch bei vielen kostenpflichtigen Anbietern wie z. B. bei www.all-inkl.com. Wie lautet der Trick? Lege die zu schützenden Dateien zuerst in einem separaten Unterordner ab, wie hier schon gezeigt. Diesen Unterordner schützt du nun mit dem Konfigurationstool deines Dienstleisters! (Dahinter verbirgt sich eine als htaccess bezeichnete Technik.) Ein Beispiel? Gut! Ich habe für dich einen Ordner namens safe eingerichtet. Dort liegt eine derartige .htaccess-Datei. Sie schützt diesen Ordner vor dem Zugriff von außen. Im safe-Ordner kannst du also ohne Reue HTML-Dateien wie info1.html, info2.html oder info3.html ablegen – sie sind von außen nicht sichtbar. Vergleiche mit meiner Lösung include2.php. Probiere aus, ob es auch bei deinem Hoster funktioniert. Und noch einen Trick habe ich herausgefunden. Du kannst die zu schützenden Dateien auch in einen anderen sicheren Ordner legen. Ich meine einen Ordner, der beim Dienstleister »von Hause aus« geschützt ist. So ist bei www.all-inkl.com der Ordner cgi-bin von außen nicht erreichbar – und das ganz ohne schützende .htaccess-Datei. Er ist für Skripte vorbehalten. Wenn du jedoch hier Dateien ablegst und diese per include() einbindest, werden die Dateien auch aus diesem Ordner herausgeholt.

      Schlussbemerkung In diesem Kapitel hast du nicht nur viel zum Thema Passwortschutz gelernt. Du hast bei dieser Gelegenheit auch erfahren, wie Formulare abgeschickt und ausgewertet werden. Mit der switch()-Fallunterscheidung kennst du eine weitere wichtige Methode, Eingaben auf Übereinstimmung zu überprüfen. Außerdem weißt du nun, wie du externe Dateien per include() einbinden kannst. 154

      Zusammenfassung

      Zusammenfassung 0 Du weißt, wie Formulare ausgewertet werden. Notiere im
      -Tag das Attribut action. Gib als Wert den Namen bzw. Pfad der PHP-Datei an, die die Formulardaten entgegennehmen soll. (Wenn du das Gänsefüßchenpaar leer lässt, wird automatisch wieder die aktuelle Datei aufgerufen.) Das Attribut method dagegen steuert die Versendemethode (get bzw. post). Schreibe method="post", wenn die Daten im Hintergrund übermittelt werden sollen. 0 Der Formularinhalt wird als assoziatives Array zurückgegeben. Bei Auswahl von method="get" heißt dieses $_GET, bei method="post" dagegen $_POST. Den Wert eines Formularfeldes kannst du im letzten Fall über $_POST["Feldname"] auslesen. 0 In Ausnahmefällen darfst du den key bei assoziativen Arrays auch ohne Gänsefüßchen notieren, schreibe z. B. $_POST[Feldname]. Durch diese Komfortschreibweise ersparst du dir das Verketten des übrigen Strings mit den Array-Variablen. 0 Die Funktion isset() testet, ob eine Variable überhaupt vorhanden ist. Sie gibt wahr oder falsch zurück. Du möchtest prüfen, ob ein Passwortfeld namens pass existiert? Das erreichst du mit isset($_POST["pass"]). 0 Die switch()-Fallunterscheidung untersucht, ob eine Variable mit den aufgelisteten Werten übereinstimmt. Je nach Übereinstimmung kannst du ganz unterschiedliche Codezeilen ausführen lassen. Damit ist switch() eine Alternative zu if und elseif. Mit switch() kannst du jedoch nur auf Übereinstimmung testen. Die Prüfung, ob ein Wert z. B. größer, kleiner oder ungleich ist, ist if bzw. elseif vorbehalten. 0 Binde externe Dateien mit der Funktion include() in deine PHPAbschnitte ein. Die einzubindende Datei wird dabei unabhängig von der Endung als normale HTML- bzw. Textdatei betrachtet. Möchtest du hier PHP-Code einbinden, musst du das in der externen Datei erstens durch die Endung .php und zweitens durch die PHP-Tags kenntlich machen.

      155

      Kapitel

      5

      Seiten mit Passwort schützen

      Ein paar Fragen … 1. Bei welcher Versendemethode werden Formulardaten im Hintergrund an das entsprechende Skript geschickt? 2. Angenommen, du verschickst den Formularinhalt mit method="get". Wie greifst du im PHP-Skript auf den Inhalt eines Feldes namens pass zurück? 3. Wie heißt die Funktion, mit der du die Existenz einer Variablen prüfen kannst? 4. Angenommen, du legst eine Datei namens inhalt.txt in den Unterordner daten. Der Pfad zu dieser Datei lautet also daten/inhalt.txt. Du möchtest diese Datei über include() vom Wurzelordner aus einbinden. Wie sieht die komplette Funktion aus?

      … und ein paar Aufgaben 1. Schreibe ein PHP-Dokument namens vorname.php. Erstelle hier ein Formular mit Texteingabefeld, in welches der Benutzer seinen Vornamen eingeben kann. Nenne das Texteingabefeld vorname. Nach Klick auf SENDEN soll unter dem Formular ein persönlicher Begrüßungssatz wie »Hallo Petra!« stehen. 2. Gib den Inhalt des Formularfelds ($_POST["vorname"]) in einer Syntax wieder, die auf die Verknüpfung mit dem umgebenden String verzichtet. 3. Falls noch nicht getan: Sorge dafür, dass die Begrüßung nur dann erfolgt, wenn das Formular zum einen abgeschickt wurde (Ist die Variable gesetzt?) und zum anderen aber auch, wenn das Feld nicht leer ist. Verknüpfe also zwei Bedingungen miteinander. Tipp: Ein Leerstring wird durch ein Paar Gänsefüßchen symbolisiert. 4. Wie gut sind deine generellen Formularkenntnisse? Ändere das Passwortbeispiel aus dem ersten Teil des Kapitels (Datei passwort.php) wie folgt ab: Das Formularfeld soll das Passwort bei der Eingabe nicht mehr im Klartext anzeigen. Stattdessen sollen je nach Browsertyp Sternchen bzw. Kreise erscheinen.

      156

      6 Etwas Mathe: Taschen(geld)rechner Kennst du das auch? Da bekommt man nun regelmäßig eine gewisse Summe pro Monat. Und dann ist am Ende des Geldes noch so viel Monat übrig. Wo verschwinden sie hin, die sauer verdienten Piepen? Was passiert mit deinem Taschengeld? Ich glaube, hinter diesem Phänomen steckt eines der letzten großen Rätsel der Menschheit. Versuchen wir gemeinsam, zumindest etwas Licht in das Dunkel zu bringen. In diesem Kapitel zeige ich dir aus aktuellem Anlass, wie du $ mit den Grundrechenarten umgehst $ einen Einnahme-Ausgaben-Vergleich erstellst $ das Ergebnis absolut und in Prozent darstellst $ Zahlen rundest und mit Nachkommastellen füllst $ ein Diagramm zur Auswertung zeichnest $ einen einfachen Taschenrechner programmierst $ die Berechnung mit Hilfe einer Funktion erleichterst Mit anderen Worten: In diesem Kapitel dreht sich alles rund um die Mathematik. Ganz unabhängig davon, welche Einstellung du zu diesem Schulfach hast bzw. hattest.

      157

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner

      Nicht ohne Grund: Grundrechenarten Eine Programmiersprache wäre keine Programmiersprache, wenn man damit nicht rechnen könnte. Und genau wie in der Schule geht es auch in PHP mit den Grundrechenarten los. Wir wollen uns ja nicht gleich am Anfang überanstrengen!

      Plus, Minus, Mal, Geteilt Die vier Grundrechenarten lauten Plus, Minus, Mal und Geteilt. Die entsprechenden Rechenoperatoren sehen in PHP so aus: +, -, * und / (Schrägstrich). Außerdem gibt es vom Plus- bzw. Minuszeichen jeweils noch ein »Doppelmoppel-Exemplar« namens ++ bzw. --. Mit dem »Doppelplus« wird nicht etwa doppelt addiert. Es handelt sich vielmehr um den Operator zum Inkrementieren. Inkremen… wie bitte? Mit Inkrementieren ist lediglich das Hinzuzählen von 1 gemeint. Rechentechnisch steckt also die Anweisung $i = $i + 1 dahinter. Zur Variablen $i (oder $kaugummi oder wie auch immer) wird also der Wert 1 hinzugezählt. Und warum schreibt man dann nicht einfach $i = $i + 1, sondern $i++? Weil Programmierer faule Gesellen sind und kürzen, wo es nur geht. Zugegeben, so ein $i++ sieht auf den ersten Blick recht ungewohnt aus. Nach einer gewissen Eingewöhnungszeit geht’s aber dann recht fix! Ähnlich verhält es sich mit dem Gegenstück --. Damit wird dekrementiert, also um 1 vermindert. Für die Berechnung $i = $i - 1 schreibt man also $i--. Merke dir diese Anweisungen!

      Grundrechenarten im Überblick Und nun zeige ich dir die vier Grundrechenarten nebst Inkrement- und Dekrement-Operator fein säuberlich aufgelistet in einer Tabelle. Ich habe gleich ein Anwendungsbeispiel hinzugeschrieben. Operator + * / ++ --

      158

      Bedeutung Addition Subtraktion Multiplikation Division addiert 1 hinzu zieht 1 ab

      Beispiel $a = 8 + $c $c = $b – 2 10 * 4 $x / $y $i++ (ist die Abkürzung für $i = $i + 1) $i-- (steht für $i = $i - 1)

      Rechenpraxis: Zwei mal Drei macht Vier …

      Rechenpraxis: Zwei mal Drei macht Vier … … und Drei macht Neune. Zumindest behauptet das Pippi Langstrumpf. Ich fürchte, dass ich während meiner Schulzeit zu ähnlichen Ergebnissen gelangt war. Egal ob kleines Einmaleins oder große Berechnungen: Mit PHP lässt sich das alles endlich wunderbar nachprüfen. Ran an die Praxis, jetzt wird gerechnet. Wir begnügen uns dabei mit der Multiplikation. Notiere das Grundgerüst für eine HTML-Datei. Ich zeige dir nun den kompletten Teil zwischen den Tags .

      Zwei mal Drei



      Das Skript ist einfach: Die zu multiplizierenden Werte halte ich in den Variablen $a und $b fest. Das Ergebnis speichere ich in der Variablen $c und gebe das Ganze durch eine simple echo-Anweisung aus. Der PHP-Teil wird außerdem vom Tag-Paar

      eingefasst, damit das Ergebnis innerhalb eines Absatzes ausgegeben wird. Du weißt schon, jeglicher Text sollte innerhalb eines Block-Elements notiert werden. Und das Ergebnis selbst?

      »Plutimikation« frei nach Pippi Langstrumpf. PHP rechnet genauer!

      Zugegeben, Autor und Pippi gehören nicht gerade zu den Leuchten in Mathematik. Aber zum Glück gibt es ja die Rechenfunktionen von PHP! Übrigens, falls du das Beispiel suchst: Ich habe es unter dem Namen pippi.php auf der CD abgespeichert. 159

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner

      Einnahmen minus Ausgaben: Taschengeldrechner Wie wär’s zur Abwechslung mit einer Subtraktion? Schließlich werden im Leben wohl mehr Dinge »abgezogen« als hinzugefügt. Beim Taschengeld zum Beispiel.

      Formular erzeugen Erstelle doch einmal ein Formular mit zwei Feldern. Das eine Feld nimmt den Einnahme-Wert entgegen und wird mit a benannt. Das zweite Feld ist für die Ausgaben gedacht, es bekommt den Namen b verpasst. Dein Skript berechnet Einnahmen minus Ausgaben und präsentiert dir das meist ernüchternde Ergebnis. Das Dokument heißt übrigens rechner.php, denn schließlich musst du auch den Dateinamen wissen. Diesen brauchst du für das Attribut action im Formular, denn das Formular schickt den Inhalt an sich selber. Der Quelltext ist simpel. Wenn du beim vorigen Kapitel gut mitgekommen bist, verstehst du die Wirkungsweise auf Anhieb.

      Einnahme-Ausgabe-Rechnung

      Einnahme:
      Ausgabe:

      Das Ergebnis lautet $c

      \n"; ?>

      Der PHP-Teil besteht lediglich aus zwei Zeilen, die sich sofort erschließen. Mit $_POST['a'] ermittelst du den Wert aus Feld a, mit $_POST['b'] dagegen die Zahl aus Feld b. Die Differenz wird berechnet, in der Variablen $c gespeichert und in der zweiten PHP-Zeile ausgegeben.

      160

      Einnahmen minus Ausgaben: Taschengeldrechner

      Du möchtest Bruchzahlen notieren, z. B. 12,5? Dann beachte, dass Dezimalbrüche in PHP (und in anderen Programmiersprachen) nicht mit dem Komma getrennt werden. Im angelsächsischen Raum wird dafür der Punkt verwendet, denn die Amis oder Engländer kennen unsere Bedeutung für das Komma nicht: Schreibe Kommazahlen also stets mit Punkt statt Komma! Für 12,5 musst du also notieren: 12.5!

      Dezimalbruch auf Angelsächsisch: Trenne mit Punkt statt mit Komma!

      Ist es dir schon aufgefallen? In diesem Kapitel verwendet der Autor die Schreibweise $_POST['a'] und nicht $_POST["a"]. Warum die einfachen statt der doppelten Gänsefüßchen? Gibt es da einen Unterschied? Nein, den gibt es nicht. Es ist in unserem Fall völlig egal, ob du die einfachen oder die doppelten Gänsefüßchen verwendest. Das Thema spielt erst dann eine Rolle, wenn du Gänsefüßchen ineinander verschachtelst. Denn gleichrangige Gänsefüßchenpaare dürfen nicht ineinander verschachtelt werden. Nimm die Schreibweise, die dir am besten behagt. In der Praxis wirst du mal diese, mal jene Schreibweise vorfinden und der Autor dieses Buches will dich wahrscheinlich nur an diese Praxis gewöhnen.

      Kein Ergebnis anzeigen beim ersten Aufruf So simpel können wir das Skript nicht stehen lassen. Denn selbst beim ersten Aufruf der Seite erscheint nun der Text Das Ergebnis lautet 0. Wozu haben wir im vorigen Kapitel lang und breit die if-Abfrage besprochen? Prüfe, ob die beiden Variablen gesetzt sind. Beim ersten Aufruf der Seite wird das noch nicht der Fall sein. Der Inhalt der Formularfelder wird schließlich erst dann verschickt, wenn du auf die Schaltfläche BERECHNEN klickst. Verbinde diese Abfrage durch den &&-Operator (AND). Erst wenn beide Bedingungen wahr sind, soll das Ergebnis eingeblendet werden. 161

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner Hier siehst du den PHP-Teil mit dieser zusätzlichen if-Klammer: Das Ergebnis lautet $c

      \n"; } ?>

      Besser testen: Die Funktion empty() Zeit, dass ich mich mal wieder melde, dein Hund Buffi! Offenbar teilt dir der Autor nur die »halbe Wahrheit« mit und speist dich mit der Funktion isset() ab. Was passiert, wenn du nichts in die Felder einträgst und trotzdem auf die Schaltfläche BERECHNEN klickst? Das Skript berechnet das Ergebnis 0. Warum? Leer gelassene Felder werden als Leerstring interpretiert, was in diesem Fall gleichbedeutend ist mit der Ziffer Null. Nimm statt isset() doch einfach die Funktion empty()! Mit empty() erreichst du fast das Gegenteil von isset(). Zur Wiederholung: Die Funktion isset() prüft, ob eine Variable gesetzt ist und gibt nur dann true zurück. Sonst liefert isset() jedoch den Wert false. Das ist bekannt. Mit der neuen Funktion empty() dagegen kannst du herausfinden, ob eine Variable nicht gesetzt ist, ob sie leer ist oder ob sie dem Wert 0 entspricht. In allen diesen drei Fällen liefert die Funktion true zurück, sonst ist der Wert von empty() false. Du schlägst also gleich drei Fliegen mit einer Klappe! Weil empty() ebenfalls einen Wahrheitswert zurückgibt, eignet sich die Funktion genau wie isset() so wunderbar für den Einsatz in ifStrukturen. Der Test lautet dann wie folgt: empty($Variable). Einen Haken gibt es noch an der Geschichte. Mit isset() ermittelst du, ob eine Variable gesetzt ist, nur dann gibt die Funktion true zurück. Mit empty() hingegen erhältst du true, wenn die Variable eben nicht gesetzt (oder leer oder 0) ist. Hmm. Eigentlich wollten wir es ja umgedreht haben. Doch hier greift ein neuer Trick! Stelle der Funktion ein Ausrufezeichen voran! Mit diesem Ausrufezeichen verkehrst du die Funktion in ihr Gegenteil, dieses Ausrufezeichen ist eine Art »Umkehroperator«. Schreibe also !empty($Variable). 162

      Einnahmen minus Ausgaben: Taschengeldrechner

      Und so sieht das Beispiel aus, wenn du statt isset() mit empty() arbeitest: Das Ergebnis lautet $c

      \n"; } ?>

      Bei leer gelassenem Feld erfolgt keine Berechnung.

      Zum Vergleich: Die derart verbesserte Version findest du unter dem Namen rechner_hund.php auf der CD. Probiere sie aus!

      Noch besser testen: Funktion is_numeric() Der Hund Buffi aus der Randspalte wird in letzter Zeit ein wenig vorlaut! Die Funktion empty() ist keine schlechte Idee, das gebe ich zu. Und die Überlegungen aus seinem Tipp sind schon sehr wichtig. Trotzdem sollten wir an dieser Stelle weiterdenken. Denn !empty() unterdrückt auch die Eingabe einer 0 in eines dieser Formularfelder. Zugegeben, in den meisten Fällen macht die Eingabe von Nullen nicht viel Sinn. Aber wenn du außer der Reihe doch mal eine 0 brauchst? Wer den Trick kennt, tippt einfach 0.0 oder 0. in das Formularfeld ein. Das geht. Besser wäre es, wenn du gleich die Funktion is_numeric() verwenden würdest. Sie prüft, ob ein Wert eine Zahl ist. Nur dann gibt sie true zurück, ansonsten false! Das ist doch viel eleganter, findest du nicht? Und so sieht das Beispiel aus, wenn du statt !empty() mit is_numeric() arbeitest. (Dabei prüfe ich zuerst aus Sicherheitsgründen mit isset(), ob die Variable überhaupt existiert. Erst dann teste ich, ob sie einem Zahlwert entspricht. So vermeide ich Fehlermeldungen.)

      163

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner

      Das Ergebnis lautet $c

      \n"; } ?>

      Ein weiterer Vorteil: Fehleingaben wie Buchstaben oder Leerzeichen werden auf diese Weise von vornherein ignoriert. Das Beispiel findest du unter dem Namen rechner_autor.php auf der CD zum Buch!

      $_SERVER['PHP_SELF']: Daten an sich selbst schicken Wirf doch einmal einen kritischen Kontrollblick auf das Formular. Auf die erste Zeile deines Formulars. Die Aktion interessiert uns. Bisher haben wir hier den Dateinamen notiert:


      oder auch:

      Eigentlich ist das eine zuverlässige und sichere Lösung. Doch wenn du den Namen der eigentlichen Datei änderst? Und wenn du dann vergisst, auch den Wert hinter action zu ändern? Dann klappt die Formularauswertung natürlich erst einmal nicht und die Fehlersuche beginnt. Da gibt es eine beliebte, allerdings nicht sonderlich sichere Lösung! Es gibt eine sogenannte Servervariable, die Namen und Pfad der Datei zurückgibt. Diese Variable steht im Array $_SERVER zur Verfügung. Der entsprechende key (Schlüsselwert) für diesen Fall heißt 'PHP_SELF'. Notiere also $_SERVER['PHP_SELF']; und schon hast du den schönsten Selbstverweis. Denn diese Variable enthält im aktuellen Fall den Namen rechner.php oder rechner_hund.php (mit Pfad), je nachdem, wie dein PHP-Dokument heißt. 164

      Wie viel bleibt übrig? Prozentrechnung! Mit anderen Worten: Du kannst dein Formular auch so einleiten:

      Vergiss jedoch keinesfalls die Anweisung echo. Erst damit sorgst du dafür, dass der in der Variablen $_SERVER['PHP_SELF'] steckende String ausgegeben und hinter action geschrieben wird. Diese Variante wird von Sicherheitsexperten leider als kritisch eingestuft, da auch der Inhalt von Servervariablen wie $_SERVER['PHP_SELF'] durch Hacker manipuliert werden kann. Im Buch verwende ich sie deshalb nicht. Wenn du dir wirklich die Arbeit erleichtern willst, lässt du das Gänsefüßchenpaar hinter action einfach leer. Das Versenden klappt trotzdem. Denn dadurch bleibt die aktuelle Datei automatisch der Empfänger der Formulardaten. Den Trick hatte ich dir ja weiter vorne schon verraten.

      Wie viel bleibt übrig? Prozentrechnung! Lust auf Prozentrechnung? Richtig, die »Sache mit den Torten«. Soviel zumindest ist bei mir vom Matheunterricht noch übrig geblieben. Und auch in PHP kannst du natürlich nach Herzenslust »Stücke aus der Torte herausschneiden«. Nimm einfach das vorhandene Dokument, passe es an und speichere es unter dem Namen prozent.php. Vergiss nicht, den Wert hinter action anzupassen, im Beispiel muss dieser jetzt natürlich prozent.php lauten. Du kannst auch als Wert hinter action eintragen, auch wenn es nicht die sicherste Lösung ist. Oder du lässt das Gänsefüßchenpaar einfach leer – das funktioniert auch!

      Der Quelltext im Überblick Im Beispiel möchtest du ermitteln, wie viel Prozent vom Taschengeld noch übrig geblieben sind. Du gibst Grundwert und Prozentwert ein und ermittelst den Prozentsatz. Die Einnahme entspricht dabei stets 100%, doch die Ausgabe, also der Prozentsatz?

      165

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner

      Mathematisch lässt sich das mit einem Dreisatz lösen. Du kannst auch Verhältnisgleichung dazu sagen. Die Einnahme ist bekannt, diese setzt du zu 100% (Wert 100) ins Verhältnis. Auch die Ausgabe kennst du, doch es fehlt die Angabe für Prozent. Du berechnest also Ausgabe * 100, geteilt durch Einnahme. Hier präsentiere ich dir nun den Quelltext im Überblick. Das Ergebnis lautet $c.

      \n"; echo "

      Ausgegeben wurden also $d Prozent.

      \n"; } ?>

      Teste das Skript ruhig einmal aus. Nimm für den Anfang einfache Werte. Du kannst als Einnahme 100 und als Ausgabe z. B. 20 notieren. Das Skript sollte nun auch für Prozent eine 20 ermitteln.

      Die Funktion round() zum Runden Mache einmal ein Experiment mit krummen Werten! Gib bei der Einnahme eine 12 ein. Ausgegeben hast du dagegen 5 Euro 50 Cent: Für die Ausgabe notierst du also 5.5 (mit Punkt statt Komma, nicht vergessen!) und klickst auf BERECHNEN. Bei krummen Werten erfolgt die Ausgabe langer Nachkommastellen.

      166

      Huch, so eine lange Prozentzahl? So genau wolltest du es vielleicht gar nicht wissen? Du wünschst die Prozentangabe lieber mit zwei oder ganz und gar ohne Nachkommastellen?

      Wie viel bleibt übrig? Prozentrechnung! Nutze die Funktion round(). Die Syntax lautet: round(Wert, Nachkommastellen)

      Für den Platzhalter Nachkommastellen notierst du einfach den gewünschten Wert, z. B. 2 oder 0. Im Beispiel werde ich den Prozentsatz mit zwei Nachkommastellen ausgeben. Dazu füge ich eine zusätzliche Zeile ein: echo "

      Das Ergebnis lautet $c.

      \n"; $d = round($d, 2); echo "

      Ausgegeben wurden also $d Prozent.

      \n";

      Die Zahl in der Variablen $d wird lediglich gerundet und erneut in $d gespeichert. Das Ergebnis kann sich sehen lassen:

      Gerundet sieht der Prozentsatz doch viel schöner aus!

      Du findest das Skript unter dem Namen round.php auf der CD!

      Zahlen formatieren mit sprintf() So ganz zufrieden bin ich bisher jedoch immer noch nicht. Die Prozentzahl haben wir wunderbar gerundet. Doch was ist mit dem Dezimalbruch für die Währung? Diese Zahl erscheint mal ohne Dezimalstellen, mal mit einer (wie im Beispiel) oder in manchen Fällen mit zweien. Gerade für die Ausgabe der Währung wäre eine einheitliche Schreibweise schön! Die Zahl sollte stets mit zwei Nachkommastellen angezeigt werden! Kein Problem, diesen Wunsch erfüllt uns die Funktion sprintf(). Diese Funktion formatiert einen String (oder eine Zahl) und gibt diese formatiert zurück. Die Grundsyntax lautet: sprintf("Formatieranweisung", Argument2)

      Das zweite Argument ist klar, da setzen wir die Variable $c ein. Doch wie sieht das erste Argument aus, welche Formatieranweisung sollen wir nehmen? 167

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner

      Die von mir empfohlene Formatieranweisung heißt %01.2f. Bitte frage mich nicht, was sich genau hinter dieser Zeichenfolge verbirgt, sondern merke sie dir einfach. Die von dir zu verwendende Funktion lautet im Beispiel demnach sprintf("%01.2f", $Variable). Diese Formatieranweisung sorgt dafür, dass der Wert der Variablen stets mit zwei Nachkommastellen ausgegeben wird. Probiere es aus. Das derart erweiterte Skript sieht folgendermaßen aus. Auf der CD findest du es unter dem Namen sprintf.php: Das Ergebnis lautet $c.

      \n"; $d = round($d, 2); echo "

      Ausgegeben wurden also $d Prozent.

      \n"; } ?>

      Der Wert wird nun stets mit zwei Nachkommastellen angezeigt.

      Im gewissen Sinne besteht eine Verwandtschaft zu round(): Zuviel Nachkommastellen werden gerundet. Im Gegensatz zu round() füllt sprintf() die fehlenden Nachkommastellen jedoch mit Nullen auf.

      168

      Schnell noch ein Supertipp von mir! Wie wäre es mit der Ausgabe der Währung? Auch das kannst du mit der Funktion sprintf() erledigen! Schreibe einfach sprintf("%01.2f Euro", $c) und schon erscheint hinter dem Wert der Text Euro.

      Traurige Säulen: Ergebnis als Diagramm

      Die Formatier-Funktion eignet sich sogar zur Ausgabe der Zeichenfolge Euro.

      Vergleiche mit dem Quelltext der Datei sprintf_euro.php von der CD! Du gibst einen Ausgabewert ein, der höher liegt als der Einnahmewert? Oder sogar eine negative Zahl? Dann entspricht der ermittelte Prozentwert möglicherweise nicht deinen Erwartungen! Um ganz professionell vorzugehen, könntest du diese Fehleingaben durch if-Abfragen abfangen. Und so wird es in der Praxis auch tatsächlich gemacht. (Mehr zu dieser Technik erfährst du im Kapitel 8.) Im Beispiel verzichten wir jedoch aus Gründen der Vereinfachung darauf!

      Traurige Säulen: Ergebnis als Diagramm Hast du Lust, mit den Zahlen etwas zu spielen? Erstelle zur Abwechslung doch einmal ein Säulendiagramm. Bei dieser Gelegenheit rundest du den Prozentwert so, dass keine Nachkommastellen übrig bleiben.

      Einfach aber wirkungsvoll: Ein Säulendiagramm zur Visualisierung der Daten.

      Zuerst zeige ich dir den kompletten Quelltext im Überblick. Danach folgt die kurze Erklärung. Aber eigentlich ist da gar nicht viel zu erklären. 169

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner Das Ergebnis lautet $c.

      \n"; $d = round($d, 0); echo "

      Ausgegeben wurden also $d Prozent.

      \n"; echo "

      Vergleichsdiagramm:

      \n"; echo ""; echo ""; echo "
       Einnahme
      \n"; echo ""; echo ""; echo "
       Ausgabe
      \n"; } ?>

      Der Trick besteht einfach darin, mit Tabellen zu arbeiten. Du benötigst so viele Tabellen wie Säulen, im Beispiel also zwei. Jede Tabelle besteht nur aus einer einzigen Zeile und zwei Zellen. Die Zelle der ersten Tabelle ist 100 Pixel breit (width='100') und besitzt die Hintergrundfarbe grün (bgcolor='green'). Das habe ich so vorgegeben. Die Breite der zweiten Tabellezeile wird dagegen durch den Prozentwert gesteuert. Und dieser liegt dank unserer Rundung auf Ganzzahlen genau zwischen 0 und 100. Zumindest solange wie du positive Zahlen einträgst, die nicht über dem Eingabewert liegen. Wozu habe ich das Zeichen   in der Tabellenzelle notiert? Das mache ich deshalb, weil die Zelle nicht leer gelassen werden darf. Erst mit diesem geschützten Leerzeichen sorge ich dafür, dass die Zelle nicht als leer betrachtet wird und formstabil bleibt. Das Beispiel findest du in der Datei diagramm.php auf der Buch-CD.

      Plus, Minus, Mal, Geteilt? Select!

      170

      Als nächstes Beispiel schlage ich einen simplen Taschenrechner vor. Dazu erweiterst du einfach das Subtraktions-Beispiel. Du kannst eines der ersten Beispiele verwenden, die Prozentrechnung und das Säulendiagramm interessieren hierbei nicht.

      Plus, Minus, Mal, Geteilt? Select! Bist du bereit? Subtrahieren ist out, Wahlfreiheit ist in: Per Auswahlfeld wählst du die gewünschte Rechenoperation, egal ob Addition, Subtraktion, Multiplikation oder Division.

      Ein simpler Taschenrechner mit PHP. Die Auswahl erfolgt per SELECTAuswahlfeld.

      Das Prinzip ist eigentlich gar nicht so schwer. Im Formular ergänzt du das Auswahlfeld (<select>). Und im PHP-Teil liest du dieses Feld aus.

      Der Quelltext im Überblick Zuerst zeige ich dir den Quelltext im Überblick. Danach besprechen wir das Wichtigste! Die Datei selber heißt im Beispiel select1.php.

      Taschenrechner

      Zahl 1:
      Rechenoperation: <select name="rz">
      Zahl 2:


      171

      Kapitel

      Etwas Mathe: Taschen(geld)rechner

      6

      case "-": $c = $_POST['a'] - $_POST['b']; break; case "*": $c = $_POST['a'] * $_POST['b']; break; case "/": $c = $_POST['a'] / $_POST['b']; break; } echo "

      Das Ergebnis lautet $c

      \n"; } ?>

      So liest du ein SELECT-Feld aus Das Herzstück des Skriptes ist das neue Feld SELECT wie Auswählen. Dieses Feld wird von <select> eingehüllt. Die einzelnen Tags bilden die verschiedenen Optionen. Also die Auswahlmöglichkeiten, die in der Liste herunterklappen. In diesem Fall handelt es sich um die vier Grundrechenoperatoren.

      Das Auswahlfeld Fertig ist das wunderbare Auswahlfeld, unsere praktische Klappliste. <select name="rz">

      Außerdem gebe ich dem Feld im einleitenden Tag <select> noch einen Namen mit auf dem Weg. Ich nenne das Feld rz (wie Rechenzeichen). Je nach Auswahl schickt das Feld den entsprechenden Value zurück, also entweder den String +, -, * oder /. So einfach ist das. Auch nicht weiter kompliziert ist die Auswertung im PHP-Teil! Hier arbeite ich mit der aus dem vorigen Kapitel bekannten switch-Anweisung. Erin172

      So liest du ein SELECT-Feld aus nerst du dich? Eine Variable wird auf das Vorhandensein eines Wertes geprüft, hier die Variable $_POST['rz']: switch($_POST['rz']) {

      Bei Übereinstimmung mit einem bestimmten Wert wird die jeweilige Rechenoperation ausgeführt, z. B. die Addition. case "+": $c = $_POST['a'] + $_POST['b'];

      Die Ausführung wird dann durch das Schlüsselwort break abgebrochen. break;

      So funktioniert es auch bei den anderen drei Fällen, zumindest sinngemäß. In diesem Fall kannst du auf den default-Zweig verzichten, da die Variable $_POST['rz'] sowieso nur einen der vier Werte annehmen kann. Zum Vergleichen: Du findest das Beispiel auch in der Datei select1.php.

      Werte in Formularfeldern speichern So schön unser Rechner bisher funktioniert: Eine Sache ist recht ärgerlich. Nach Klick auf BERECHNEN wird zwar das Ergebnis angezeigt. Doch die Werte sind längst aus den Eingabefeldern verschwunden. Kein Problem, speichere die Werte einfach dauerhaft in den Formularfeldern. Wie? Mit einem kleinen Trick. Baue die beiden Zahlen-Eingabefelder im Formular einfach um. Schreibe statt

      Zahl 1:


      einfach folgende aufgebohrte Zeile:

      Zahl 1:


      Ändere auch die zweite input-Zeile von Zahl 2:



      in

      173

      Kapitel

      6

      Etwas Mathe: Taschen(geld)rechner

      Zahl 2:



      Der Trick ist schnell erklärt: Du notierst einfach zusätzlich das Attribut value in den beiden -Formularfeldern. Damit lässt sich ein Wert schon vorher in das Formular eintragen. Den Wert schreibst du jedoch nicht fest, sondern dynamisch in das Feld, und zwar über einen kurzen PHPAbschnitt. Notiere also die Anweisung . Prüfe innerhalb des PHP-Bereichs zuerst, ob $_POST['a'] bzw. $_POST['b'] existieren. Dann gibst du die Werte aus mit echo $_POST['a'] bzw. echo $_POST['b']. Du findest das Skript unter dem Namen select2.php auf der CD zum Buch.

      Rechner de luxe: Wir schreiben eine Funktion An dieser Stelle folgt nun die große Herausforderung von Kapitel 6. Sozusagen der Höhepunkt. Bist du bereit? Stelle deinen Gehirnkasten auf Empfang, denn du schreibst eine eigene Funktion! Eine Funktion für das Rechenskript! Zugegeben, an der Funktionalität des kleinen Taschenrechner-Programms wird sich dabei nichts ändern. Zumindest nicht nach außen. Aber du bist nach dieser Aktion um einige wichtige Kenntnisse reicher. Und das sollte doch die Mühe allemal wert sein, oder?

      Was ist eine Funktion? Eine Funktion ist eigentlich nichts weiter, als eine Sammlung von Programmzeilen. Es ist ein Programmabschnitt, der etwas für dich tut. Ein Programmbereich mit einem speziellen Namen. Man kann eine Funktion aufrufen, übergibt ihr ein paar Argumente und bekommt das verarbeitete Ergebnis zurück. Klingt zu kompliziert? 174

      Rechner de luxe: Wir schreiben eine Funktion Denke einfach an die vordefinierten Funktionen. Es gibt hunderte davon in PHP. Einige kennst du schon, andere bringe ich dir im Verlauf des Buches noch bei. Die Funktion isset($variable) z. B. prüft eine Variable auf Existenz. Sie gibt je nach Sachstand den Wahrheitswert true oder false zurück. Die übergebene Variable (der Prüfling) wird hierbei auch als Argument bezeichnet. Eine Funktion kann auch mehrere Argumente besitzen. Erinnerst du dich an die Funktion sprintf(), die wir eben besprochen haben? Nimm die Zeile: $c = sprintf("%01.2f", $c);

      Die Funktion besitzt gleich zwei Argumente, die durch ein Komma getrennt werden. Das erste Argument steckt in der Formatieranweisung. Das zweite Argument ist der Wert, der formatiert wird. Im Beispiel gibt die Funktion den formatierten Wert zurück, der hier erneut in der Variablen $c gespeichert wird. Halten wir fest: Eine Funktion besitzt ein paar runde Klammern, die sich ohne Leerzeichen nahtlos an den Funktionsnamen anschließen. Innerhalb der runden Klammern werden die sogenannten Argumente übergeben