82
Thomas Theis Einstieg in PHP 5.4 und MySQL 5.5

Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Thomas Theis

Einstieg in PHP 5.4 und MySQL 5.5

Page 2: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Auf einen Blick

1 Einführung ........................................................................... 15

2 PHP-Programmierkurs .......................................................... 19

3 Daten senden und auswerten ............................................... 109

4 Datenbanken mit MySQL ..................................................... 167

5 Objektorientierung in PHP ................................................... 229

6 Fehler behandeln, Sicherheit erhöhen .................................. 281

7 Zeichenketten ...................................................................... 291

8 Dateien und Verzeichnisse ................................................... 307

9 Felder .................................................................................. 331

10 Datum und Zeit .................................................................... 353

11 Mathematische Funktionen .................................................. 375

12 Sessions und Cookies ........................................................... 393

13 Datenbanken mit SQLite3 .................................................... 421

14 XML ..................................................................................... 433

15 Ajax ..................................................................................... 445

16 jQuery .................................................................................. 461

17 Grafiken programmieren ...................................................... 481

18 PDF-Dateien erstellen .......................................................... 503

19 Automatisierter E-Mail-Versand ........................................... 523

20 Beispielprojekte ................................................................... 527

Page 3: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

1 Einführung .......................................................................................... 15

1.1 Zu diesem Buch ........................................................................... 151.2 PHP – eine Beschreibung ............................................................. 161.3 PHP – Vorzüge ............................................................................. 161.4 Aufbau dieses Buchs .................................................................... 171.5 Systemvoraussetzungen ............................................................... 18

2 PHP-Programmierkurs ..................................................................... 19

2.1 Einbettung von PHP in HTML ...................................................... 192.2 Kommentare ................................................................................ 212.3 Variablen, Datentypen und Operatoren ....................................... 23

2.3.1 Namen ........................................................................... 232.3.2 Variablen für Zahlen ....................................................... 242.3.3 Rechenoperatoren für Zahlen ......................................... 252.3.4 Variablen und Operatoren für Zeichenketten .................. 27

2.4 Einfache Formularauswertungen .................................................. 302.4.1 Eingabeformular ............................................................. 302.4.2 Auswertung mit $_POST ................................................ 322.4.3 Umwandlung von Zeichenketten in Zahlen ..................... 34

2.5 Verzweigungen ............................................................................ 372.5.1 if-Anweisung .................................................................. 382.5.2 if/else-Anweisung .......................................................... 392.5.3 Logische Operatoren ...................................................... 432.5.4 Rangordnung der Operatoren ........................................ 462.5.5 Mehrfache Verzweigung ................................................ 462.5.6 switch/case-Anweisung .................................................. 482.5.7 HTML in Verzweigungsblöcken ...................................... 50

2.6 Schleifen ...................................................................................... 512.6.1 for-Schleife .................................................................... 512.6.2 Beispiele für for-Schleifen ............................................... 532.6.3 Geschachtelte for-Schleifen ............................................ 542.6.4 Schleifen und Tabellen ................................................... 552.6.5 while-Schleife ................................................................ 582.6.6 do while-Schleife ........................................................... 602.6.7 Schleifenabbruch mit break ............................................ 612.6.8 Schleifenfortsetzung mit continue .................................. 62

5

Page 4: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

2.7 Felder .......................................................................................... 632.7.1 Numerisch indizierte Felder ........................................... 642.7.2 Assoziative Felder .......................................................... 66

2.8 Funktionen .................................................................................. 702.8.1 Ein erstes Beispiel .......................................................... 702.8.2 Definition, Aufruf und Funktionstypen ........................... 722.8.3 Externe Dateien ............................................................. 732.8.4 Funktionen mit einem Parameter ................................... 732.8.5 Funktionen mit mehreren Parametern ............................ 752.8.6 Rückgabewert einer Funktion ......................................... 782.8.7 Kopie und Referenz ........................................................ 802.8.8 Gültigkeitsbereich von Variablen .................................... 842.8.9 Variable Parameterlisten ................................................ 862.8.10 include-Anweisung ........................................................ 88

2.9 Behandlung von Fehlern .............................................................. 912.9.1 Ohne Ausnahmebehandlung .......................................... 912.9.2 Mit Ausnahmebehandlung ............................................. 93

2.10 Beispiele ...................................................................................... 952.10.1 Formatierung von Zahlen ............................................... 952.10.2 Geldanlage ..................................................................... 972.10.3 Steuertabelle .................................................................. 1002.10.4 Bestimmung des Ostersonntags ...................................... 103

3 Daten senden und auswerten ........................................................ 109

3.1 Textelemente ............................................................................... 1093.1.1 Einzeilige Texteingabefelder ........................................... 1093.1.2 Mehrzeilige Texteingabefelder ....................................... 1123.1.3 Passworteingabefeld, verstecktes Element ...................... 114

3.2 Auswahlelemente ........................................................................ 1173.2.1 Radiobutton-Gruppe ...................................................... 1173.2.2 Einfaches Auswahlmenü ................................................. 1203.2.3 Kontrollkästchen ............................................................ 1223.2.4 Mehrfaches Auswahlmenü ............................................. 124

3.3 Aktionselemente .......................................................................... 1263.3.1 Absenden und Zurücksetzen .......................................... 1263.3.2 Allgemeine Buttons ........................................................ 130

3.4 Weitere Möglichkeiten ................................................................ 1343.4.1 Auswertung in anderem Frame ....................................... 1343.4.2 Felder von Formularelementen ....................................... 1363.4.3 Formular und Programm in einer Datei .......................... 140

6

Page 5: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

3.4.4 Submit über Hyperlink, CSS ............................................ 1423.4.5 Daten an Formularziel anhängen .................................... 1443.4.6 Daten an Hyperlinkziel anhängen ................................... 1483.4.7 Dateien auf den Server hochladen .................................. 150

3.5 Beispiele ...................................................................................... 1533.5.1 Grundrechenarten .......................................................... 1543.5.2 Pizzabestellung .............................................................. 1563.5.3 Kopfrechnen .................................................................. 160

3.6 PHP-Programme publizieren ........................................................ 165

4 Datenbanken mit MySQL ............................................................... 167

4.1 MySQL und phpMyAdmin ........................................................... 1684.1.1 phpMyAdmin ................................................................. 1684.1.2 Beispieldatenbank und -tabelle ...................................... 1694.1.3 Datenbank erzeugen ...................................................... 1704.1.4 Tabelle erzeugen ............................................................ 1704.1.5 Primärschlüssel erzeugen ................................................ 1714.1.6 Datensätze eintragen ..................................................... 172

4.2 PHP und MySQL .......................................................................... 1744.2.1 Verbindung aufnehmen, Datensätze anzeigen ................ 1744.2.2 Datensätze auswählen .................................................... 1774.2.3 Ausgabe in eine HTML-Tabelle ....................................... 1824.2.4 Auswahl von Daten über ein Suchformular ..................... 1834.2.5 Datensätze erzeugen ...................................................... 1914.2.6 Ändern mehrerer Datensätze ......................................... 1964.2.7 Ändern eines bestimmten Datensatzes ........................... 1974.2.8 Datensätze löschen ........................................................ 2024.2.9 Benutzeroberfläche mit JavaScript und CSS .................... 2044.2.10 Ein Datenbankbrowser ................................................... 212

4.3 MySQL-Datenbanken publizieren ................................................ 2204.3.1 Verbindung aufnehmen .................................................. 2214.3.2 Export einer Tabelle ....................................................... 2234.3.3 Tabelle und Daten per Programm erzeugen .................... 226

5 Objektorientierung in PHP ............................................................. 229

5.1 Was ist objektorientierte Programmierung? ................................. 2295.2 Klassen und Objekte .................................................................... 230

5.2.1 private, protected und public ......................................... 2315.2.2 Anwendung der Klasse ................................................... 232

7

Page 6: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

5.3 Konstruktor ................................................................................. 2345.4 Destruktor ................................................................................... 2365.5 Optionale Parameter ................................................................... 2385.6 Handles und Kopien .................................................................... 241

5.6.1 Vordefiniertes Klonen .................................................... 2425.6.2 Benutzerdefiniertes Klonen ............................................ 2445.6.3 Übergabe eines Objekts an eine Funktion ...................... 245

5.7 Vererbung ................................................................................... 2465.7.1 Grundlagen .................................................................... 2465.7.2 Konstruktoren bei Vererbung ......................................... 250

5.8 Dereferenzierung von Objekten ................................................... 2515.9 Konstanten, statische Eigenschaften und Methoden .................... 2525.10 Abstrakte Klassen und Methoden ................................................ 2555.11 Magische Konstanten .................................................................. 2575.12 Operator instanceof ..................................................................... 2595.13 Hilfsfunktionen ............................................................................ 2605.14 Ausgabemethode __toString() ...................................................... 2625.15 Serialisierung ............................................................................... 2635.16 autoload-Funktion ....................................................................... 2655.17 Beispiel Scheck ............................................................................ 2675.18 Beispiel Kopfrechnen ................................................................... 272

5.18.1 Programmablauf ............................................................. 2725.18.2 Klasse »Spiel« ................................................................. 2755.18.3 Klasse »Aufgabe« ............................................................ 279

6 Fehler behandeln, Sicherheit erhöhen .......................................... 281

6.1 Anzeige von Fehlern .................................................................... 2816.2 Dauerhafte Konfiguration der Anzeige von Fehlern ...................... 2836.3 Temporäre Konfiguration der Anzeige von Fehlern ...................... 2866.4 Angriffe und Sicherheit ................................................................ 287

6.4.1 Programmpakete ............................................................ 2886.4.2 Sichtbare Daten ............................................................. 2886.4.3 Sessions ......................................................................... 2886.4.4 Variablen ....................................................................... 2896.4.5 Eingaben prüfen ............................................................. 2896.4.6 Passwörter ..................................................................... 290

8

Page 7: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

7 Zeichenketten .................................................................................... 291

7.1 Länge und Umwandlungsfunktionen ............................................ 2917.2 Zeichenketten und Felder ............................................................ 2947.3 Teilzeichenketten ......................................................................... 2967.4 Suchen nach Position ................................................................... 2987.5 Vergleich von Zeichenketten ........................................................ 2997.6 Codierung von Zeichen ................................................................ 3017.7 Einfache Verschlüsselung ............................................................. 3037.8 Weitere Verschlüsselungsmethoden ............................................. 305

8 Dateien und Verzeichnisse .............................................................. 307

8.1 Dateitypen ................................................................................... 3078.2 Lesen einer Zeile aus einer sequenziellen Datei ............................ 3088.3 Lesen aller Zeilen einer sequenziellen Datei ................................. 3108.4 Vereinfachtes Lesen einer Datei ................................................... 3138.5 Überschreiben einer sequenziellen Datei ...................................... 3148.6 Anhängen an eine sequenzielle Datei ........................................... 3158.7 Ein einfacher Zugriffszähler .......................................................... 3198.8 Wahlfreier Zugriff ........................................................................ 3218.9 Informationen über Dateien ......................................................... 3248.10 Informationen über ein einzelnes Verzeichnis .............................. 3268.11 Informationen über den Verzeichnisbaum .................................... 329

9 Felder ................................................................................................... 331

9.1 Operationen für numerisch indizierte Felder ................................ 3319.1.1 Sortierung ...................................................................... 3319.1.2 Wert und Position der Extrema ...................................... 3339.1.3 Statistische Auswertung ................................................. 3349.1.4 Feld verändern ............................................................... 338

9.2 Sortierung eines assoziativen Feldes ............................................. 3409.3 Zweidimensionale Felder, allgemein ............................................ 3429.4 Zweidimensionale numerische Felder ........................................... 3439.5 Zweidimensionale gemischte Felder ............................................. 3469.6 Zweidimensionale assoziative Felder ............................................ 348

10 Datum und Zeit ................................................................................. 353

10.1 Zeit ermitteln und ausgeben ........................................................ 35310.2 Zeit formatiert ausgeben .............................................................. 354

9

Page 8: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

10.3 Zeitangabe auf Gültigkeit prüfen .................................................. 35710.4 Absolute Zeitangabe erzeugen ..................................................... 35810.5 Relative Zeitangabe erzeugen ...................................................... 36010.6 Mit Zeitangaben rechnen ............................................................. 36210.7 Zeitangaben in Datenbanken ....................................................... 36510.8 Beispiel Feiertagsberechnung ....................................................... 36710.9 Kopfrechnen mit Zeitmessung ...................................................... 371

11 Mathematische Funktionen ........................................................... 375

11.1 Taschenrechnerfunktionen ........................................................... 37511.2 Mathematische Konstanten ......................................................... 37611.3 Ganzzahlermittlung ...................................................................... 37711.4 Extremwerte ................................................................................ 37911.5 Winkelfunktionen ........................................................................ 38011.6 Prüffunktionen für Zahlen ............................................................ 38111.7 Zufallszahlen ................................................................................ 38311.8 Mischen ...................................................................................... 386

11.8.1 Mischen mit eigenem Algorithmus ................................. 38711.8.2 Mischen mit shuffle() ..................................................... 388

11.9 Stellenwertsysteme ...................................................................... 389

12 Sessions und Cookies ....................................................................... 393

12.1 Sessionmanagement .................................................................... 39412.2 Beispiel für Sessions: Zugriffszähler .............................................. 39412.3 Beispiel für Sessions: Geschützte Website .................................... 396

12.3.1 Ablauf ............................................................................ 39612.3.2 Login-Seite ..................................................................... 39812.3.3 Intro-Seite ..................................................................... 399

12.4 Beispiel für Sessions: Webshop .................................................... 40112.4.1 Ablauf ............................................................................ 40212.4.2 Startseite ........................................................................ 40412.4.3 Include-Datei ................................................................. 40512.4.4 Tabelle der Artikel .......................................................... 40712.4.5 Warenkorb ..................................................................... 40912.4.6 Kasse ............................................................................. 412

12.5 Cookies ....................................................................................... 41312.6 Beispiel für Cookies: Besuch ......................................................... 41512.7 Beispiel für Cookies: Adressspeicherung ....................................... 417

10

Page 9: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

13 Datenbanken mit SQLite3 .............................................................. 421

13.1 SQLite3 ....................................................................................... 42113.2 Datenbankdatei, Tabelle und Datensätze erzeugen ...................... 42213.3 Abfrage der Datensätze ............................................................... 42413.4 Benutzeroberfläche mit JavaScript und CSS .................................. 42513.5 Beispiel Kopfrechnen ................................................................... 430

14 XML ..................................................................................................... 433

14.1 Einlesen eines einzelnen Objekts ................................................. 43314.2 Einlesen mehrerer Objekte ........................................................... 43614.3 Zugriff auf Attribute ..................................................................... 43914.4 Interne XML-Daten ..................................................................... 44114.5 Speicherung von Objekten ........................................................... 442

15 Ajax ...................................................................................................... 445

15.1 Hallo Ajax .................................................................................... 44515.2 Parameter senden ........................................................................ 44815.3 Bild tauschen ............................................................................... 45015.4 Mehrere Ergebnisse aus XML-Knoten .......................................... 45215.5 Mehrere Ergebnisse aus XML-Attributen ..................................... 45515.6 Zugriff auf MySQL-Datenbank ..................................................... 45615.7 Weitere Ereignisse ....................................................................... 458

16 jQuery .................................................................................................. 461

16.1 Erstes Beispiel .............................................................................. 46116.2 Selektoren, Methoden css(), html() und text() .............................. 46416.3 Ereignisse .................................................................................... 46716.4 Animationen ................................................................................ 47116.5 JavaScript .................................................................................... 47516.6 jQuery und Ajax ........................................................................... 477

17 Grafiken programmieren ................................................................. 481

17.1 Installation testen ........................................................................ 48117.2 Grafik speichern ........................................................................... 48317.3 Grafik unmittelbar anzeigen ......................................................... 48417.4 Text mit internen Fonts ................................................................ 48617.5 Text mit TrueType-Fonts .............................................................. 487

11

Page 10: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

17.6 Bild aus einer Datei laden ............................................................ 48917.7 Bilder aus Dateien ineinander einbetten ...................................... 49017.8 Ellipsen und Bögen ...................................................................... 49217.9 Rechtecke und Polygone .............................................................. 49417.10 Linien und Pixel ........................................................................... 49517.11 Füllen mit Farbe .......................................................................... 49717.12 Darstellung eines Aktienkurses .................................................... 499

18 PDF-Dateien erstellen ..................................................................... 503

18.1 Installation .................................................................................. 50318.2 PDF-Dokument erzeugen ............................................................. 50418.3 Text in Zelle ................................................................................. 50618.4 Fließtext, Schriftparameter ........................................................... 50818.5 Tabelle ........................................................................................ 51018.6 Kopf- und Fußzeile ...................................................................... 51218.7 Bild aus Datei laden ..................................................................... 51518.8 Hyperlinks ................................................................................... 51618.9 Linie, Rechteck, Position .............................................................. 520

19 Automatisierter E-Mail-Versand ................................................... 523

20 Beispielprojekte ................................................................................ 527

20.1 Projekt »Chat« ............................................................................. 52720.1.1 Frame-Aufbau ................................................................ 52720.1.2 CSS-Formatierung .......................................................... 52920.1.3 Ausgabe, Version »Textdatei« ......................................... 52920.1.4 Darstellung der Textdatei ............................................... 53020.1.5 Ausgabe, Version »Datenbank« ...................................... 53120.1.6 Darstellung der Datenbanktabellen ................................ 53220.1.7 Eingabe, Head ................................................................ 53320.1.8 Eingabe, PHP zum Speichern, Version »Textdatei« .......... 53420.1.9 Eingabe, PHP zum Speichern, Version »Datenbank« ....... 53520.1.10 Eingabe, Formular .......................................................... 53620.1.11 Mögliche Erweiterungen ................................................ 537

20.2 Projekt »Blog« .............................................................................. 53820.2.1 Aufbau der Datenbank ................................................... 54020.2.2 Blog für den Betrachter, Programmcode ......................... 54120.2.3 Blog für den Betreiber, Programmcode ........................... 542

12

Page 11: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Inhalt

20.3 Projekt »Forum« .......................................................................... 54620.3.1 Darstellung, Anmeldung ................................................. 54720.3.2 Darstellung, Hauptbildschirm ......................................... 54820.3.3 Darstellung, neuer Beitrag .............................................. 55020.3.4 Datenbank, Tabelle der Teilnehmer ................................ 55020.3.5 Datenbank, Tabelle der Beiträge .................................... 55120.3.6 Passwortvergabe ............................................................ 55220.3.7 Forum, CSS .................................................................... 55420.3.8 Forum, JavaScript-Funktion ............................................ 55520.3.9 Forum, Anmeldung ........................................................ 55720.3.10 Forum, Zugangsprüfung und Überschrift ........................ 55820.3.11 Forum, neuen Beitrag speichern ..................................... 55920.3.12 Forum, Filterung auswählen ........................................... 56020.3.13 Forum, Sortierung durchführen ...................................... 56220.3.14 Forum, Filterung durchführen ........................................ 56320.3.15 Forum, Sortierung auswählen ......................................... 56420.3.16 Forum, Beiträge darstellen ............................................. 56520.3.17 Forum, neuen Beitrag eingeben ..................................... 566

A HTML für PHP ................................................................................... 567

A.1 Die erste Seite ............................................................................. 568A.2 Formulare .................................................................................... 569A.3 Tabellen ....................................................................................... 571A.4 Hyperlinks ................................................................................... 573

B Installationen ..................................................................................... 575

B.1 Installationen unter Windows ...................................................... 575B.2 Installationen unter Ubuntu Linux ................................................ 579

Index ............................................................................................................ 583

13

Page 12: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

1 Einführung

In diesem Kapitel erfahren Sie, warum PHP eine gute Wahl ist. Ich stelleIhnen die Vorzüge von PHP vor und beschreibe den Aufbau des Buchs.Damit der Einstieg leicht fällt …

1.1 Zu diesem Buch

PHP ist eine weitverbreitete Sprache zur Entwicklung dynamischer Inter-netanwendungen, deren Nutzung seit ihrer ersten Einführung stetigansteigt. PHP wird inzwischen auf Millionen Websites weltweit einge-setzt.

BestsellerDieses Buch erscheint aktuell zu PHP 5.4 und MySQL 5.5. Es ist, wie schonseine Vorgängerbücher zu PHP 4 und PHP 5, eine leicht verständliche Ein-führung in die wichtigsten Einsatzgebiete von PHP. Zahlreiche Kommen-tare und Mails zu diesem Bestseller haben gezeigt, dass es als Lehrbuchsehr gut angenommen wird. Viele Leser fühlen sich erfolgreich an dieHand genommen und in die PHP-Welt eingeführt. Die verschiedenen Auf-lagen des Buchs wurden ständig überarbeitet beziehungsweise erweitert.

Für den Einsteiger ergeben sich bei PHP 5.4 und MySQL 5.5 im Vergleichzu älteren Versionen nur wenige Änderungen. Die Beispiele in diesemBuch laufen unter allen Versionen von PHP 5 und MySQL 5.

Die Software auf dem beiliegenden Datenträger können Sie sehr einfachinstallieren. Mit ihrer Hilfe können Sie schnell eigene PHP-Programmeentwickeln und testen. PHP ist in vielen kostengünstigen Angeboten vonWebsiteprovidern enthalten, sodass Sie die erlernten Kenntnisse dorterfolgreich einsetzen können.

PHP lernenZum Erlernen von PHP anhand des vorliegenden Buchs werden vonIhnen, dem künftigen PHP-Programmierer, lediglich Grundkenntnisseauf Anwenderebene von Microsoft Windows oder Linux verlangt. Siesollten mit Dateien und Verzeichnissen sowie mit einem Browser arbei-ten können. Machen Sie sich nun mit dieser erfolgreichen und einfachenSprache vertraut!

15

Page 13: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Einführung1

Für die Hilfe bei der Erstellung dieses Buchs bedanke ich mich bei Chris-tine Siedle und Anne Scheibe sowie dem ganzen Team von Galileo Press.

1.2 PHP – eine Beschreibung

DynamischeInternetseiten

PHP ist die Abkürzung für PHP Hypertext Preprocessor. PHP ermöglichtEntwicklern die Erzeugung dynamischer Internetseiten, mit denen soge-nannte Web Applications, wie z. B. E-Commerce-Systeme, Chats oderForen, erstellt werden. Im Unterschied zu statischen Internetseiten kannsich der Inhalt aufgrund von Aktionen des Benutzers oder neuer Basis-informationen, die z. B. aus Datenbanken stammen, jederzeit ändern.

MySQL PHP unterstützt insbesondere die einfache Auswertung von Formularen,mit denen ein Benutzer Daten an eine Website senden kann. Es ermög-licht die Zusammenarbeit mit vielen verschiedenen Datenbanksystemen.Die weitaus meisten PHP-Entwickler setzen das DatenbanksystemMySQL ein. Ein besonderer Schwerpunkt dieses Buchs ist daher derZusammenarbeit von PHP und MySQL gewidmet.

1.3 PHP – Vorzüge

Gründe fürdie Verwendung

von PHP

PHP bietet im Vergleich zu anderen Programmiersprachen viele Vorteile.Als wichtigste Gründe für die Nutzung von PHP sind zu nennen:

� Es dient der Entwicklung von Internetanwendungen.

� Es ermöglicht die einfache Entwicklung von Programmen.

� Es unterstützt verschiedene Plattformen.

� Es lässt sich leicht in den beliebten Apache-Webserver integrieren.

� Es ist erschwinglich und flexibel.

Im Folgenden sollen einige Eigenschaften von PHP näher betrachtet wer-den: Erlernbarkeit, Einsatzbereich, Preis und Ausführungsort.

Erlernbarkeit

Leicht erlernbar Im Vergleich zu anderen Sprachen ist PHP relativ leicht erlernbar. Diesliegt hauptsächlich daran, dass PHP im Gegensatz zu anderen Sprachenausschließlich für die Webserver-Programmierung entwickelt wurde undnur die dafür notwendigen Bestandteile enthält.

16

Page 14: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Aufbau dieses Buchs 1.4

Einsatzbereich

Auf vielenSystemeneinsetzbar

PHP wird von vielen Typen von Webservern einheitlich unterstützt.Andere Sprachen kommen nur auf bestimmten Servertypen zum Einsatz.Ein PHP-Programmierer kann also seine Kenntnisse später auf den unter-schiedlichsten Systemen nutzen.

Preis

Frei verfügbarPHP kostet nichts; Sie müssen weder einen Compiler noch ein Entwick-lungssystem kaufen. Es kann unter anderem auf dem ebenfalls frei ver-fügbaren und weitverbreiteten Apache-Webserver unter verschiedenenBetriebssystemen eingesetzt werden.

Ausführungsort

ServerprogrammEine Internetanwendung kann entweder auf einem Webserver (Server-programm) oder beim Betrachter einer Internetseite (Clientprogramm)ausgeführt werden. PHP-Programme sind stets Serverprogramme. BeimBetrachter wird also lediglich die Ausgabe der Programme dargestellt.Der Browser des Betrachters muss nur in der Lage sein, den vom Servergesendeten HTML-Code umzusetzen. Er muss keine besonderen Eigen-schaften besitzen, die mit der Programmiersprache des Webserverszusammenhängen. Die Seiten können daher auch von älteren Browserndargestellt werden.

Dateien und Datenbanken

Darüber hinaus haben Serverprogramme im Unterschied zu Clientpro-grammen (zum Beispiel in JavaScript) Zugriff auf Textdateien und Daten-banken. Dies ermöglicht erst die Durchführung häufig vorkommenderVorgänge: wie zum Beispiel die Suche nach bestimmten Daten oder dieÜbermittlung von Daten an den Server.

SicherheitDer Betrachter kann keine Rückschlüsse auf den erzeugenden Pro-grammcode oder auf die Quelldaten ziehen. Die Programme können alsovom Betrachter nicht kopiert und zu eigenen Zwecken weiterverwendetwerden.

1.4 Aufbau dieses Buchs

Alle Kapitel des Buchs haben den folgenden, lernfreundlichen Aufbau:

Grundlagen und Anwendung

� Schritt für Schritt werden den bis zum jeweiligen Zeitpunkt vorhan-denen Grundlagen und Kenntnissen neue Elemente hinzugefügt. Ich

17

Page 15: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Einführung1

beschreibe die Theorie und erläutere sie anhand von vollständigen,anschaulichen und ausführlich kommentierten Beispielen.

Übungen � Sie haben die Möglichkeit, Übungsaufgaben zum Thema zu lösen. Siesollen dabei das soeben erworbene Wissen umsetzen und habendamit eine unmittelbare Erfolgskontrolle. Sie können so selbst fest-stellen, ob Sie den betreffenden Abschnitt verstanden haben.

� Die Lösungen zu allen Übungsaufgaben finden Sie (zusammen mitdem Code aller Programmbeispiele) auf dem Datenträger zum Buch.Sollten Sie eine Übungsaufgabe nicht vollständig gelöst haben, sokann Ihnen die dortige Lösung als Hilfestellung dienen.

� Sofern Sie selbst eine lauffähige Lösung gefunden haben, können Siesie mit der vorgeschlagenen Lösung vergleichen. Beim Programmie-ren gilt der Grundsatz: Es gibt beliebig viele richtige Lösungen undnicht nur eine sogenannte Musterlösung. Allerdings soll mit dem Auf-bau der Beispiel- und Übungsprogramme auch ein übersichtlicherund lesbarer Programmierstil vermittelt werden, der ein strukturier-tes Erlernen und professionelles Programmieren ermöglicht.

1.5 Systemvoraussetzungen

Voraussetzungen PHP läuft unter zahlreichen Betriebssystemen, unter anderem unter Win-dows, Mac OS X und Linux. Sie benötigen für Ihre Arbeit mit PHP nebeneinem Browser zum Betrachten beziehungsweise Benutzen der Seiten diefolgende Minimalausstattung:

� einen PHP-fähigen Webserver (zum Beispiel Apache)

� PHP selbst

� das Datenbanksystem MySQL

Buch-Datenträger Die beiden Installationspakete XAMPP und EasyPHP für Windows bein-halten jeweils alle notwendigen Bestandteile sowie weitere nützlicheSoftware und sind bereits fertig vorkonfiguriert. Sie finden sie auf demDatenträger zum Buch. Die Installationen beschreibe ich in Anhang B.Die beschriebene Installation für Ubuntu Linux sorgt für die richtigeKonfiguration.

18

Page 16: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

8 Dateien und Verzeichnisse

Dateien lesenund schreiben

In vielen Fällen muss zur Speicherung kleinerer Datenmengen keineDatenbank angelegt werden. Für einen Seitenzugriffszähler beispiels-weise reicht es aus, eine einfache Textdatei zu verwenden. In diesemAbschnitt behandele ich die Funktionen zum Öffnen, Lesen, Schreibenund Schließen von Dateien. Darüber hinaus erläutere ich Funktionen, dieInformationen über Dateien und Verzeichnisse bereitstellen.

8.1 Dateitypen

Bei der Ein- und Ausgabe von Daten in Dateien sollten Sie sich bewusstsein, welcher Dateityp vorliegt und welche Zugriffsart Sie verwendenkönnen. Man unterscheidet zwischen folgenden Zugriffsarten:

Sequenziell� Sequenzieller Zugriff: Diese Möglichkeit wird bei einer Datei bevor-zugt, deren einzelne Zeilen unterschiedlich lang sind und jeweils miteinem Zeilenumbruch beendet werden. Ihren Inhalt können Sie miteinem einfachen Editor bearbeiten. Die Zeilen werden rein sequenzi-ell gelesen beziehungsweise geschrieben. Es ist nicht möglich, aufeine bestimmte Zeile direkt zuzugreifen, da Sie nicht wissen können,wie lang die Vorgängerzeilen sind.

Wahlfrei� Wahlfreier Zugriff: Diese Möglichkeit haben Sie bei einer Datei, diegrößtenteils gleich lange Datensätze beinhaltet. Es können Zeilenum-brüche existieren, müssen aber nicht. Die Länge und Struktur einesDatensatzes sollten bekannt sein oder innerhalb der Datei an einervereinbarten Stelle stehen. Sie können direkt gelesen beziehungsweiseverändert werden, da Sie den Ort jedes Datensatzes berechnen kön-nen.

Binär� Binärer Zugriff: Diese Zugriffsmöglichkeit haben Sie bei jeder Datei.Sie arbeiten mit reinen Byte-Folgen. Diese können mit Hilfe eines dar-auf angepassten Programms gelesen oder verändert werden. Aller-dings kann dies zur Folge haben, dass die Dateien nicht mehr mit denzugehörigen Anwendungsprogrammen gelesen werden können. Bei-spiel: Sie überschreiben in einer Oracle-Datenbank die Stelle, an der

307

Page 17: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

die Anzahl der Datensätze einer bestimmten Tabelle steht. Dies kanndazu führen, dass diese Tabelle oder sogar die ganze Datenbank zer-stört wird.

Es gibt Mischformen bei den genannten Typen. Ohne Kenntnis derStruktur einer Datei ist es nicht möglich, diese korrekt zu bearbeiten.

8.2 Lesen einer Zeile aus einer sequenziellen Datei

Es folgt ein einfaches Beispiel, in dem die erste Zeile einer sequenziellenDatei gelesen und auf dem Bildschirm ausgegeben wird.

Öffnen und lesen Die Datei lesen.txt wurde zuvor mit einem Texteditor erzeugt und imgleichen Verzeichnis wie die Datei lesen_zeile.php abgespeichert. Siebeinhaltet mehrere unterschiedlich lange Zeilen mit Text, wie Sie inAbbildung 8.1 sehen.

Abbildung 8.1 Datei, aus der eingelesen wird

Mit Hilfe des Programms wird die erste Zeile der Datei gelesen und wiein Abbildung 8.2 auf dem Bildschirm ausgegeben.

Abbildung 8.2 Lesen aus Datei

Es folgt der Programmcode:

<html><body><?php

if(!file_exists("lesen.txt"))

308

Page 18: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Lesen einer Zeile aus einer sequenziellen Datei 8.2

{echo "Datei konnte nicht gefunden werden";exit;

}

$fp = fopen("lesen.txt","r");if(!$fp){

echo "Datei konnte nicht geöffnet werden";exit;

}

$zeile = fgets($fp, 100);echo "Inhalt der ersten Zeile der

Datei lesen.txt:<br />$zeile";fclose($fp);

?></body></html>

Listing 8.1 Datei lesen_zeile.php

Innerhalb des PHP-Programms werden die Funktionen file_exists(),fopen(), fgets() und fclose() verwendet.

file_exists()Mit Hilfe der Funktion file_exists() wird zunächst festgestellt, ob dieangegebene Datei existiert. Ist dies nicht der Fall, muss das PHP-Pro-gramm mit Hilfe von exit beendet werden.

fopen()Die Funktion fopen() dient dem Öffnen einer Datei.

� Der erste Parameter gibt den Namen der Datei an. In unserem Beispielhandelt es sich um die Datei mit dem Namen lesen.txt, die im gleichenVerzeichnis wie das PHP-Programm steht.

read� Der zweite Parameter gibt den Öffnungsmodus an. Hier ist es r (fürread), das heißt, die Datei wird zum Lesen geöffnet. Andere Öff-nungsmodi sind zum Beispiel w (für write, Schreiben in eine Datei)und a (für append, Anhängen an eine Datei).

� Der Rückgabewert der Funktion ist ein sogenannter Dateizeiger. Erwird in der Variablen $fp gespeichert. Dieser Dateizeiger wird fürweitere Zugriffe auf die Datei benötigt. Sollte die Datei am angegebe-nen Ort nicht existieren, so gibt die Funktion fopen() den Wert falsezurück.

309

Page 19: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

Vor der weiteren Benutzung der Datei muss geprüft werden, ob derDateizeiger auf eine erfolgreich geöffnete Datei verweist. Hier geschiehtdies mit if ($fp). Existiert die Datei nicht, so muss das PHP-Programmabgebrochen werden.

fgets() Die Funktion fgets() dient dem Lesen einer Zeichenkette aus einerDatei.

� Der erste Parameter gibt an, aus welcher Datei gelesen werden soll.Dabei muss es sich um den Dateizeiger einer zuvor geöffneten Dateihandeln. Hier ist dies $fp.

� Der zweite Parameter gibt die Länge der einzulesenden Zeichenkettean. Es werden entweder (Länge – 1) Zeichen aus der Datei gelesen(hier 99) oder bis zum Zeilenumbruch oder bis zum Ende der Datei.Dies gilt je nachdem, was zuerst eintritt. Sie sollten zum Lesen ganzerZeilen eine Leselänge wählen, die auf jeden Fall für die betreffendeDatei ausreicht.

� Der Rückgabewert der Funktion ist die gelesene Zeichenkette (ein-schließlich des Zeilenumbruchs). Sie wird hier in der Variablen$zeile gespeichert. Diese Variable wird auf dem Bildschirm ausgege-ben.

fclose() Die Funktion fclose() dient dem Schließen einer Datei.

� Der Parameter gibt an, welche Datei geschlossen werden soll. Dabeimuss es sich um den Dateizeiger einer zuvor geöffneten Datei han-deln. Hier ist dies $fp.

Sie sollten geöffnete Dateien immer schließen, auch wenn nach Beendi-gung eines PHP-Programms alle beteiligten Dateien geschlossen werden.Andernfalls könnte das Betriebssystem weitere Zugriffe auf diese Dateiverwehren, da es diese Datei für noch geöffnet hält.

8.3 Lesen aller Zeilen einer sequenziellen Datei

Im folgenden Beispiel werden alle Zeilen einer sequenziellen Datei gele-sen und auf dem Bildschirm ausgegeben:

<html><body><?php

if(!file_exists("lesen.txt"))

310

Page 20: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Lesen aller Zeilen einer sequenziellen Datei 8.3

{echo "Datei konnte nicht gefunden werden";exit;

}

$fp = fopen("lesen.txt","r");if(!$fp){

echo "Datei konnte nicht geöffnet werden";exit;

}

while (!feof($fp)){

$zeile = fgets($fp, 100);echo "Zeile: $zeile<br />";

}fclose($fp);

?></body></html>

Listing 8.2 Datei lesen_alles.php

Die Ausgabe sehen Sie in Abbildung 8.3.

Abbildung 8.3 Alle Zeilen der Datei

feof()Die Funktion feof() dient dazu, das Ende einer Datei anzuzeigen.

� Der Parameter gibt an, welche Datei geprüft werden soll. Dabei musses sich um den Dateizeiger einer zuvor geöffneten Datei handeln. Hierist dies $fp.

� Der Rückgabewert der Funktion ist true, falls das Ende der Datei fest-gestellt wurde, andernfalls false, falls dies nicht der Fall ist.

311

Page 21: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

Im Programm wurde eine bedingungsgesteuerte Schleife verwendet.Diese wird wiederholt, solange das Ende der Datei noch nicht erreicht ist(while (!feof($fp)). Nach dem Lesen einer Zeile durch die Funktionfgets() wird der Dateizeiger $fp automatisch auf den Anfang der nächs-ten Zeile gesetzt.

Im vorliegenden Fall wurde vorausgesetzt, dass die Datei lesen.txt miteinem Texteditor in folgender Weise erzeugt wurde:

� Schreiben der ersten Zeile (¢)

� Schreiben der zweiten Zeile (¢)

� …

� Schreiben der vorletzten Zeile (¢)

� Schreiben der letzten Zeile (Abspeichern und Schließen der Datei)ohne (¢)

Wenn Sie nach der letzten Zeile noch einen oder mehrere Zeilenumbrü-che erzeugt und die Datei anschließend gespeichert und geschlossenhaben, werden beim Lesen diese unnötigen leeren Zeilen ebenfallserfasst und können zu Fehlausgaben führen (zum Beispiel einer falschenZeilenanzahl).

Übung »u_lesen«

Schreiben Sie mit Hilfe eines Texteditors mehrere Namen in eine Datei(u_lesen.txt). Jeder Name soll zweizeilig geschrieben werden: in der erstenZeile der Vorname, in der zweiten Zeile der Nachname, siehe Abbildung 8.4.

Abbildung 8.4 Daten für Übung »u_lesen«

Erstellen Sie ein PHP-Programm (Datei u_lesen.php), das diese Datei öffnet,liest und die Namen in einer HTML-Tabelle in der folgenden Form (zusätz-lich mit laufender Nummer) auf dem Bildschirm ausgibt, wie Sie in Abbil-dung 8.5 sehen.

312

Page 22: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Vereinfachtes Lesen einer Datei 8.4

8.4 Vereinfachtes Lesen einer Datei

Die Funktionen readfile() und file() liefern eine Möglichkeit zumvereinfachten Lesen einer Datei:

readfile()� readfile() liest den vollständigen Inhalt einer Datei und gibt ihn aufdem Bildschirm aus. Zeilenumbrüche werden im generierten HTML-Code als Zeilenumbrüche notiert. Dies führt im Browser dazu, dassein Leerzeichen abgebildet wird.

file()� file() liest den vollständigen Inhalt einer Datei zeilenweise in eineindimensionales Feld ein. Die Elemente dieses Feldes könnenanschließend bearbeitet beziehungsweise ausgegeben werden. Imvorliegenden Fall wurde nach jeder Zeile ein <br /> ausgegeben.

Beide Funktionen werden im folgenden Beispiel benutzt, um eine Dateivollständig wiederzugeben:

<html><body><?php

if(!file_exists("lesen.txt")){

echo "Datei konnte nicht gefunden werden";exit;

}

readfile("lesen.txt");

$dfeld = file("lesen.txt");echo "<p> </p>";for($i=0; $i<sizeof($dfeld); $i++)

Abbildung 8.5 Ergebnis der Übung »u_lesen«

313

Page 23: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

echo $dfeld[$i] . "<br />";?></body></html>

Listing 8.3 Datei lesen_einfach.php

8.5 Überschreiben einer sequenziellen Datei

Öffnen undSchreiben

Im folgenden Beispiel werden einige Zahlen und Zeichenketten in eineDatei geschrieben:

<html><body><?php

$fp = fopen("schreiben.txt","w");if (!$fp){

echo "Datei nicht zum Schreiben geöffnet";exit;

}

fputs ($fp, "Autor: Max Maier\n");for ($i=10; $i<=50; $i+=10)

fputs ($fp, "$i\n");fputs ($fp, "Autor: Max Maier", 8);

echo "Ausgabe in Datei geschrieben";fclose($fp);

?></body></html>

Listing 8.4 Datei schreiben.php

write Die Datei schreiben.txt wird mit der Funktion fopen(), im Öffnungsmo-dus w (für write), zum Schreiben geöffnet. Falls die Datei bereits exis-tiert, wird sie ohne Warnung überschrieben. Weitere Vorgänge solltenauch hier erst erfolgen, nachdem Sie kontrolliert haben, ob das Öffnenerfolgreich war.

fputs() Die Funktion fputs() dient der Ausgabe von Zeichenketten in eineDatei.

314

Page 24: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Anhängen an eine sequenzielle Datei 8.6

� Der erste Parameter gibt an, in welche Datei ausgegeben werden soll.Dabei muss es sich um den Dateizeiger einer zuvor geöffneten Dateihandeln. Hier ist dies $fp.

� Der zweite Parameter beinhaltet die auszugebende Zeichenkette. DieZeichenfolge \n dient der Erstellung eines Zeilenumbruchs.

� Der dritte Parameter ist optional, er begrenzt die Länge der Ausgabeauf die angegebene Anzahl. Hier wurde der dritte Parameter lediglichzu Demonstrationszwecken bei der letzten Ausgabe verwendet. DieseAusgabe wird nach dem achten Zeichen abgeschnitten.

Die Ausgabedatei hat nach Durchlauf des Programms den Inhalt, den Siein Abbildung 8.6 sehen.

Abbildung 8.6 Schreiben in Datei

8.6 Anhängen an eine sequenzielle Datei

Fortlaufendschreiben

Im folgenden Beispiel werden die Inhalte einiger Formularfelder fortlau-fend in eine Datei geschrieben. Zunächst die Datei mit dem Eingabe-formular:

<html><body><p>Bitte geben Sie Ihre Adresse ein:</p><form action = "anh_csv.php" method = "post">

<p><input size="20" name="nn" /> Nachname</p><p><input size="20" name="vn" /> Vorname</p><p><input size="20" name="sr" /><input size="10" name="hn" /> Straße und Hausnummer</p><p><input size="10" name="pz" /><input size="20" name="st" /> PLZ und Stadt</p><p><input type="submit" value="Senden" /><input type="reset" /></p>

315

Page 25: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

</form></body></html>

Listing 8.5 Datei anh_csv.htm

In Abbildung 8.7 sehen Sie das Formular mit einer Beispieleingabe.

Abbildung 8.7 Eingabeformular

Nach dem Absenden werden die Daten von dem folgenden PHP-Pro-gramm weiterverarbeitet:

<html><body><?php$fp = fopen("anh_csv.csv","a");if (!$fp){

echo "<p>Datei konnte nicht zumSchreiben geöffnet werden</p>";

exit;}

fputs ($fp, $_POST["nn"] . ";". $_POST["vn"] . ";". $_POST["sr"] . ";". $_POST["hn"] . ";". $_POST["pz"] . ";". $_POST["st"] . ";\n");

echo "<p>Vielen Dank, " . $_POST["vn"]

316

Page 26: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Anhängen an eine sequenzielle Datei 8.6

. " " . $_POST["nn"] . "<br />";echo "Ihre Angaben wurden gespeichert</p>";

fclose($fp);?><p>Zurück zur <a href="anh_csv.htm">Eingabe</a></p></body></html>

Listing 8.6 Datei anh_csv.php

Die Ausgabe nach obiger Beispieleingabe sehen Sie in Abbildung 8.8.

Abbildung 8.8 Ausgabe mit Bestätigung

appendDie Datei anh_csv.csv wird mit der Funktion fopen(), Öffnungsmodus a(für append), zum Schreiben am Ende der Datei geöffnet. Weitere Vor-gänge sollten auch hier erst erfolgen, nachdem kontrolliert wurde, obdas Öffnen erfolgreich war.

CSV-DateiDie Daten aus dem Formular werden, jeweils durch ein Semikolon von-einander getrennt, in die Ausgabedatei geschrieben. Am Ende der Zeilewird ein Zeilenvorschub mit \n erzeugt. Man erzeugt auf diese Weiseeine Datei im CSV-Format, siehe Abbildung 8.9.

Abbildung 8.9 CSV-Datei im Editor

Viele Anwendungsprogramme (wie zum Beispiel Microsoft Excel unterWindows oder Libre Office Calc unter Ubuntu) können das CSV-Formatlesen und in eine Tabelle umsetzen. Dabei werden die einzelnen Infor-mationen, die durch Semikola voneinander getrennt sind, jeweils in

317

Page 27: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

einer Tabellenspalte dargestellt, siehe Abbildung 8.10 für Windows. InLibre Office Calc unter Ubuntu Linux können Sie die Einstellungen desTextimport-Dialogfeldes, das beim Import angezeigt wird, einfach mit ok

bestätigen.

Abbildung 8.10 CSV-Datei in Excel

Im Ausgabeprogramm kann der Benutzer mit Hilfe eines Hyperlinks zumEingabeformular zurückgelangen und weitere Eingaben vornehmen.Jede weitere Eingabe wird an die vorhandene Datei angehängt.

Übung »u_schreiben«

In einer Datei (u_schreiben.txt) stehen mehrere Datensätze in der folgendenForm (siehe Abbildung 8.11):

� erste Zeile: laufende Nummer

� zweite Zeile: Nachname

� dritte Zeile: Vorname

Abbildung 8.11 Daten der Übung »u_schreiben«

318

Page 28: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Ein einfacher Zugriffszähler 8.7

8.7 Ein einfacher Zugriffszähler

Web CounterIm folgenden Beispiel wird ein Zähler realisiert, der die Anzahl derZugriffe auf eine Datei festhält. Ein solcher Web Counter wird im Inter-net oft eingesetzt, um die Beliebtheit beziehungsweise den Erfolg einerWebseite zu messen und anzuzeigen.

<html><body><?phpif(file_exists("schreiben_zaehler.txt")){

/* Kann Datei geöffnet werden? */$fp = fopen("schreiben_zaehler.txt","r");if($fp){

$zahl = fgets($fp,10);fclose($fp);

Schreiben Sie ein PHP-Programm (Datei u_schreiben.php), das diese Dateiöffnet, liest und die Datensätze in der gleichen Form in zwei verschiedeneDateien ausgibt:

� Datensätze mit einer laufenden Nummer kleiner als 1.000 in Dateiu_schreiben_a.txt

� alle anderen Datensätze in die Datei u_schreiben_b.txt

Die Dateien sollen bei jedem Programmaufruf überschrieben werden. Aufdem Bildschirm soll eine Kontrollausgabe wie in Abbildung 8.12 erscheinen(hier mit den oben angegebenen Beispieldaten).

Abbildung 8.12 Ergebnis der Übung »u_schreiben«

Hinweis

Die Funktion fgets() liest die Zeilen einschließlich des Zeilenumbruchs ineine Variable ein. Wird diese Variable in eine Datei ausgegeben, so wirdauch der Zeilenumbruch ausgeführt. Er braucht nicht zusätzlich ausgegebenzu werden.

319

Page 29: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

}else

$zahl = 0;}else

$zahl = 0;

/* Zahl erhöhen */$zahl = $zahl + 1;echo "Der Zugriffszähler steht auf $zahl";

/* neue Zahl schreiben */$fp = fopen("p626data.txt", "w");

if(!$fp){

echo "Der Zähler kann nicht geschrieben werden ";exit;

}

fputs($fp,$zahl);fclose($fp);?></body></html>

Listing 8.7 Datei schreiben_zaehler.php

Falls es sich um den ersten Zugriff auf die Datei handelt, existiert sie nochnicht (Funktion file_exists()), und der Zähler wird auf 0 gesetzt. Eswird versucht, die Datei zu öffnen. Falls dies gelingt, wird der aktuelleZählerstand aus der Datei in die Variable $zahl eingelesen. Falls diesnicht gelingt, wird der Zähler auf 0 gesetzt.

Anschließend hat die Variable in jedem Fall einen Wert. Dieser Wert wirdum 1 erhöht, ausgegeben und anschließend in die Datei geschrieben,sodass sie für den nächsten Zugriff den aktuellen Wert bereitstellt. DieAusgabe nach einigen weiteren Zugriffen sehen Sie in Abbildung 8.13.

Abbildung 8.13 Zugriffszähler

320

Page 30: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Wahlfreier Zugriff 8.8

8.8 Wahlfreier Zugriff

Datensätzefester Größe

Ein wahlfreier Zugriff auf eine Datei kann erfolgen, wenn in einer DateiDatensätze fester Größe stehen. Durch die feste Größe ist gewährleistet,dass die Position jedes einzelnen Datensatzes eindeutig berechnet wer-den kann.

Die Funktion fseek() versetzt den Dateizeiger einer zuvor geöffnetenDatei an die angegebene Position. Damit erreichen Sie schnell jedenDatensatz, ohne alle vorhergehenden Datensätze zu lesen. Beim wahl-freien Zugriff können außerdem noch die beiden folgenden Funktionennützlich sein:

� ftell()

Gibt die aktuelle Position an.

� rewind()

Setzt den Dateizeiger an den Anfang der Datei.

Als einfaches Beispiel soll eine Datei bearbeitet werden, die insgesamt 15Datensätze beinhaltet. Jeder Datensatz besteht aus einer ganzen Zahl.Jede Zahl wird formatiert in die Datei geschrieben, sodass sie stets diegleiche Breite hat. Zur Formatierung dient die Funktion sprintf().

Zunächst das Programm, das 15 zufällige Zahlen zwischen 1 und 30.000formatiert in eine Datei schreibt. Damit wird eine »Datenbank« mit 15Datensätzen erzeugt.

<html><body><?php

srand((double)microtime()*1000000);

$fp = fopen("beliebig.txt","w");if (!$fp){

echo "Datei kann nicht zum Schreiben geöffnet werden";exit;

}

for($i=1; $i<=15; $i++){

$zz = rand(1,30000);$zztext = sprintf("%6d",$zz);fputs($fp,$zztext);

321

Page 31: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

}fclose($fp);echo "15 Daten geschrieben";

?></body></html>

Listing 8.8 Datei schreiben_beliebig.php

Die Funktion sprintf() wandelt die Zahl $zz in die Zeichenkette$zztext um (Breite 6, mit führenden Leerzeichen). Die Variable $zz wirddabei als ganze Zahl interpretiert, ähnlich wie bei der Funktion printf()in der Programmiersprache C. Eine Zeichenkette der Länge 6 bean-sprucht 6 Byte Speicherplatz in einer Datei. Das Ergebnis sieht aus wie inAbbildung 8.14 (hier nur die Datensätze 1 bis 8).

Abbildung 8.14 Datei mit Datensätzen gleicher Länge

Zum Lesen in der Datenbank kann der Benutzer in einem Formular dieNummer des gewünschten Datensatzes eingeben, wie Sie in Abbildung8.15 sehen.

Abbildung 8.15 Eingabe der Datensatznummer

Der Code des Formulars:

<html><body><?phpif(!file_exists("beliebig.txt")){

322

Page 32: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Wahlfreier Zugriff 8.8

echo "Datei konnte nicht gefunden werden";exit;

}?><p>Wählen Sie die Nummer des gewünschten Datensatzes aus:</p><form action="lesen_beliebig_b.php" method="post">

<p><select name="nummer" /><?php

$anz = filesize("beliebig.txt") / 6;for($i=1; $i<=$anz; $i++){

echo "<option value='$i'>$i</option>";}

?></select></p><p><input type="submit" value="Absenden" /></p>

</form></body></html>

Listing 8.9 Datei lesen_beliebig_a.php

filesize()Das Formular wird dynamisch erstellt: Mit Hilfe der Funktion file-size() wird die Größe der Datei in Byte (hier 90 Byte) berechnet. Ausdiesem Wert und der Größe eines einzelnen Datensatzes (hier 6 Byte)wird die Anzahl der Datensätze (hier 90 Byte/6 Byte = 15) errechnet.

Es wird ein Select-Menü erstellt, das entsprechend viele Einträge hat.Somit kann der Benutzer keinen Fehler bei der Auswahl machen. DasPHP-Programm zur Auswertung der Eingabe:

<html><body><?php

$fp = fopen("beliebig.txt","r");if (!$fp){

echo "Datei konnte nicht zum Lesen geöffnet werden<p>";exit;

}

fseek($fp, ($_POST["nummer"]-1)*6, SEEK_SET);$wert = fgets($fp,7);fclose($fp);

323

Page 33: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

echo $_POST["nummer"] . ": $wert";?></body></html>

Listing 8.10 Datei lesen_beliebig_b.php

fseek() Die Funktion fseek() hat bis zu drei Parameter:

� Der erste Parameter gibt an, aus welcher Datei gelesen werden soll.Dabei muss es sich um den Dateizeiger einer zuvor geöffneten Dateihandeln. Hier ist dies $fp.

� Der zweite Parameter gibt den Offset an, das heißt die Position inByte. Diese wird über die eingegebene Nummer und die Größe einesDatensatzes berechnet.

� Der dritte Parameter gibt an, ab welcher Position der Offset gerechnetwird. Dabei können Sie die Konstanten SEEK_SET (Dateianfang),SEEK_CUR (aktuelle Position) und SEEK_END (Dateiende) benutzen.

Anschließend wird mit der Funktion fgets() an der neuen Position desDateizeigers gelesen. Es werden die nächsten (Länge der einzulesendenZeichenkette – 1) Zeichen gelesen, also 6. Damit ist gewährleistet, dassnur die unmittelbar folgende ganze Zahl gelesen wird. Die Ausgabe mitder oben ausgewählten Nummer sehen Sie in Abbildung 8.16.

Abbildung 8.16 Ausgabe des gewünschten Datensatzes

8.9 Informationen über Dateien

stat() Die Funktion stat() liefert eine Reihe von Informationen zu einer Dateiin Form eines Feldes. Im folgenden Beispiel werden die Feldelemente 7bis 10 ausgegeben. Diese liefern die in Abbildung 8.17 dargestelltenInformationen.

Timestamp Die drei Zeitpunkte werden als Unix-Timestamps geliefert. Sie müssennoch in eine lesbare Form gebracht werden.

324

Page 34: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Informationen über Dateien 8.9

Abbildung 8.17 Dateiinformationen

<html><body><?php

$fn = "beliebig.txt";$info = stat($fn);echo "Datei: $fn<br />";echo "Größe in Byte: $info[7]<br />";echo "Datum des letzten Zugriffs: "

. date("d.m.Y", $info[8]) . "<br />";echo "Zeitpunkt der letzten Modifizierung: "

. date("d.m.Y H:i:s", $info[9]) . "<br />";echo "Zeitpunkt der letzten Änderung: "

. date("d.m.Y H:i:s", $info[10]);?></body></html>

Listing 8.11 Datei datei_info.php

Im Feld $info wird der Rückgabewert der Funktion stat() gespeichert.Die drei Zeitangaben werden mit Hilfe der Funktion date() umgeformt.Genaue Informationen über die Formatierungsmöglichkeiten der Funk-tion date() und ähnlicher Funktionen finden Sie in Kapitel 10, »Datumund Zeit«.

Hinweis

Je nachdem, wie PHP bezüglich der Anzeige von Warnungen und Fehlerneingestellt ist (siehe auch Kapitel 6, »Fehler behandeln, Sicherheit erhö-hen«), erhalten Sie in der Ausgabe des Programms eine Meldung. Darin wirdempfohlen, vor der Benutzung der Funktion date() die richtige Zeitzoneeinzustellen.

325

Page 35: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

8.10 Informationen über ein einzelnes Verzeichnis

Verzeichnisöffnen und lesen

Bisher wurde immer eine einzelne Datei bearbeitet, deren Name bekanntist. Häufig stellt sich aber die Aufgabe, eine ganze Reihe von Dateien zubearbeiten, deren exakte Namen und deren Anzahl unbekannt sind. Zudiesem Zweck können Sie unter anderem die Verzeichnisfunktionenopendir(), readdir() und closedir() benutzen. Sie werden im folgen-den Programm eingesetzt, um Informationen über Dateien und Ver-zeichnisse zu generieren, die sich in einem bestimmten Verzeichnisbefinden. Zunächst das Programm:

<html><body><?php$verz = "C:\\EasyPHP\\www";chdir($verz);

echo "<h2>Verzeichnis $verz</h2>";echo "<table border='1'>";

/* Überschrift */echo "<td>Name</td>";echo "<td>Datei /<br />Verz.</td>";echo "<td>Readable /<br />Writeable</td>";echo "<td align='right'>Größe<br />in Byte</td>";echo "<td>Letzte<br />Modifizierung</td>";

/* Öffnet Handle */$handle = opendir($verz);

/* Liest alle Objektnamen */while ($dname = readdir($handle))

Öffnen Sie hierzu die Datei php.ini. Diese befindet sich bei einer XAMPP-Installation unter Windows im Verzeichnis C:\xampp\php. In EasyPHP unterWindows finden Sie sie im Verzeichnis C:\EasyPHP\conf_files und unterUbuntu Linux im Verzeichnis /etc/php5/apache2.

Suchen Sie in der Datei nach der Zeile mit date.timezone =. Dort sollte ste-hen: date.timezone = Europe/Paris oder date.timezone = Europe/Berlin,ohne ein Semikolon am Anfang der Zeile. Speichern Sie die Datei, und füh-ren Sie für den Apache Webserver einen Neustart durch, damit die Einstel-lung wirksam wird.

326

Page 36: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Informationen über ein einzelnes Verzeichnis 8.10

{echo "<tr>";echo "<td>$dname</td>";

/* Datei oder Verzeichnis ? */if(is_file($dname))

echo "<td>D</td>";else if(is_dir($dname))

echo "<td>V</td>";else

echo "<td>&nbsp;</td>";

/* Lesbar beziehungsweise schreibbar ? */echo "<td>";if(is_readable($dname)) echo "R";else echo "-";if(is_writeable($dname)) echo "W";else echo "-";echo "</td>";

/* Zugriffsdaten */$info = stat($dname);echo "<td align='right'>$info[7]</td>";echo "<td>" . date("d.m.y H:i", $info[9]) . "</td>";echo "</tr>";

}

/* Schließt Handle */closedir($handle);?>

</table></body></html>

Listing 8.12 Datei verzeichnis.php

Im vorliegenden Fall soll der Inhalt des Verzeichnisses C:\EasyPHP\wwwunter Windows ermittelt werden. Bei einer XAMPP-Installation unterWindows ändern Sie den Verzeichnisnamen am besten auf C:\xampp\htdocs ab. Unter Ubuntu wäre zum Beispiel /var/www geeignet. Inner-halb der Zeichenkette wird mit einem doppelten Backslash (\\) gearbei-tet, damit beispielsweise \x nicht als Präfix einer hexadezimalen Zahlinterpretiert wird.

327

Page 37: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

chdir() Das genannte Verzeichnis wird mit der Funktion chdir() zum aktuellenVerzeichnis gemacht. Es folgt die Ausgabe der Tabellenüberschrift.

opendir(),readdir()

Die Funktion opendir() dient dem Öffnen eines Zugriffs-Handles für dasaktuelle Verzeichnis. Über dieses Handle wird mit Hilfe der Funktionreaddir() jeweils ein Objektname aus dem Verzeichnis ermittelt. Dabeiwird unsortiert vorgegangen. Gleichzeitig wird durch readdir() ein Zei-ger weitergesetzt, sodass beim nächsten Aufruf der nächste Objektnamegeliefert wird usw. Dies kann so lange wiederholt werden, wie Objektna-men vorhanden sind.

Im vorliegenden Programm wird die Wiederholung mit einer while-Schleife realisiert. Alle Objekte eines Verzeichnisses werden ermittelt.Für jedes Objekt werden insgesamt fünf Funktionen zur Lieferung vonInformationen über das Objekt aufgerufen:

� Die Funktion is_file() sagt aus, ob es sich um eine Datei handelt.

� Die Funktion is_dir() sagt aus, ob es sich um ein Verzeichnis han-delt.

� Die Funktion is_readable() sagt aus, ob das Objekt lesbar ist.

� Die Funktion is_writeable() sagt aus, ob das Objekt beschreibbarist.

� Die Funktion stat() liefert eine Reihe weiterer Daten in Form einesFeldes.

closedir() Nach Abschluss der while-Schleife wird mit der Funktion closedir()das Zugriffs-Handle wieder geschlossen. Einen Ausschnitt der Ausgabedes Programms sehen Sie in Abbildung 8.18.

Abbildung 8.18 Infos über das Verzeichnis www (Ausschnitt)

328

Page 38: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Informationen über den Verzeichnisbaum 8.11

8.11 Informationen über den Verzeichnisbaum

Zur Ermittlung von Informationen über einen ganzen Verzeichnisbaum,also über die Unterverzeichnisse und deren Unterverzeichnisse usw.,bedienen Sie sich der Funktionen aus dem vorherigen Abschnitt undeines rekursiven Aufrufs.

getcwd()Diese Funktion wird vom Hauptprogramm aus erstmalig mit einem Start-verzeichnis aufgerufen. Dies ist im vorliegenden Beispiel bei einer Easy-PHP-Installation C:\EasyPHP\phpmyadmin. Bei einer XAMPP-Installationkönnten Sie zum Beispiel C:\xampp\phpmyadmin nehmen und unterUbuntu /var/www. Innerhalb der Funktion wird mit der Verzeichnis-funktion getcwd() das aktuelle Arbeitsverzeichnis (engl. current workingdirectory, abgekürzt: cwd) ermittelt.

Anschließend werden die Objekte innerhalb dieses Verzeichnisses ermit-telt. Dabei steht das Kürzel . (Punkt) für das aktuelle Verzeichnis und dasKürzel .. (zwei Punkte) für das übergeordnete Verzeichnis. Für diese bei-den Fälle erfolgt keine Aktion. Falls es sich bei dem Objekt um eine Dateihandelt, wird diese mit Namen ausgegeben.

RekursiveFunktion

Falls es sich bei dem Objekt um ein Unterverzeichnis handelt,

� wird in dieses Verzeichnis gewechselt,

� ruft sich die Funktion selbst auf (rekursiv) und

� wird wieder in das übergeordnete Verzeichnis zurückgewechselt.

Mit dieser Methode gelingt die Bearbeitung des gesamten Verzeichnis-baums:

<html><body><table border="1"><?phpfunction objektliste(){

/* Aktuelles Verzeichnis ermitteln */$verz = getcwd();

/* Handle für aktuelles Verzeichnis */$handle = opendir(".");

while ($dname = readdir($handle)){

if($dname!="." && $dname!="..")

329

Page 39: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Dateien und Verzeichnisse8

{/* Falls Unterverzeichnis */if(is_dir($dname)){

chdir($dname); // nach untenobjektliste(); // rekursivchdir(".."); // nach oben

}

/* Falls Datei */else{

echo "<tr><td>$verz</td><td>$dname</td></tr>";}

}}closedir($handle);

}

/* Startverzeichnis */chdir("C:\\EasyPHP\\phpmyadmin");/* Erster Aufruf der Funktion */objektliste();?></table></body></html>

Listing 8.13 Datei verzeichnisbaum.php

Die Ausgabe des Programms sehen Sie in Abbildung 8.19.

Abbildung 8.19 Infos über Verzeichnisbaum (Ausschnitt)

In der linken Spalte der Tabelle wird der Name des Verzeichnisses ausge-geben, in der rechten Spalte der Name des Objekts.

330

Page 40: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

12 Sessions und Cookies

Jeder Aufruf einer Internetseite über HTTP wird einzeln bearbeitet undist unabhängig von vorherigen Aufrufen. Falls ein Benutzer bei mehrerenAufrufen direkt nacheinander oder an verschiedenen Tagen auf den glei-chen Webserver zugreift, kann es nützlich sein, bestimmte individuelleDaten für ihn aufzubewahren beziehungsweise zu transportieren. Dazustehen in PHP Cookies und das Sessionmanagement zur Verfügung.Einige Beispiele:

� Sie melden sich per Login auf einer geschützten Website an und»bewegen« sich anschließend innerhalb dieser Website. In diesemFall können die Anmeldedaten transportiert werden, damit Sie sichnicht auf jeder Seite neu anmelden müssen.

� Sie tätigen Einkäufe auf verschiedenen Seiten eines Webshops. DieEinkäufe werden einzeln in einem Warenkorb abgelegt und dort auf-bewahrt, bis Sie zur Kasse gehen.

� Sie besuchen häufiger eine Website, auf der Sie Ihre individuelleUmgebung schaffen können oder häufig genutzte Daten schnell zurVerfügung gestellt bekommen möchten.

CookiesDiese Daten können in Cookies (das sind kleine Dateien) längere Zeit aufdem Rechner des Benutzers gespeichert werden. Je nach Einstellung desBrowsers wird dies allerdings eingeschränkt oder ganz verhindert. Daherkann diese Möglichkeit nicht immer eingesetzt werden.

$_SESSIONBeim Sessionmanagement können diese Daten im superglobalen Array$_SESSION abgelegt werden. Dessen Inhalt wird nur für die Dauer einerabgeschlossenen Internetsitzung auf dem Server gespeichert. Das Ses-sionmanagement von PHP kann trotz all seiner Möglichkeiten keinen100 %igen Schutz der Benutzerdaten vor unerlaubtem Zugriff garantie-ren. Überlegen Sie also, welche Daten Ihrer Programme innerhalb einerSession transportiert werden sollen und welche nicht. Empfehlen Sieden Benutzern Ihrer Programme, nach einem Logoff den Browser zuschließen.

393

Page 41: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

12.1 Sessionmanagement

Eine Session muss explizit begonnen werden. Sie endet später entwedermit dem Schließen des Browserfensters durch den Benutzer oder indemsie durch das Programm explizit geschlossen wird. Das Beenden einerSession führt zum Löschen des Session-Arrays.

session_start(),session_destroy()

Die Funktion session_start() muss auf jeder Seite, die zu einer Sessiongehört, aufgerufen werden. Diese Funktion beginnt entweder eine neueSession oder nimmt eine vorhandene Session wieder auf. Um eine Sessionexplizit zu beenden, wird die Funktion session_destroy() benötigt.

12.2 Beispiel für Sessions: Zugriffszähler

Zunächst ein einfaches Beispiel mit einem Zugriffszähler, dessen Wert imbereits erwähnten Session-Array gespeichert wird. Der erste Besuch aufder Seite liefert eine Ausgabe wie in Abbildung 12.1.

Abbildung 12.1 Erster Besuch der Seite

Nach einigen Aktualisierungen der Seite sieht sie aus wie in Abbildung 12.2.

Abbildung 12.2 Nach einigen Aktualisierungen

Sie erkennen, dass der Zähler hochzählt. Es wird also festgestellt, dassdieser Benutzer diese Seite mehrmals nacheinander besucht hat. WennSie den Browser schließen und wieder öffnen, erscheint eine Ausgabewie in Abbildung 12.3.

Session-ID Eine Session ist also unabhängig von der vorherigen Session. Es handeltsich wiederum um einen ersten Besuch. Die Eindeutigkeit der Session ist

394

Page 42: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Zugriffszähler 12.2

auch an der individuellen Session-ID erkennbar, die hier nur zu Kontroll-zwecken ausgegeben wurde.

Abbildung 12.3 Eine andere Session

Der Programmcode sieht wie folgt aus:

<?php/* Session-Start oder Session-Wiederaufnahme */session_start();

?><html><body><?php

/* Zugriffszähler existiert? */if (isset($_SESSION["zz"]))

$_SESSION["zz"] = $_SESSION["zz"] + 1;else

$_SESSION["zz"] = 1;

/* Ausgabe Zugriffszähler */echo "Ihr Besuch Nr.: " . $_SESSION["zz"] . "<br />";

/* Ausgabe Session-ID */echo "Ihre Session-ID: " . session_id();

?></body></html>

Listing 12.1 Datei sc_zaehler.php

Erläuterung:

� Zum Start einer neuen Session beziehungsweise zur Wiederauf-nahme einer vorhandenen Session wird ein Aufruf der Funktionsession_start() benötigt. Dieser Aufruf muss vor dem Beginn deseigentlichen HTML-Dokuments erfolgen.

isset()� Mit Hilfe der Funktion isset() wird festgestellt, ob das Element zzdes superglobalen Session-Arrays existiert.

395

Page 43: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

� Falls es existiert, handelt es sich um eine wieder aufgenommene Ses-sion. Der Wert des Elements zz wird um 1 erhöht.

� Falls es nicht existiert, handelt es sich um eine neue Session. Der Wertdes Elements zz wird auf 1 gesetzt.

� Der Wert des Zugriffszählers wird ausgegeben.

session_id() � Der Wert der eindeutigen Session-ID, die zur Verwaltung der Sessionauf dem Server benötigt wird, wird mit Hilfe der Funktionsession_id() ermittelt und anschließend (hier nur zur Kontrolle)ausgegeben.

12.3 Beispiel für Sessions: Geschützte Website

Das Folgende ist eine Anwendung für Sessions bei einer geschütztenWebsite, die aus drei Seiten besteht:

� einer Login-Seite zur Website, auf der der Benutzer den Namen unddas Passwort eingibt

� einer Intro-Seite, in der die Session gestartet wird

� einer beliebigen weiteren Seite innerhalb der Website

12.3.1 Ablauf

Zwischen der Intro-Seite und der beliebigen Seite kann der Benutzer sichnach erfolgreicher Anmeldung hin- und herbewegen. Von jeder dieserSeiten aus kann er sich zudem abmelden und gelangt wieder zur Login-Seite. Keine der Seiten kann direkt im Browser angewählt werden, da diezugehörigen Sessiondaten fehlen. Beide Seiten sind also erst nach einemLogin erreichbar. Beim Aufruf der Login-Seite erscheint eine Ausgabewie in Abbildung 12.4.

Abbildung 12.4 Hier kann sich der Benutzer anmelden.

396

Page 44: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Geschützte Website 12.3

Nach Eingabe eines falschen Namens und/oder Passworts sieht es auswie in Abbildung 12.5.

Abbildung 12.5 Die Anmeldung ist gescheitert.

Nach Betätigung des Hyperlinks gelangt der Benutzer wieder zur Login-Seite. Falls er dort den richtigen Namen (zum Beispiel Hans) und das rich-tige Passwort (in diesem Fall bingo) angibt, erscheint die Intro-Seite(siehe Abbildung 12.6).

Abbildung 12.6 Die Anmeldung war erfolgreich.

Der Benutzer wird mit Namen begrüßt und kann von hier aus weiter zueiner beliebigen Seite gehen oder sich wieder abmelden (zur Login-Seite). Nach Betätigen des ersten Hyperlinks erscheint die beliebige Seite,wie in Abbildung 12.7.

Abbildung 12.7 Beliebige weitere Seite der Website

397

Page 45: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

Ein direkter Aufruf der Intro-Seite oder der beliebigen Seite durch Ein-gabe der jeweiligen URL führt hingegen nicht zum Erfolg.

Anmeldung 12.3.2 Login-Seite

Zunächst der Code der Login-Seite:

<?php/* Vor Beenden der Session wieder aufnehmen */session_start();

/* Beenden der Session */session_destroy();$_SESSION = array();

?><html><body><h3>Login-Seite</h3><form action="sc_schutz_b.php" method="post"><p><input name="n" /> Name</p><p><input type="password" name="p" /> Passwort</p><p><input type="submit" value="Login" /></p>

</form></body></html>

Listing 12.2 Datei sc_schutz_a.php

Erläuterung:

� Zunächst fragen Sie sich sicher, warum auf der Login-Seite bereits einAufruf der Funktion session_start() steht.Zur Erinnerung: Der Benutzer gelangt zur Login-Seite auch durch einLogoff von der Website. In diesem Fall soll die Session explizit beendetwerden, also ist ein Aufruf von session_destroy() notwendig. Bevoraber eine Session beendet werden kann, muss sie wieder aufgenom-men werden – daher zunächst der Aufruf von session_start().

� Zur Erhöhung der Sicherheit wird das superglobale Array $_SESSIONmit einem leeren Array neu initialisiert. Damit werden alle Sessionda-ten explizit gelöscht.

� Es folgt ein Anmeldeformular. Von hier aus wird die Intro-Seite derWebsite aufgerufen (sc_schutz_b.php). Die Formularelemente habendie Namen n für den Benutzernamen und p für das Passwort.

398

Page 46: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Geschützte Website 12.3

12.3.3 Intro-Seite

Es folgt der Code für die Intro-Seite:

<?php/* Session starten oder wieder aufnehmen */session_start();

/* Falls Aufruf von Login-Seite */if(isset($_POST["n"])){

/* Falls Name und Passwort korrekt */if($_POST["n"] == "Hans" && $_POST["p"] == "bingo"|| $_POST["n"] == "Gerd" && $_POST["p"] == "tango")

{$_SESSION["n"] = $_POST["n"];

}}

/* Kontrolle, ob innerhalb der Session */include "sc_schutz.inc.php";

?>

<html><body><h3>Intro-Seite</h3><?php

/* Begrüßung des Benutzers */echo "<p>Hallo " . $_SESSION["n"] . "</p>";

?><p><a href="sc_schutz_c.php">Zur beliebigen Seite</a></p><p><a href="sc_schutz_a.php">Logoff</a></p></body></html>

Listing 12.3 Datei sc_schutz_b.php

Erläuterung:Als Erstes wird eine Session gestartet beziehungsweise wieder aufge-nommen. Anschließend wird festgestellt, woher der Aufruf dieser Seitestammt:

$_POST� Per Formular von der Login-Seite. In diesem Fall existiert die Variable$_POST["n"]. Falls Name und Passwort stimmen (hier entweder Hansund bingo oder Gerd und tango), wird der aus dem Formular über-mittelte Name in das Session-Array übernommen und steht währendder Session zur Verfügung.

399

Page 47: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

� Von einer beliebigen anderen Seite innerhalb oder außerhalb derWebsite beziehungsweise durch direkte Eingabe der URL. In diesemFall gibt es die Variable $_POST["n"] nicht; Name und Passwort wer-den daher nicht überprüft.

Im nächsten Schritt wird der Quellcode der Datei sc_schutz.inc.php ein-gebunden. Dieser wird von allen Seiten innerhalb der Website verwen-det. Der Code prüft, ob überhaupt ein Benutzer angemeldet ist.

<?php/* Kontrolle, ob innerhalb der Session */if (!isset($_SESSION["n"])){

echo "<p>Kein Zugang</p>";echo "<p><a href='sc_schutz_a.php'>Zum Login</a></p>";echo "</body></html>",exit;

}?>

Listing 12.4 Datei sc_schutz.inc.php

Erläuterung:

$_SESSION � Falls der Benutzer sich soeben angemeldet hat oder von einer anderenSeite innerhalb der Website kommt, existiert die Variable$_SESSION["n"]. Falls nicht, erscheinen nur der Text Kein Zugangund ein Hyperlink zur Login-Seite.

� Falls also der Benutzer von einer beliebigen Seite außerhalb der Web-site beziehungsweise durch direkte Eingabe der URL hierherkommt,wird ihm der Zugang verwehrt.

Nunmehr weiter im Code der Intro-Seite:

� Es wird der Titel ausgegeben. Der Benutzer wird mit Namen begrüßt.Der Name steht während der Session in der Variablen $_SESSION["n"]zur Verfügung. Zwei Hyperlinks führen nun zur beliebigen Seite bezie-hungsweise zum Ausloggen.

Hinweis

Name und Passwort sind hier zur Vereinfachung fest codiert. Natürlich wer-den diese in der Realität verschlüsselt in einer Datenbank abgelegt, und eserfolgt an dieser Stelle eine entsprechende Datenbankabfrage.

400

Page 48: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Webshop 12.4

Beliebige SeiteZu guter Letzt der Code der beliebigen Seite innerhalb der Website:

<?php/* Session wieder aufnehmen */session_start();

/* Kontrolle, ob innerhalb der Session */include "sc_schutz.inc.php";

?>

<html><body><h3>Beliebige Seite</h3><?php

/* Begrüßung des Benutzers */echo "<p>Hallo " . $_SESSION["n"] . "</p>";

?><p><a href="sc_schutz_b.php">Zur Intro-Seite</a></p><p><a href="sc_schutz_a.php">Logoff</a></p></body></html>

Listing 12.5 Datei sc_schutz_c.php

Erläuterung:

� Im Code fehlt nur der Block zur Prüfung der übermittelten Formular-daten. Das ist auf dieser Seite (innerhalb der Website) unnötig, da dienotwendigen Daten für den angemeldeten Benutzer bereits mit demSession-Array transportiert werden.

TestenSie können diese Anwendung testen, indem Sie mehrere Browserfensteröffnen, verschiedene Anmeldungen ausprobieren (mit Hans, mit Gerd,mit anderen Namen) und sich wieder abmelden. Sie werden entwederabgewiesen oder auf den Seiten innerhalb der Website mit dem richtigenNamen begrüßt. Bei einem direkten Aufruf der Intro-Seite beziehungs-weise der beliebigen Seite werden Sie abgewiesen.

12.4 Beispiel für Sessions: Webshop

Als drittes Beispiel soll ein Webshop dienen. Der Benutzer wählt diejeweils gewünschte Anzahl verschiedener Artikel aus insgesamt dreiAbteilungen aus und legt sie in den Warenkorb. Dabei werden dieseDaten in das Session-Array eingetragen. Zu einem beliebigen Zeitpunkt

401

Page 49: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

kann der Benutzer sich den Inhalt des Warenkorbs ansehen und zurKasse gehen. Der Warenkorb wird erst gelöscht, wenn der Browser wie-der geschlossen wurde.

12.4.1 Ablauf

Webshop Beim Aufruf der Startseite des Webshops hat der Benutzer die Möglich-keit, eine Abteilung zu wählen oder sich direkt den Warenkorb anzeigenzu lassen. Dies sehen Sie in Abbildung 12.8.

Abbildung 12.8 Startseite des Webshops

Abteilung Nach Auswahl einer Abteilung erscheint eine Tabelle mit den Artikelndieser Abteilung, wie in Abbildung 12.9.

Abbildung 12.9 Abteilung DVD/Video

402

Page 50: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Webshop 12.4

Der Benutzer kann die jeweils gewünschte Anzahl verschiedener Artikeleintragen und in den Warenkorb legen. Es erscheint der Warenkorb mitder bisher getroffenen Auswahl, siehe Abbildung 12.10.

Abbildung 12.10 Warenkorb

WarenkorbFalls der Benutzer weitere Artikel aus anderen Abteilungen auswählenmöchte, kann er diese mit einem »Umweg« über die Startseite erreichen.Falls er zu einer Abteilung wechselt, in der er bereits Artikel ausgewählthat, erscheint die betreffende Anzahl im Eingabefeld. Der Warenkorbfüllt sich, siehe Abbildung 12.11.

Abbildung 12.11 Warenkorb nach weiteren Einkäufen

403

Page 51: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

Kasse Abschließend geht der Benutzer zur Kasse (die in Abbildung 12.12 nurangedeutet wird).

Abbildung 12.12 Abschluss des Einkaufs

Sicherlich ist dieses Beispiel noch unkomfortabel und einfach gehalten.Es zeigt aber das Wesentliche: die Übernahme und Aufbewahrung ausge-wählter Daten im Session-Array.

12.4.2 Startseite

Zunächst der Code der Startseite:

<html><body><h3>Willkommen im Webshop</h3><p>Zur Abteilung:<br /><?php/* Arrays einbinden */include "sc_shop.inc.php";

/* Abteilungsnamen mit Hyperlinks ausgeben */for($i=0; $i<count($abtname); $i++)

echo "<a href='sc_shop_b.php?abtnr=$i'>$abtname[$i]</a><br />";

?></p><p><a href="sc_shop_c.php">Zum Warenkorb</a></p></body></html>

Listing 12.6 Datei sc_shop_a.php

404

Page 52: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Webshop 12.4

Erläuterung:

� Es wird (wie auch auf den anderen Seiten des Webshops) die Dateisc_shop.inc.php mit mehreren Arrays eingebunden. Diese Arraysbeinhalten den Gesamtkatalog des Webshops mit:

� den Namen der Abteilungen (eindimensionales Array $abtname)

� den Namen der Artikel (zweidimensionales Array $aname)

� den Nummern der Artikel (zweidimensionales Array $artnr)

� den Preisen der Artikel (zweidimensionales Array $preis)

sizeof()� Auf der Startseite werden nun die Namen der Abteilungen ausgege-ben. Falls später weitere Abteilungen oder Artikel hinzukommen,führt dies nicht zu einer Änderung des Codes, da mit der Funktionsizeof() automatisch die aktuelle Größe jedes Arrays ermittelt wird.

GET-Parameter� Jeder Name einer Abteilung ist gleichzeitig ein Hyperlink zur Tabelleder Artikel dieser Abteilung. Die ausgewählte Abteilungsnummerwird per GET-Parameter (sc_shop_b.php?abtnr=$i) übergeben.

12.4.3 Include-Datei

Die Include-Datei mit den verschiedenen Arrays:

<?php/* Namen der Abteilungen */$abtname[0] = "Unterhaltungselektronik";$abtname[1] = "DVD/Video";$abtname[2] = "Mobilfunk";

/* Namen der Artikel */$aname[0][0] = "Kopfhörerset";$aname[0][1] = "Funklautsprecher";$aname[0][2] = "Uhrenradio";$aname[0][3] = "Weltempfänger";

$aname[1][0] = "DVD-Recorder";$aname[1][1] = "DVD-Player";

Hinweis

Die Arrays sind hier zur Vereinfachung fest codiert. Natürlich werden diesein der Praxis in einer Datenbank abgelegt, und es erfolgen die entsprechen-den Datenbankabfragen. Der Inhalt der Include-Datei wird weiter untenangegeben.

405

Page 53: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

$aname[1][2] = "Fernbedienung";$aname[1][3] = "Portable DVD-Kombi";$aname[1][4] = "DVD-Videokombi";

$aname[2][0] = "PMR-Funkgerätepaar";$aname[2][1] = "Handscanner";$aname[2][2] = "Doppelstandlader";

/* Nummern der Artikel */$artnr[0][0] = "7609";$artnr[0][1] = "7612";$artnr[0][2] = "7632";$artnr[0][3] = "7678";

$artnr[1][0] = "4418";$artnr[1][1] = "4422";$artnr[1][2] = "4471";$artnr[1][3] = "4475";$artnr[1][4] = "4482";$artnr[2][0] = "6213";$artnr[2][1] = "6265";$artnr[2][2] = "6267";

/* Preise der Artikel */$preis[0][0] = 6.95;$preis[0][1] = 79.95;$preis[0][2] = 17.95;$preis[0][3] = 29.95;

$preis[1][0] = 249.00;$preis[1][1] = 49.95;$preis[1][2] = 19.95;$preis[1][3] = 279.00;$preis[1][4] = 189.00;

$preis[2][0] = 29.95;$preis[2][1] = 89.95;$preis[2][2] = 14.95;

?>

Listing 12.7 Datei sc_shop.inc.php

406

Page 54: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Webshop 12.4

12.4.4 Tabelle der Artikel

Nachfolgend der Code für die Tabelle der Artikel:

<?php/* Session starten oder wieder aufnehmen */session_start();

?><html><body><?php/* Falls diese Seite direkt angewählt wurde */if(!isset($_GET["abtnr"])){

echo "Keine Abteilung angegeben!";echo "<p><a href='sc_shop_a.php'>Zur Startseite</a></p>";echo "</body></html>";exit;

}

/* Abteilungsnummer übernehmen */$abtnr = $_GET["abtnr"];/* Arrays einbinden */include "sc_shop.inc.php";

/* Abteilungsname ausgeben */echo "<h3>$abtname[$abtnr]</h3>";

echo "<p>Wählen Sie aus:</p>";echo "<form action='sc_shop_c.php?abtnr=$abtnr'

method='post'>";?><table border="1"><tr>

<td><b>Artikel</b></td><td><b>Nr.</b></td><td><b>Preis</b></td><td><b>Anzahl</b></td>

</tr><?php/* Alle Artikel dieser Abteilung ausgeben */for($i=0; $i<sizeof($aname[$abtnr]); $i++){

echo "<tr>";echo "<td>" . $aname[$abtnr][$i] . "</td>";

407

Page 55: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

echo "<td>" . $artnr[$abtnr][$i] . "</td>";echo "<td align='right'>"

. number_format($preis[$abtnr][$i],2,",",".")

. " &euro;</td>";

/* Eingabefeld für Anzahl */echo "<td><input name='anzahl[$i]' size='5'";if(isset($_SESSION["anzahl"][$abtnr][$i]))

echo " value='". $_SESSION["anzahl"][$abtnr][$i] . "'";

echo " /></td>";echo "</tr>";

}?></table><p><input type="submit" value="In den Warenkorb" /></p></form>

<p><a href="sc_shop_a.php">Zur Startseite</a></p></body></html>

Listing 12.8 Datei sc_shop_b.php

Erläuterung:

� Zunächst wird mit session_start() eine Session gestartet (beim ers-ten Aufruf der Seite) oder wieder aufgenommen. Bei Wiederauf-nahme stehen alle Elemente des Session-Arrays (also die bisherigenEinkäufe) zur Verfügung.

� Falls der Benutzer diese Seite direkt anwählt, also über die Eingabeder Adresse, steht keine Abteilungsnummer zur Verfügung. Es wirdeine Fehlermeldung ausgegeben. Ein Hyperlink führt zur Startseite,und das Dokument wird beendet.

$_GET � Im »Normalfall« wird die Abteilungsnummer per GET-Parameterübergeben, und zwar mit Hilfe des superglobalen Arrays $_GET. Siewird hier zur Vereinfachung in der Variablen $abtnr abgespeichert.Die Arrays werden eingebunden, und der Abteilungsname wird aus-gegeben.

� Es folgt ein Formular, dessen Inhalt an den Warenkorb (Dateisc_shop_c.php) gesendet wird. Die Abteilungsnummer wird wie-derum per GET-Parameter übergeben (sc_shop_c.php?abtnr=$abtnr).

408

Page 56: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Webshop 12.4

number_format()� In der Tabelle werden für jeden Artikel dieser Abteilung der Artikel-name, die Artikelnummer und der Preis ausgegeben. Der Preis wirdmit Hilfe der Funktion number_format() formatiert (Darstellung mitTausenderpunkt, zwei Nachkommastellen, Komma als Dezimaltrenn-zeichen).

� Außerdem steht jeweils ein Eingabefeld für die gewünschte Anzahlzur Verfügung. Alle Eingabefelder haben den gleichen Namen undwerden durch eine laufende Nummer voneinander unterschieden.Ein Eingabefeld wird mit einem Wert gefüllt, falls der Benutzer in die-ser Abteilung bereits vorher eine Auswahl getroffen haben sollte. Indiesem Fall existiert das betreffende Element in $_SESSION

["anzahl"].

� Der Submit-Button führt zur Übermittlung der Daten in den Waren-korb.

12.4.5 Warenkorb

Der Programmcode für den Warenkorb:

<?php/* Session starten oder wieder aufnehmen */session_start();

?><html><body><h3>Warenkorb</h3><p>Sie haben bisher gewählt:</p>

<table border="1"><tr>

<td><b>Artikel</b></td><td><b>Nr.</b></td><td><b>Einzelpreis</b></td><td><b>Anzahl</b></td><td><b>Gesamtpreis</b></td>

</tr>

<?php/* Arrays einbinden */include "sc_shop.inc.php";

/* Falls neue Artikel in den Warenkorb kommen,werden sie in das Session-Array übernommen */

409

Page 57: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

if(isset($_GET["abtnr"])){

/* Abteilungsnummer übernehmen */$abtnr = $_GET["abtnr"];

for($i=0; $i<sizeof($aname[$abtnr]); $i++){

/* Falls dieser Artikel ausgewählt wurde */if(intval($_POST["anzahl"][$i]) > 0)

$_SESSION["anzahl"][$abtnr][$i]= intval($_POST["anzahl"][$i]);

}}

/* Ausgabe der Inhalte des Session-Arrays: *//* Gesamteinkaufspreis */$summe = 0;

/* Alle Abteilungen */for($a=0; $a<sizeof($abtname); $a++){

/* Alle Artikel einer Abteilung */for($i=0; $i<sizeof($aname[$a]); $i++){

/* Falls dieser Artikel im Session-Array vorhanden */if(isset($_SESSION["anzahl"][$a][$i])){

echo "<tr>";echo "<td>" . $aname[$a][$i] . "</td>";echo "<td>" . $artnr[$a][$i] . "</td>";echo "<td align='right'>"

. number_format($preis[$a][$i],2,",",".")

. " &euro;</td>";echo "<td align='right'>"

. $_SESSION["anzahl"][$a][$i] . "</td>";

/* Gesamtpreis für diesen Artikel berechnen */$gp = $preis[$a][$i] * $_SESSION["anzahl"][$a][$i];

/* Gesamtpreis aktualisieren und ausgeben */$summe += $gp;echo "<td align='right'>"

. number_format($gp,2,",",".")

. " &euro;</td>";echo "</tr>";

410

Page 58: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Sessions: Webshop 12.4

}}

}

/* Gesamteinkaufspreis in Session-Array speichern */$_SESSION["summe"] = $summe;

/* Gesamteinkaufspreis ausgeben */echo "<tr>";echo "<td colspan='4'>Gesamteinkaufspreis</td>";echo "<td align='right'>"

. number_format($summe,2,",",".") . " &euro;</td>";echo "</tr>";?></table><p><a href="sc_shop_d.php">Zur Kasse</a></p><p><a href="sc_shop_a.php">Zur Startseite</a></p></body></html>

Listing 12.9 Datei sc_shop_c.php

Erläuterung:

� Zunächst wird mit session_start() eine Session gestartet (beim ers-ten Aufruf der Seite) oder wieder aufgenommen. Bei Wiederauf-nahme stehen alle Elemente des Session-Arrays (also die bisherigenEinkäufe) zur Verfügung.

� Die Überschrift und der Beginn der Tabelle mit den Spaltenüber-schriften werden ausgegeben.

� Die Arrays werden eingebunden.

� Für den Fall, dass diese Seite über den Button In den Warenkorb auf-gerufen wurde, steht die Abteilungsnummer in einem GET-Parameterzur Verfügung. Sie wird hier zur Vereinfachung in der Variablen$abtnr abgespeichert.

� Es wird dann für alle Artikel der Abteilung, von der aus der Waren-korb aufgerufen wurde, überprüft, ob im zugehörigen Eingabefeldeine gültige ganze Zahl gestanden hat, die größer als 0 ist, mit anderenWorten, ob der betreffende Artikel ausgewählt wurde. Diese Zahlsteht im Array $_POST zur Verfügung. Da jedes Element im Formularden gleichen Namen (anzahl) und eine laufende Nummer hat, heißtdas betreffende Element $_POST["anzahl"][$i].

411

Page 59: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

� Wurde der betreffende Artikel ausgewählt, wird die Zahl in das Array$_SESSION übernommen. Dieses Array hat im vorliegenden Beispieldrei Dimensionen:

� Die erste Dimension bezeichnet das Element anzahl. Alle Men-genangaben sind hier gespeichert.

� Die zweite Dimension bezeichnet die Abteilung.

� Die dritte Dimension entspricht der laufenden Nummer innerhalbder Abteilung.

� Sie sehen, dass im Array $_SESSION nicht nur einzelne Variablen, son-dern ganze Felder gespeichert werden können. Die Regeln für mehr-dimensionale Felder finden, wie gewohnt, Anwendung.

� Für den Fall, dass diese Seite direkt über den Hyperlink Zum Waren-korb von der Startseite aufgerufen wurde, wird dem Array $_SESSIONkein Element hinzugefügt. Es erfolgt lediglich die Anzeige des Waren-korbinhalts.

� Dazu wird das gesamte Array $_SESSION für alle Abteilungen und alleArtikel durchlaufen. Es wird geprüft, ob das zugehörige Element exis-tiert (also der Artikel in den Warenkorb gelegt wurde). Ist dies derFall, so werden die Daten des Artikels ausgegeben. Gleichzeitig wirdaus dem Einzelpreis und der Anzahl der Gesamtpreis pro Artikelsowie der Gesamteinkaufspreis berechnet. Alle Preise werden (wieweiter oben bereits erläutert) formatiert ausgegeben.

� Der Gesamteinkaufspreis wird am Ende der Tabelle ausgegeben undzusätzlich im Array $_SESSION gespeichert.

� Der Kunde kann nun weitere Artikel auswählen oder zur Kasse gehen.

12.4.6 Kasse

Der Gang zur Kasse wird hier nur angedeutet, daher nur minimaler Pro-grammcode:

<?php/* Session starten oder wieder aufnehmen */session_start();

?><html><body><h3>Kasse</h3><?phpecho "<p>Bitte bezahlen Sie den Gesamteinkaufspreis von ";

412

Page 60: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Cookies 12.5

echo number_format($_SESSION["summe"],2,",","."). " &euro;.</p>";

?><p>........</p><p><a href="sc_shop_a.php">Zur Startseite</a></p></body></html>

Listing 12.10 Datei sc_shop_d.php

Erläuterung:

Zunächst wird mit session_start() die Session wieder aufgenommen.Anschließend wird der Benutzer aufgefordert, den Gesamteinkaufspreiszu bezahlen, der über das Session-Array hierher »transportiert« wurde.

12.5 Cookies

Falls Daten über einen längeren Zeitraum aufbewahrt werden sollen,zum Beispiel über mehrere Tage oder ein Jahr, können Sie Cookies ver-wenden. Dabei handelt es sich um kleine Dateien auf dem Rechner desBenutzers. Je nach Einstellung des Browsers werden Cookies allerdingsteilweise oder vollständig verhindert. Daher können Sie diese Möglich-keit nicht immer einsetzen.

setcookie()Zum Erzeugen von Cookies benötigen Sie die Funktion setcookie().Diese hat sechs Parameter:

� Name

� Wert

� Ablaufdatum

� Domain

� Pfad

� Sicherheitsstatus

Nur die ersten drei Parameter müssen Sie im Regelfall explizit setzen.Nach dem Ablaufdatum wird das Cookie automatisch gelöscht. JedeDomain soll natürlich nur ihre eigenen Cookies auf dem Rechner desBenutzers lesen können. Außerdem kann ein Server gleiche Cookiesbezüglich unterschiedlicher Anwendungen (die in unterschiedlichen Pfa-

413

Page 61: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

den installiert sein müssen) setzen. Domain und Pfad werden automa-tisch vom Server gesetzt, falls Sie sie beim Setzen weglassen.

Falls auf dem Rechner eines Benutzers Cookies gefunden werden, diezum Server und zum Pfad passen, stehen sie im superglobalen Array$_COOKIE zur Verfügung.

Abbildung 12.13 Cookie-Einstellung in Mozilla Firefox 7

Je nach Einstellung des Browsers des Benutzers werden Cookies automa-tisch gelöscht, unabhängig von den gewählten Werten. Falls Sie nichtmöchten, dass sie gelöscht werden, gehen Sie in Mozilla Firefox 7 imMenü Einstellungen zur Registerkarte Datenschutz. Dort wählen Sieaus Firefox wird eine Chronik nach benutzerdefinierten Einstellun-

gen anlegen. Anschließend entfernen Sie das Häkchen bei Immer den

privaten Modus verwenden. Im Bereich Cookies von Drittanbietern

akzeptieren wählen Sie Behalten, bis sie nicht mehr gültig sind aus,siehe Abbildung 12.13. Unter Ubuntu sind die Einstellmöglichkeiten füreinen normalen Benutzer eingeschränkt. In der Standardeinstellung wer-den Cookies gespeichert.

414

Page 62: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Cookies: Besuch 12.6

12.6 Beispiel für Cookies: Besuch

Zunächst ein einfaches Beispiel, in dem die Existenz eines Cookiesgeprüft wird. Beim ersten Besuch auf der Seite sehen Sie Abbildung12.14.

Abbildung 12.14 Erster Besuch

Bei weiteren Besuchen auf der Seite erscheint eine Ausgabe wie in Abbil-dung 12.15 (vorausgesetzt, der Browser akzeptiert Cookies und speichertdiese lange genug).

Abbildung 12.15 Weiterer Besuch

Dies gilt unabhängig davon, ob

� die Seite lediglich aktualisiert wurde,

� der Benutzer innerhalb der gleichen Session auf die gleiche Seitezurückkehrt,

� der Browser in der Zwischenzeit geschlossen wurde oder

� der Rechner des Benutzers in der Zwischenzeit ausgeschaltet war.

Die Information, ob der Benutzer diese Seite bereits besucht hat, bleibterhalten.

Cookies anzeigenAls Beispiel soll das Cookie im Browser Mozilla Firefox 7 gezeigt werden.Neben der in Abbildung 12.13 gewählten Einstellung Behalten, bis sie

415

Page 63: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

nicht mehr gültig sind gelangen Sie über den Button Cookies anzeigen

zur Liste der Cookies.

Abbildung 12.16 Anzeige der gespeicherten Cookies

Sie erkennen in Abbildung 12.16 den Namen Besuch, den Wert 1, dieDomain localhost, gegebenenfalls den Pfad unterhalb des Basisver-zeichnisses und das Ablaufdatum.

Zum Code dieser Seite:

<?php/* Falls Cookie vorhanden */if (isset($_COOKIE["Besuch"])) $neu = 0;else $neu = 1;setcookie("Besuch", "1", time() + 86400);

?>

Hinweis

Falls Sie die gleiche Seite mit einem anderen Browser besuchen, handelt essich wieder um einen ersten Besuch. Dies liegt daran, dass jeder Browserseine eigenen Cookies an anderer Stelle auf dem Rechner des Benutzersspeichert. Im Regelfall kann man aber davon ausgehen, dass durchgehendder gleiche Browser benutzt wird.

416

Page 64: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Cookies: Adressspeicherung 12.7

<html><body><h3>Cookies</h3><?php

/* Falls erster Besuch */if ($neu==1)

echo "<p>Sie waren noch nicht hier<br />oder Sie akzeptieren beziehungsweisespeichern keine Cookies.</p>";

elseecho "<p>Sie waren schon einmal hier.</p>";

?></body></html>

Listing 12.11 Datei sc_besuch.php

Erläuterung:

� Zunächst wird geprüft, ob im superglobalen Array $_COOKIE das Ele-ment Besuch existiert. Ist dies nicht der Fall, so handelt es sich um denersten Besuch. Der Benutzer ist also neu auf der Seite. Die Variable$neu erhält den Wert 1 oder 0, je nachdem, ob das Element Besuchexistiert.

setcookie()� Die Funktion setcookie() wird aufgerufen. Das Cookie erhält denNamen Besuch, den Wert 1 (hier nicht wichtig) und läuft in 24 Stun-den ab.

time()� Zur Zeitbestimmung wird hier die Funktion time() aufgerufen. Dieseliefert einen aktuellen Timestamp (in Sekunden). Zu diesem Wertwerden 24 Stunden (= 86.400 Sekunden) hinzugerechnet.

� Wie auch bei der Funktion session_start() muss der Aufruf vonsetcookie() vor dem Aufruf der eigentlichen Seite erfolgen.

� Im eigentlichen Dokument wird – abhängig vom Wert der Variablen$neu – ein Informationstext ausgegeben.

12.7 Beispiel für Cookies: Adressspeicherung

In diesem Beispiel soll eine Adresse, zum Beispiel die Lieferadresse oderdie Rechnungsadresse eines Benutzers bei einem Webshop, gespeichertwerden. Bei der nächsten Bestellung kann dem Benutzer somit Arbeiterspart werden.

417

Page 65: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

Beim ersten Besuch erscheint die Adressseite (in Abbildung 12.17 nurNachname und Vorname) mit einem leeren Formular, da der Benutzerdem Webshop noch unbekannt ist.

Abbildung 12.17 Neuer Kunde, Daten noch nicht gespeichert

Der Benutzer gibt seine Adressdaten ein, betätigt den Button Bestellen

und bekommt eine Bestätigung, siehe Abbildung 12.18. Gleichzeitigwerden seine Adressdaten in Cookies gespeichert.

Abbildung 12.18 Bestätigung der Adresse

Beim nächsten Besuch des Webshops erscheint die Adressseite miteinem bereits gefüllten Formular, siehe Abbildung 12.19.

Abbildung 12.19 Bekannter Kunde, Daten bereits gespeichert

418

Page 66: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Beispiel für Cookies: Adressspeicherung 12.7

Die Daten werden aus den gespeicherten Cookies ermittelt. Der Benutzerkann diese Daten direkt verwenden oder geänderte Daten eintragen.

Der Programmcode des Formulars sieht wie folgt aus:

<html><body><h3>Ihr Name</h3><form action="sc_adresse_b.php" method="post"><?php

echo "<p><input name='nname' size='20' value='";if(isset($_COOKIE["nname"]))

echo $_COOKIE["nname"];echo "' /> Nachname</p>";

echo "<p><input name='vname' size='20' value='";if(isset($_COOKIE["vname"]))

echo $_COOKIE["vname"];echo "' /> Vorname</p>";

?><p><input type="submit" value="Bestellen" /></p></form></body></html>

Listing 12.12 Datei sc_adresse_a.php

Erläuterung:

� Es wird ein Formular abgebildet, das die Bestätigung (Dateisc_adresse_b.php) anfordert.

� Es beinhaltet die beiden Eingabefelder nname und vname.

� Falls es bereits zugehörige Cookies gibt, werden die entsprechendenWerte eingetragen, ansonsten bleiben die Eingabefelder leer.

Der Programmcode der Bestätigung sieht wie folgt aus:

<?php$t = time() + 60 * 60 * 24 * 365;setcookie("nname", $_POST["nname"], $t);setcookie("vname", $_POST["vname"], $t);

?><html><body><h3>Bestätigung</h3><p>Ihre Ware wird versandt,

419

Page 67: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Sessions und Cookies12

<?phpecho $_POST["vname"] . " " . $_POST["nname"];

?></p></body></html>

Listing 12.13 Datei sc_adresse_b.php

Erläuterung:

� Es werden zwei Cookies gesetzt. Diese erhalten die Werte aus demgesendeten Formular.

� Bei jedem Absenden überschreibt also der aktuelle Formularinhalt dieCookies, falls diese bereits vorhanden sind.

� Als Ablaufdatum wird »heute in einem Jahr« (heutiges Datum+60×60×24×365 Sekunden) gesetzt.

� In der Bestätigung werden die gesendeten Formulardaten zur Kon-trolle noch einmal ausgegeben.

In Abbildung 12.20 wird die zugehörige Liste der Cookies angezeigt,davon das erste Cookie mit Werten.

Abbildung 12.20 Liste der Cookies, Cookie »vname«

420

Page 68: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

523

19 Automatisierter E-Mail-Versand

Automatisierte E-Mail

Bei vielen Websites besteht die Notwendigkeit, automatisierte E-Mails zuversenden. Diese dienen zum Beispiel als Bestellbestätigungen, Statusin-formationen oder zur Registrierung von Benutzern. In PHP wird zu die-sem Zweck die Funktion mail() angeboten. Damit können Sie bereitseinfache E-Mails versenden.

Falls Sie allerdings eine E-Mail im HTML-Format, eventuell auch mitAnhängen, versenden wollen, reicht die Funktion mail() nicht mehraus. Daher wird in diesem Kapitel mit der frei verfügbaren KlassePHPMailer gearbeitet. Die Version 5.2.0 dieser weit verbreiteten Klasseist auf dem Datenträger zum Buch bereits enthalten. Im nachfolgendenBeispiel wird davon ausgegangen, dass die Dateien des PHPMailer-Pro-jekts im untergeordneten Verzeichnis phpmailer stehen.

Am Ort der Ausführung des PHP-Skripts (zum Beispiel auf der eigenenWebsite im Internet) muss ein laufender E-Mail-Server zur Weiterleitungder E-Mail zur Verfügung stehen.

Zunächst das Beispiel:

<html><body><?phpinclude("phpmailer/class.phpmailer.php");

$mail = new PHPMailer();$mail->From = "[email protected]";$mail->FromName = "Arnold Absender";$mail->Subject = "Betreff der Mail";$mail->Body = "<table border='1'><tr><td>

Das ist <b>fett</b></td></tr></table>";$mail->AltBody = "Nur Text";

$mail->AddAddress("[email protected]");// $mail->AddCC("[email protected]");// $mail->AddBCC("[email protected]");$mail->AddReplyTo("[email protected]");

Page 69: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

524

Automatisierter E-Mail-Versand19

$mail->AddAttachment("im_work.gif");$mail->AddAttachment("im_blume.jpg");$mail->AddAttachment("mail_word.doc");$mail->AddAttachment("mail_excel.xls");$mail->AddAttachment("pdf_test.pdf");

if($mail->Send())echo "oK";

?></body></html>

Listing 19.1 HTML-Mail mit Anhängen

Es handelt sich um eine HTML-Mail. Im HTML-Code steht eine Tabellemit einer Zelle, darin ein Text, teilweise in Fettschrift. Es werden fünfDateien unterschiedlichen Typs als Anhang gesendet: ein GIF-Bild, einJPG-Bild, eine MS Word-Datei, eine MS Excel-Datei und ein PDF-Doku-ment.

Zunächst wird die Datei class.phpmailer.php aus dem untergeordnetenVerzeichnis phpmailer eingebunden. Damit steht die Klasse PHPMailerzur Verfügung. Mit new wird ein neues Objekt dieser Klasse erzeugt undein Verweis auf dieses Objekt zurückgeliefert.

In den Eigenschaften From und FromName werden die E-Mail-Adresse undder Name des Absenders notiert. In der Eigenschaft Subject steht derBetreff. Die Eigenschaft Body speichert den eigentlichen E-Mail-Text, hierin HTML-Form. Falls der E-Mail-Client des Empfängers keine HTML-Mails verarbeiten kann, so sieht er nur den Wert der Eigenschaft Alt-Body.

Die Methoden AddAddress(), AddCC() und AddBCC() dienen der Auf-nahme der Empfängeradressen für Original und Kopie der E-Mail.AddReplyTo() sorgt dafür, dass eine Antwort auf diese E-Mail nicht anden Absender, sondern an die hier angegebene Adresse gesendet wird.Die Methode AddAttachment() wird genutzt, um eine oder mehrereDateien als Anhang der E-Mail hinzuzufügen. Im Beispiel wird davonausgegangen, dass sich die Dateien im gleichen Verzeichnis wie diesesPHP-Programm befinden.

Page 70: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

525

Automatisierter E-Mail-Versand 19

Zu guter Letzt wird die E-Mail mit Hilfe der Methode Send() gesendet.Im Erfolgsfall wird eine Bestätigung ausgegeben. Das Ergebnis sehen Siein Abbildung 19.1 in MS Outlook 2010. Abbildung 19.2 zeigt die Dar-stellung, falls der Empfänger den Antworten-Button betätigt hat.

Abbildung 19.1 Ergebnis des Programms in MS Outlook 2010

Abbildung 19.2 Antwort an ReplyTo-Adresse

Page 71: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

-- (minus minus) 53- (minus) 25! (Ausrufezeichen) 45!= (ungleich, PHP) 38$ (Dollar) 73$(Selektor) 463$_COOKIE 414$_GET 33, 145, 288, 408$_POST 289, 399$_SESSION 393% (Modulo) 25, 385% (Platzhalter) 178& (Referenz) 82& (URL) 145, 288&& (logisches Und) 44' (Hochkomma) 27* (mal) 25+ (plus) 25++ (plus plus) 53. (Verkettung) 27.= (Anhängen an Zeichenketten) 27/ (durch) 25/* (mehrzeiliger Kommentar) 21// (einzeiliger Kommentar) 21:: (Operator) 248<> (ungleich, SQL) 177= (gleich) 177== (gleich) 38=> (Zuordnung) 68> (größer) 38, 177>= (größer gleich) 38, 177? (URL) 145, 288?> 19@ 288, 530[ ] 65\ 27\n 315__autoload() 265__clone() 244__construct() 234__destruct() 237__FILE__ 257__LINE__ 257__METHOD__ 257__toString() 262

{nb} 515|| 43127.0.0.1 367

A

Absatzumbruch 20absenden 31, 126abstract 255action 31Addition 25Ajax 445, 477Aktionsabfrage 193Aktionselement 126align 56and 177Angriff 287animate()

jQuery 471Animation 461, 471

Bewegung 472Dauer 473Geschwindigkeit 473gleichzeitige 474Größe 472relative Änderung 473Sinuskurve 475Transparenz 472Verzögerung 474

Anmeldung 396Anweisungsblock 39, 53Apache 20

Ubuntu 582append 309array() 65array_key_exists() 271array_pop() 339array_push() 339array_shift() 339array_unshift() 339arsort() 340as 69asc 178asort() 340asXML() 442

583

Page 72: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

Asynchronous JavaScript and XML 445, 477

aufhängen 53Ausnahmebehandlung 91Ausrichtung 56Auswahlelement 117Auswahlmenü 191

einfaches 120mehrfaches 124

auto_increment 365, 540autoload 266

B

base_convert() 390Basisklasse 229, 247Bedingung 37Benutzeroberfläche 204Bewegung 472bigint 365bind()

jQuery 470bindec() 389Blog 538body 570Bogenmaß 380border 574br 572break 49, 61

C

Cache 289Callback-Funktion 473call-by-reference 80call-by-value 80Cascading Style Sheets � CSScase 49catch 91ceil() 378Chat 527chdir() 328Checkbox 122checkdate() 357checked 118, 122chr() 301class 231click()

jQuery 463, 469

Clientprogramm 17Clientprogrammierung 461closedir() 326, 328Collection

jQuery 466cols 112confirm() 207connect.inc.php 222Container 570continue 62Cookies 393, 413

anzeigen 415Lebensdauer 288

copy() 153count() 153crc32() 305crypt() 305CSS 134, 204, 461

Formatvorlagen 143css()

jQuery 464CSS-Datei

externe 143CSS-Format 463CSS-Klasse 465, 466CSV-Datei 294CSV-Format 317

D

date() 325, 354, 359, 470date.timezone 326Datei

Angabe der Position 321binärer Zugriff 307Ende ermitteln 311Existenz 309externe 73formatierte Ausgabe 321Größe feststellen 323Informationen ermitteln 324, 326Lese-/Schreibposition festlegen 321lesen 308öffnen 309schließen 310schreiben 314sequenzieller Zugriff 307Text anhängen 315vereinfachtes Lesen 313

584

Page 73: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

Datei (Forts.)wahlfreier Zugriff 307, 321Zeichenkette lesen 310Zeichenkette schreiben 314zurückspulen 321

Dateityp 307Datenbank 167

Abfrage 176, 179Ajax 456auswählen 176erzeugen 170hochladen 220SQL kontrollieren 179

DatenbankabfrageAnzahl der Datensätze 176Datensatz speichern 176HTML-Tabelle ausgeben 182

Datenbankbrowser 212Datenbankserver 168

Verbindung aufnehmen 175, 221Verbindung trennen 177

Datenfeld 167Datensatz 167

ändern 196, 197auswählen 176, 177erzeugen 191identifizieren 171löschen 202

Datentyp 23Datum und Zeit 353

Datenbankspeicherung 365Differenz 360, 362, 363erzeugen 358, 360formatieren 354Gültigkeit prüfen 357Systemzeit ermitteln 353

dblclick()jQuery 469

decbin() 389dechex() 389decoct() 389default 49deg2rad() 380delay()

jQuery 474delete 204, 209deprecated 282desc 178Deserialisierung 263

Destruktor 236Dezimalsystem 389Dezimaltrennzeichen 24display_errors 284div-Element 461Division 25

ganzzahlige 25do while 60document 129, 463Dokumentenbetrachter 503Dollarzeichen 23doubleval() 35, 337Dualsystem 389Dump 223duration

jQuery 473

E

e 25E_ALL 283Easing-Funktion 473EasyPHP 18, 21, 169, 176, 283, 326, 421,

579echo 20e-Funktion 375Eigenschaft 229

statische 253Eingabe 30Eingabefeld

Passwort 114Eingabemaske 140Einsatzbereich 17Element

verstecktes 114, 145, 201, 210else 40E-Mail

automatisieren 523HTML-Mail 523mit Anhang 523

enctype 151endif 51Endliche Zahl 381Ereignis 458

jQuery 467Ergebniskennung 176Erlernbarkeit 16error_log 284error_reporting 92, 283

585

Page 74: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

Event Handler 128Event-Objekt

jQuery 470Exceptionhandling 91exit 164, 309explode() 153, 294Exponentialzahl 25extends 248extension_dir 482extension_loaded() 482

F

fadeIn()jQuery 475

fadeOut()jQuery 475

fadeTo()jQuery 475

fadeToggle()jQuery 475

false 38, 130Fatal Error 93fclose() 310Fehler 281Feiertag 103

berechnen 367Feld 63

assoziatives 33, 66ein- oder mehrdimensionales 64Elemente entfernen 339Elemente hinzufügen 339Extrema ermitteln 333Größe ermitteln 332numerisch indiziertes 64Operationen 331, 340Schlüssel 66Sortierung 331statistische Auswertung 334Wert 68zweidimensionales assoziatives 348zweidimensionales gemischtes 346zweidimensionales numerisches 343

Feld von Formularelementen 125, 136feof() 311fgets() 310file 151file() 313file_exists() 309

file_get_contents() 265file_put_contents() 264, 442filesize() 323FileZilla 580Firefox

Datenschutz 414floor() 105, 378fopen() 309for 51foreach 69, 438form 31, 572Formatierung 95, 134Formular 289, 571

auswerten 30, 109prüfen 127und Programm in einer Datei 140

Forum 546Forward-Slash 570fpdf 503

AddLink() 518AddPage() 505AliasNbPages() 515Cell() 507, 510, 520Footer() 514GetX() 521GetY() 521Header() 514Image() 516, 520Line() 522Link() 520Ln() 509, 512Output() 505Rect() 522SetDrawColor() 512SetFillColor() 512, 522SetFont() 506SetFontSize() 509SetLineWidth() 512, 521SetLink() 518SetTextColor() 509SetX() 522SetXY() 522SetY() 514Version 1.7 504Write() 509, 518

fputs() 314Frame 134fseek() 321, 324ftell() 321

586

Page 75: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

FTP 166func_get_arg() 86func_num_arg() 86function 71, 231function_exists() 95Funktion 70

Aufruf 72benutzerdefinierte 88Definition 71Existenz prüfen 95mathematische 375Parameter 72, 73, 75rekursive 70, 329Rückgabewert 78Übergabe von Parametern 80variable Parameterliste 86verlassen 80

G

Gauß, Carl Friedrich 104gd_info() 482GD-Bibliothek 481gedit 581Geldanlage 97get 33get_class_methods() 260get_declared_classes() 260getAttribute() 455getcwd() 329getElementById() 448getElementsByTagName() 455getimagesize() 545GET-Parameter 405getrandmax() 384gleich 38, 177Gleichheitszeichen

doppeltes 38global 85Grafik 481

Bild aus Datei laden 489Bildausschnitt 492Breite 490Ellipse 492erzeugen und anzeigen 486erzeugen und speichern 484Farbpalette 483gepunktete Linie 497Größe ändern 545

Grafik (Forts.)Größe feststellen 545Höhe 490interner Font 486leer erzeugen 545Linie 495Linienart 497Liniendicke 497mit Farbe füllen 484, 497Objekt erzeugen 483Pixel 495Polygon 494Rechteck 494speichern 483Text drehen 489Text erzeugen 487Zeichenelement 492

Gregorianischer Kalender 357Groß- und Kleinschreibung 23größer 38, 177größer gleich 177group 561Grundrechenarten 154Gültigkeitsbereich 381

H

Handle 241Hash-Tabelle 63head 570header() 448, 485, 505Hexadezimalsystem 389hexdec() 389hidden 114, 288hide()

jQuery 475Hintergrundfarbe 143Hochkommata 27, 68Hochladen von Daten 150Hochladen von Programmen 166hover()

jQuery 470Hover-Effekt 143href 575HTML 569html()

jQuery 463, 464HTML-Entities 290HTML-Mail 523

587

Page 76: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

htmlspecialchars() 290HTML-Tabelle 55HTTP 447Hyperlink 142, 575

Daten anhängen 148Hypertext Markup Language � HTML

I

ID 465, 466if 37, 38if/else 38, 39image/jpg 485imagearc() 493imagecolorallocate() 483imagecopy() 491imagecopyresampled() 545imagecreate() 483imagecreatefromjpeg() 490imagecreatetruecolor() 545imagedashedline() 497imagedestroy() 484imageellipse() 493imagefill() 484imagefilledarc() 493imagefilledellipse() 493imagefilledpolygon() 495imagefilledrectangle() 495imagefilltoborder() 498imagejpeg() 484imageline() 497imagepng() 484, 490imagepolygon() 495imagerectangle() 495imagesetpixel() 496imagesetstyle() 497imagesetthickness() 497imagestring() 487imagesx() 490imagesy() 490imagettftext() 488implode() 294inc.php 89include 73, 88include_once 73Index 65ini_get() 285, 482ini_set() 92, 286innerHTML 448

input 109, 572insert 193, 208, 366Installation 577instanceof 259Instanz 229integer primary key 422Internetseite

dynamische 16intval() 35, 357IP-Adresse 365is_dir() 328is_file() 328is_finite() 381is_infinite() 381is_nan() 381is_readable() 328is_writeable() 328isset() 94, 123, 141, 395

J

JavaScript 204, 461Ajax 445, 477Ereignis 458

jQuery 461animate() 471bind() 470click() 463, 469Collection 466css() 464dblclick() 469delay() 474duration 473Ereignis 467Event-Objekt 470fadeIn() 475fadeOut() 475fadeTo() 475fadeToggle() 475hide() 475hover() 470html() 463, 464load() 477mousedown() 469mouseenter() 469mouseleave() 469mousemove() 469mouseout() 469mouseover() 469

588

Page 77: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

jQuery (Forts.)mouseup() 470queue 474ready() 463Selektor 463, 464, 466show() 475slideDown() 474slideToggle() 474slideUp() 474text() 464toggle() 475Verkettung 467

jquery.js 461, 463

K

Kapselungsprinzip 232Key 66Klammer

eckige 65geschweifte 39, 53

Klasse 229abgeleitete 229, 247abstrakte 256

Klassendefinition 230, 231Klassenhierarchie 249Klassenkonstante 253Kleiner 38, 177Kleiner gleich 177Klonen 241Kommentar

einzeiliger 21mehrzeiliger 21

Konfigurationsparameter 92Konstante

mathematische 376Konstruktor 234

Vererbung 250Kontrollkästchen 122Konvertierung 34

explizite 35Kopfrechnen 160, 272, 371, 430krsort() 340ksort() 340

L

Ladezeitverringern 538

lcg_value() 384Lesbarkeit 21Libre Office 318like 178load()

jQuery 477log_errors 284Logarithmus 375Login 396Logisches Oder 43Logisches Und 44Log-Tabelle 365Lotto 386

M

mail() 523Markierung 570Math-Objekt

JavaScript 476max() 379Maximum 379maxlength 110md5() 290, 305method 31Methode 229, 231

abstrakte 257statische 253

Microsoft Excel 317Microsoft Vista 579microtime() 353, 384min() 379Minimum 379mktime() 282, 358, 364, 417Modularisierung 70, 84Modulo-Operator 25, 385mousedown()

jQuery 469mouseenter()

jQuery 469mouseleave()

jQuery 469mousemove()

jQuery 469mouseout()

jQuery 469mouseover()

jQuery 469

589

Page 78: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

mouseup()jQuery 470

mt_getrandmax() 384mt_rand() 384mt_srand() 384multiple 124Multiplikation 25MySQL 168

Passwort ändern 583Ubuntu 583

mysql_affected_rows() 193mysql_connect() 175, 221mysql_fetch_assoc() 176mysql_num_rows() 176mysql_query() 176mysql_real_escape_string() 290mysql_select_db() 176

N

Nachkommastelle 24name 110, 112, 120, 152Namensregel 23, 72, 170new 233new FPDF 505nodeValue 455not 177Notice 92number_format() 95Nummer automatisch erhöhen 540Nummerierung

automatische 366Nutzung von PHP

Anzahl 15Gründe 16

O

Objekt 229als Rückgabewert 251erzeugen 233Kopie 241laden 263Lebensdauer 234speichern 263

octdec() 389Oder

logisches 43Oktalsystem 389

onreadystatechange 447onSubmit 128opacity 472open() 447opendir() 326Open-Source-Datenbank 168Operator

arithmetischer 25logischer 43, 177Rangordnung 26, 46Rechen- 25Vergleichs- 38, 177, 178

option 121Optionsschaltfeld 117

Gruppe 118or 177ord() 301order by 178Ostersonntag 103, 369

P

p 572Parameter

optionaler 238parent 249parent::__construct() 250password 114Passwort 290, 397

Datenbankserver 176Speicherung 290verschlüsseln 290

PDFAusgabe 505Bild skalieren 516erzeugen 504externer Hyperlink 520Fließtext 508Font 507Füllfarbe 512Hyperlink 516Hyperlink erzeugen 518Hyperlink in einem Bild 520Hyperlink in einem Bildbereich 520Hyperlink in einer Zelle 520Hyperlink, Zielpunkt 518Imagemap 516Kopf- und Fußzeile 512Linie 520

590

Page 79: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

PDF (Forts.)Liniendicke 512, 521Linienfarbe 512Rechteck 520Schreibposition 514, 521Schreibposition nach der Zelle 507Schriftart 506Schriftfarbe 509Schriftgröße 507, 509Schriftschnitt 507, 509Seite erzeugen 505Seitenanzahl 515Seitenumbruch 515Standardfont 506Tabelle 510unterstreichen 518Zeilenhöhe 509Zeilenumbruch 508, 509, 512Zelle 507Zellenausrichtung 507Zellenfüllung 507Zellengröße 507Zellenrand 507

PDF-Reader 503PHP

Konfiguration 326Ubuntu 582

PHP Hypertext Preprocessor 16php.ini 283, 289, 326, 482php_gd2.dll 482phpinfo() 579PHPMailer 523phpMyAdmin 168

Internetnutzung 220Ubuntu 583

Pizzabestellung 156Platzhalter 178Plausibilität 289post 31Potenzrechnung 375Preis 17Primärschlüssel 171private 231Programm beenden 164Programmierstil 19Programmierung

objektorientierte 229Programmpaket 288protected 232

Provider 166Proxy 289public 232

Q

queuejQuery 474

R

rad2deg() 380radio 117Radiobutton 117, 188Rahmen 574rand() 58, 384read 309readdir() 326readfile() 313readonly 110, 112ready()

jQuery 463readystate 447Referenz 80, 82, 106register globals 289Rekursiv 70, 329REMOTE_ADDR 365require 73require_once 73reset 32, 572responseText 448responseXML 454return 79

JavaScript 130rewind() 321round() 378rows 112rsort() 332

S

Schleife 51Abbruch 61bedingungsgesteuerte 58, 60endlose 53geschachtelte 54

Schriftart 143Schriftgröße 143SEEK_CUR 324

591

Page 80: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

SEEK_END 324SEEK_SET 324Seitenquelltext 211select 121, 124, 176selected 121Selektor

jQuery 463, 464, 466self 255send() 447Separator 294serial 365Serialisierung 263, 272serialize() 264Serverprogramm 17Session 288

Gültigkeit beenden 289session_cache_limiter() 289session_destroy() 394session_id() 396session_regenerate_id() 289session_set_cookie_params() 288session_start() 394Session-ID 395

regenerieren 289Sessionmanagement 393setcookie() 413setRequestHeader() 450show columns 217show databases 216show tables 216show()

jQuery 475shuffle() 386Sicherheit 287Silence Operator 288silence operator 530similar_text() 299SimpleXML 433simplexml_load_file() 435simplexml_load_string() 441sin()

JavaScript 476Sinuskurve 475size 110, 152, 572sizeof() 332slideDown()

jQuery 474slideToggle()

jQuery 474

slideUp()jQuery 474

sort() 332SORT_NUMERIC 332SORT_REGULAR 332SORT_STRING 332Spiel 60sprintf() 321SQL 168SQL-Code

schädlicher 290SQLite3 421

close() 424exec() 423query() 423

SQLITE3_ASSOC 425SQLite3Result 425

fetchArray() 425srand() 58, 384, 389ß (scharfes S) 23Startwert 52stat() 324status 447Stellenwertsystem 389str_replace() 291str_rot13() 305strcasecmp() 299strcmp() 299strftime() 354Strict Standards 282String-Funktionen 291stristr() 296strlen() 291strpos() 298strrchr() 296strrev() 291strrpos() 298strstr() 296strtolower() 291strtotime() 360strtoupper() 291strtr() 291submit 31, 126, 572submit() 132substr() 296Subtraktion 25Suchformular 183switch/case 48Systemvoraussetzungen 18

592

Page 81: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

Systemzeitermitteln 353

T

Tabelle 167, 573erzeugen 170exportieren 223Filterung 563mehrspaltige 573Sortierung 562Struktur 167

Tabellenzeile 573Tabellenzelle 573table 573target 134Tausendertrennzeichen 96td 573text()

jQuery 464textarea 112Texteingabefeld

einzeiliges 30, 109mehrzeiliges 112

Textelement 109Textfarbe 143this 231throw 91time() 353, 364Timestamp 324, 354, 365timestamp 540title 570toggle()

jQuery 475tr 573Transparenz 472true 38, 130TrueType-Fonts 487try 91TTF-Datei 488type 153, 572

U

Überladen 239Ubuntu 18, 21, 169, 176, 283, 318, 326,

421, 481, 503, 581ucfirst() 291ucwords() 291

Umlaut 23darstellen 569

Undlogisches 44

Unendlich 381Ungleich 38, 177unserialize() 265unset() 289Unterstrich 23update 197, 209Upload 150URI

wechseln 505URL

Daten anhängen 145, 288

V

Value 68value 110, 120, 124, 127var 232Variable 23

Existenz 123, 141, 193Existenz prüfen 94globale 84Gültigkeit 289Gültigkeitsbereich 84initialisieren 289lokale 84superglobale 84unerlaubter Zugriff 289

Vererbung 246Vergleichsoperator 38Verkettung 27

jQuery 467Verknüpfung 43Verschlüsselung 303, 305Verzeichnis

aktuellen Namen ermitteln 329Informationen ermitteln 326lesen 328öffnen 328schließen 328wechseln 328

Verzeichnisschutz 220Verzweigung 38

mehrfache 46, 48mit HTML 50verschachtelte 46

593

Page 82: Einstieg in PHP 5.4 und MySQL 5 · 5 Inhalt 1Einführung..... 15 1.1 Zu diesem Buch ..... 15 1.2 PHP – eine Beschreibung ..... 16

Index

W

Warenkorb 401Warning 93Webcounter 319Webserver

Hauptverzeichnis 22Webshop 401while 58Wiederholung 51Wildcard 178Winkelfunktionen 380write 309Würfel 58Wurzel 375www-data 582

X

XAMPP 18, 20, 169, 175, 283, 326, 421, 577Control Panel 578

XML 433Ajax 445, 477senden 452

XML-Dateihierarchische Struktur 434

XMLHttpRequest 445, 447XML-Zeichenkette 441

Z

Zahl 24formatierte Ausgabe 95Ganzzahlkonvertierung 377Nachkommastellen 97Prüffunktionen 381

Zahlenbereich 381Zeichencodierung 301Zeichenkette 27

drehen 291Länge 291Teile ersetzen 291Teile extrahieren 296umwandeln 291Umwandlung 34vergleichen 299Zeichen suchen 298zusammenfügen 294

Zeichenkettenfunktionen 291Zeilenumbruch 211, 315

nicht erlaubter 29Zeitangabe

formatieren 325Zeitstempel 540Zeitzone

einstellen 325Zufallszahlengenerator 58, 383Zugriffszähler 319, 394Zurücksetzen 32, 127

594