Einstieg in PHP 7 und MySQL – Ideal für ... · Dieses Buch erscheint mittlerweile in der...

44
Leseprobe PHP ist die Sprache des Web und für die Entwicklung dynamischer Webanwendungen nicht mehr wegzudenken. Thomas Theis erklärt Ihnen alle Grundlagen und führt Sie Schritt für Schritt an die Pro- grammierung heran. Dieser Buchauszug bietet Ihnen einen Schnell- programmierkurs und zeigt, wie Sie Textdateien mit PHP lesen und schreiben. Thomas Theis Einstieg in PHP 7 und MySQL – Ideal für Programmiereinsteiger 604 Seiten, broschiert, mit CD, 12. Auflage 2017 24,90 Euro, ISBN 978-3-8362-4496-1 www.rheinwerk-verlag.de/4352 »Über dieses Buch, PHP und MySQL« »Der PHP-Programmierkurs« »Dateien und Verzeichnisse« Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Wissen, wie’s geht.

Transcript of Einstieg in PHP 7 und MySQL – Ideal für ... · Dieses Buch erscheint mittlerweile in der...

LeseprobePHP ist die Sprache des Web und für die Entwicklung dynamischer Webanwendungen nicht mehr wegzudenken. Thomas Theis erklärt Ihnen alle Grundlagen und führt Sie Schritt für Schritt an die Pro-grammierung heran. Dieser Buchauszug bietet Ihnen einen Schnell-programmierkurs und zeigt, wie Sie Textdateien mit PHP lesen und schreiben.

Thomas Theis

Einstieg in PHP 7 und MySQL – Ideal für Programmiereinsteiger604 Seiten, broschiert, mit CD, 12. Auflage 2017 24,90 Euro, ISBN 978-3-8362-4496-1

www.rheinwerk-verlag.de/4352

»Über dieses Buch, PHP und MySQL« »Der PHP-Programmierkurs« »Dateien und Verzeichnisse«

Inhaltsverzeichnis

Index

Der Autor

Leseprobe weiterempfehlen

Wissen, wie’s geht.

17

Einführung

In dieser Einführung erfahren Sie, warum PHP eine gute Wahl ist. Ich stelle

Ihnen die Vorzüge von PHP vor und beschreibe den Aufbau des Buchs. Da-

mit der Einstieg leichtfällt.

Zu diesem Buch

PHP ist eine weitverbreitete Sprache zur Entwicklung dynamischer Inter-

netanwendungen, deren Nutzung seit ihrer ersten Einführung stetig an-

steigt. PHP wird auf Millionen Websites weltweit eingesetzt.

BestsellerDieses Buch erscheint mittlerweile in der zwölften Auflage, aktuell zu PHP

7.1. Es ist eine leicht verständliche Einführung in die wichtigsten Einsatz-

gebiete von PHP. Zahlreiche Kommentare und E-Mails zu diesem Bestseller

haben gezeigt, dass es als Lehrbuch sehr gut angenommen wird. Viele Leser

fühlen sich erfolgreich an die Hand genommen und in die PHP-Welt einge-

führt. Das Buch wurde von Auflage zu Auflage ständig überarbeitet und er-

weitert.

MySQL, MariaDBBesondere Beachtung findet in diesem Buch die Zusammenarbeit zwi-

schen PHP und dem Datenbanksystem MySQL. Es werden sowohl MySQL

in der Version 5.7 als auch seine Abspaltung MariaDB in der Version 10.1

verwendet. Für die Beispiele dieses Buchs ist es unerheblich, ob Sie MySQL

oder MariaDB nutzen. Falls ich mich im weiteren Verlauf dieses Buchs auf

MySQL beziehe, so gilt die jeweilige Aussage auch für MariaDB.

Die Software auf dem beiliegenden Datenträger können Sie sehr einfach

installieren. Mit ihrer Hilfe können Sie schnell eigene PHP-Programme ent-

wickeln und testen. PHP ist in vielen kostengünstigen Angeboten von

Website-Providern enthalten, sodass Sie die erworbenen Kenntnisse dort

erfolgreich einsetzen können.

PHP lernenZum Erlernen von PHP anhand des vorliegenden Buchs werden von Ihnen,

dem künftigen PHP-Programmierer, lediglich Grundkenntnisse auf An-

wenderebene des Betriebssystems Ihres Rechners verlangt, also von Micro-

soft Windows, Ubuntu Linux oder macOS auf dem Mac. Sie sollten mit Da-

teien und Verzeichnissen sowie mit einem Browser arbeiten können.

4496.book Seite 17 Montag, 6. März 2017 10:12 10

Einführung

18

Machen Sie sich nun mit dieser erfolgreichen und einfachen Sprache ver-

traut!

Für die Hilfe bei der Erstellung dieses Buchs bedanke ich mich bei Anne

Scheibe sowie dem ganzen Team des Rheinwerk Verlags.

PHP – eine Beschreibung

Dynamische

Internetseiten

PHP ist die Abkürzung für PHP Hypertext Preprocessor. PHP ermöglicht

Entwicklern die Erzeugung dynamischer Internetseiten, mit denen soge-

nannte Web Applications erstellt werden, wie z. B. E-Commerce-Systeme,

Chats oder Foren. Im Unterschied zu statischen Internetseiten kann sich

der Inhalt aufgrund von Aktionen des Benutzers oder neuer Basisinforma-

tionen, 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öglicht

die Zusammenarbeit mit vielen verschiedenen Datenbanksystemen. Die

weitaus meisten PHP-Entwickler setzen das Datenbanksystem MySQL ein.

Ein besonderer Schwerpunkt dieses Buchs ist daher der Zusammenarbeit

von PHP und MySQL gewidmet.

PHP – Vorzüge

Gründe für die

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 wurde zur Entwicklung von Internetanwendungen erschaffen.

� Es ermöglicht die einfache Entwicklung von Programmen.

� Es unterstützt verschiedene Plattformen.

� Es arbeitet sehr gut mit dem verbreiteten Apache Webserver zusammen,

auch innerhalb der vorgefertigten Installationspakete, die in diesem

Buch beschrieben und genutzt werden.

� 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. Dies liegt

hauptsächlich daran, dass PHP im Gegensatz zu anderen Sprachen aus-

4496.book Seite 18 Montag, 6. März 2017 10:12 10

Einführung

19

schließlich für die Webserverprogrammierung entwickelt wurde und nur

die dafür notwendigen Bestandteile enthält.

Einsatzbereich

Auf vielen Systemen

einsetzbar

PHP wird von vielen Typen von Webservern einheitlich unterstützt. Ande-

re 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 u. a. auf dem ebenfalls frei verfügbaren und

weitverbreiteten Apache Webserver unter verschiedenen Betriebssyste-

men 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. Beim

Betrachter wird also lediglich die Ausgabe der Programme dargestellt.

Der Browser des Betrachters muss nur in der Lage sein, den vom Server

gesendeten HTML-Code umzusetzen. Er muss keine besonderen Eigen-

schaften besitzen, die mit der Programmiersprache des Webservers zu-

sammenhängen. Die Seiten können daher auch von älteren Browsern

dargestellt werden.

Dateien und

Datenbanken

Darüber hinaus haben Serverprogramme im Unterschied zu Clientpro-

grammen (z. B. in der Programmiersprache JavaScript) Zugriff auf Textda-

teien und Datenbanken, die auf dem Server liegen. Dies ermöglicht erst die

Durchführung häufig vorkommender Vorgänge, wie z. B. die Suche nach

bestimmten Daten oder die Übermittlung von Daten an den Server.

SicherheitDer Betrachter kann nur wenige Rückschlüsse auf den erzeugenden Pro-

grammcode oder auf die Quelldaten ziehen. Die Programme können also

vom Betrachter nicht einfach kopiert und zu eigenen Zwecken weiterver-

wendet werden.

Aufbau dieses Buchs

Alle Kapitel des Buchs haben den folgenden lernfreundlichen Aufbau:

4496.book Seite 19 Montag, 6. März 2017 10:12 10

Einführung

20

Grundlagen und

Anwendung

� Schritt für Schritt werden den bis zum jeweiligen Zeitpunkt vorhande-

nen Grundlagen und Kenntnissen neue Elemente hinzugefügt. Ich be-

schreibe die Theorie und erläutere sie anhand von vollständigen, an-

schaulichen und ausführlich kommentierten Beispielen.

Übungen � Sie haben die Möglichkeit, Übungsaufgaben zum jeweiligen Thema zu

lösen. Sie sollen dabei das soeben erworbene Wissen umsetzen und ha-

ben damit 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 mit dem

Code aller Programmbeispiele) auf dem Datenträger zum Buch. Sollten

Sie eine Übungsaufgabe nicht vollständig gelöst haben, kann Ihnen die

dortige Lösung als Hilfestellung dienen.

� Sofern Sie selbst eine lauffähige Lösung gefunden haben, können Sie sie

mit der vorgeschlagenen Lösung vergleichen. Beim Programmieren gilt

der Grundsatz: Es gibt beliebig viele richtige Lösungen und nicht nur

eine sogenannte Musterlösung. Allerdings soll mit dem Aufbau der Bei-

spiel- und Übungsprogramme auch ein übersichtlicher und lesbarer

Programmierstil vermittelt werden, der ein strukturiertes Erlernen und

professionelles Programmieren ermöglicht.

Systemvoraussetzungen

Voraussetzungen PHP läuft unter zahlreichen Betriebssystemen, u. a. unter Windows, macOS

und Ubuntu Linux. Sie benötigen für Ihre Arbeit mit PHP neben einem

Browser zum Betrachten bzw. Benutzen der Seiten die folgende Mini-

malausstattung:

� einen PHP-fähigen Webserver (z. B. Apache)

� PHP selbst

� das Datenbanksystem MySQL

Buch-Datenträger Für die Programmentwicklung unter Windows können Sie eines der bei-

den leicht installierbaren Pakete EasyPHP oder XAMPP nutzen. Sie beinhal-

ten jeweils alle notwendigen Bestandteile sowie weitere nützliche Software

und sind bereits fertig vorkonfiguriert. Sie finden sie auf dem Datenträger

zum Buch. Die Installationen beschreibe ich in Anhang B. Dort wird auch

die Installation von XAMPP für Ubuntu Linux und XAMPP für macOS be-

schrieben, die Sie ebenfalls auf dem Datenträger zum Buch finden.

4496.book Seite 20 Montag, 6. März 2017 10:12 10

21

1Kapitel 1

PHP-Programmierkurs

In diesem Kapitel lernen Sie, erfolgreich Programme in PHP zu schreiben.

Sie lernen insbesondere Variablen und Felder, Operatoren, Kontrollstruk-

turen und Funktionen kennen. Die Auswertung von Formularen und eini-

ge umfangreichere Beispiele runden das Kapitel ab.

Hinweise

ProgrammierstilDieses Buch soll Ihnen nicht nur die Kenntnisse der Sprache PHP vermit-

teln, sondern auch einen übersichtlichen und strukturierten Programmier-

stil. Das vereinfacht sowohl die Arbeit eines einzelnen Entwicklers als auch

die Zusammenarbeit eines Entwicklerteams und die spätere Wartung der

Programme.

Typischer

Einsatzzweck

Für viele denkbare Anwendungsfälle biete ich jeweils nur eine Lösung an

und erläutere den typischen Einsatzzweck, ohne Sie dabei durch eine allzu

große Anzahl von Möglichkeiten zu verwirren.

1.1 Einbettung von PHP in HTML

Sie sollten die folgende Methode verwenden, um PHP-Programme in

HTML-Dateien einzubetten:

<?php[PHP-Anweisung][PHP-Anweisung][PHP-Anweisung]

?><?php ... ?>

Die Markierung <?php leitet eine einzelne PHP-Anweisung oder einen Block

von PHP-Anweisungen ein. Diese werden bis zur Markierung ?> bearbeitet,

die das Ende des Blocks darstellt. PHP-Blöcke können im gesamten Doku-

4496.book Seite 21 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

22

ment untergebracht werden. Der Code wird von oben nach unten abge-

arbeitet; es kann dabei mehrmals zwischen HTML und PHP gewechselt

werden.

Es gibt noch weitere mögliche Markierungen, um PHP-Code in HTML ein-

zubetten, diese sind jedoch nicht zu empfehlen. Seit PHP 7.0 führen einige

dieser Möglichkeiten außerdem zu einem Fehler.

HTML-Kurs Zur Auffrischung bzw. Vertiefung Ihrer HTML-Kenntnisse soll an dieser

Stelle auf die folgenden beiden Möglichkeiten verwiesen werden:

� auf den Schnellkurs »HTML für PHP« in Anhang A dieses Buchs, in dem

die wichtigsten HTML-Themen, die zur PHP-Programmierung notwen-

dig sind, erläutert werden.

� auf einen ausführlichen HTML-Kurs auf dem Datenträger zum Buch

(Bonuskapitel »HTML ausführlich«).

Das folgende, vollständige Beispiel verdeutlicht die Einbettung von PHP-

Code in HTML:

<!DOCTYPE html><html><head>

<meta charset="utf-8"><title>Titelzeile der Datei</title>

</head><body>Die 1. Zeile in HTML<br><?php echo "Die 2. Zeile in PHP<br>"; ?>Die 3. Zeile in HTML<br><?php

echo "Die 4. Zeile in PHP<br>";echo "Die 5. Zeile in PHP";

?></body></html>

Listing 1.1 Datei einbettung.php

echo Die PHP-Anweisung echo gibt den angegebenen Text auf dem Bildschirm

aus. Der Text muss in doppelten Anführungszeichen oder einfachen Hoch-

kommata geschrieben werden. Falls der Text HTML-Markierungen be-

inhaltet (hier <br> für einen Zeilenumbruch), werden diese ausgeführt. Die

Ausgabe des Programms im Browser sehen Sie in Abbildung 1.1.

4496.book Seite 22 Montag, 6. März 2017 10:12 10

1.1 Einbettung von PHP in HTML

23

1

Abbildung 1.1 Einbettung von PHP in HTML

Um das Beispiel nachzuvollziehen, gehen Sie wie folgt vor:

� Starten Sie den Apache Webserver, wie es in den Installationen von Easy-

PHP oder XAMPP in Anhang B beschrieben wird.

� Geben Sie den angegebenen Code in einem Editor ein und speichern Sie

ihn in der Datei einbettung.php im Hauptverzeichnis des Webservers.

Das jeweils passende Verzeichnis auf der Festplatte Ihres Rechners wird

ebenfalls in Anhang B genannt.

� Geben Sie http://localhost/einbettung.php in der Adresszeile Ihres Brow-

sers ein. Viele Browser blenden die Teilzeichenfolge http:// anschlie-

ßend aus. Lassen Sie sich nicht davon irritieren, sie gehört zur vollstän-

digen Adresse.

Sollten Sie in Ihrem Browser nicht die gleiche Ausgabe wie in Abbildung 1.1

sehen, kontrollieren und korrigieren Sie gegebenenfalls die eingegebene

Adresse. Falls diese stimmt, ist PHP möglicherweise nicht korrekt instal-

liert. Schlagen Sie in dem Fall noch einmal in Anhang B nach.

EinrückungEs wird häufig mit Einrückungen gearbeitet. Damit wird die Struktur eines

Dokuments sowohl im HTML-Code als auch im PHP-Code für den Entwick-

ler besser erkennbar.

CodierungIn den Dokumenten dieses Buches wird die Codierung UTF-8 verwendet.

Es ist wichtig, dass die Codierung, die im head-Container angegeben ist,

mit der Codierung der Datei übereinstimmt. Sie können die Codierung

einer Datei im Editor Notepad++ wie folgt auf UTF-8 umstellen, falls dies

noch nicht der Fall ist: Menüpunkt Kodierung • Konvertiere zu UTF-8.

Anschließend ist in diesem Menü auch die Codierung UTF-8 markiert.

Sie können die Codierung im Editor Notepad++ wie folgt auch automatisch

für alle Dateien wählen, die Sie neu erstellen: Menüpunkt Einstellungen •

Optionen • Neue Dateien • Kodierung • UTF-8. Betätigen Sie als Letztes

die Schaltfläche Schließen.

4496.book Seite 23 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

24

UTF-8 UTF-8 steht abkürzend für das 8-Bit UCS Transformation Format. UCS steht

abkürzend für Universal Character Set. UTF-8 ist die am weitesten verbreite-

te Codierung für Unicode-Zeichen. Sie enthält auch viele Sonderzeichen,

z. B. die deutschen Umlaute und das scharfe ß.

1.2 Kommentare

Kommentare Mithilfe von Kommentaren wird ein Programm lesbarer. Kommentare

werden nicht ausgeführt, sondern dienen nur der Information des Ent-

wicklers, insbesondere bei umfangreichen Programmen. Sollte es sich um

eine Gruppe von Entwicklern handeln oder sollte das Programm später

von anderen Entwicklern weiterbearbeitet werden, ist es besonders not-

wendig, Kommentare zu schreiben.

Hinweis

Erfahrungsgemäß gibt es immer wieder Entwickler, die ihre Programme

nur minimal kommentieren. Dies stellt sich nach kurzer Zeit als Nachteil

für sie selbst und ihre Kollegen heraus.

Man unterscheidet zwischen einzeiligen und mehrzeiligen Kommentaren.

// � Ein einzeiliger Kommentar beginnt mit den Zeichen // und endet am

Schluss der Zeile. Er wird im Allgemeinen zur Kommentierung einzelner

Begriffe verwendet.

/* … */ � Ein mehrzeiliger Kommentar beginnt mit den Zeichen /* und endet mit

den Zeichen */. Er wird üblicherweise zur Erläuterung eines Programm-

blocks verwendet.

Ein Beispiel hierzu:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

echo "Das ist der Anfang"; // Kommentar// bis zum Zeilenende

/* Ein Kommentar inmehreren Zeilen */

echo " und hier das Ende des Programms.";?></body></html>

Listing 1.2 Datei kommentar.php

4496.book Seite 24 Montag, 6. März 2017 10:12 10

1.3 Variablen, Datentypen und Operatoren

25

1Die Ausgabe des Programms im Browser sehen Sie in Abbildung 1.2. In die-

sem und den meisten nachfolgenden Beispielen werden der erste Teil und

der letzte Teil der HTML-Markierungen aus Platzgründen jeweils innerhalb

einer Zeile notiert.

Abbildung 1.2 Programm (ohne sichtbare Kommentare)

Übung »u_ausgabe«

Schreiben Sie ein PHP-Programm innerhalb einer Webseite (Datei u_aus-

gabe.php) mit Kommentarzeilen. Speichern Sie die Datei im Hauptver-

zeichnis Ihres Webservers und testen Sie das Programm, indem Sie einen

Browser aufrufen und die Adresse http://localhost/u_ausgabe.php einge-

ben. Die Ausgabe des Programms im Browser sollte aussehen wie in Abbil-

dung 1.3.

Abbildung 1.3 Ergebnis der Übung »u_ausgabe«

1.3 Variablen, Datentypen und Operatoren

VariablenInnerhalb eines Programms können Informationen zur späteren Verwen-

dung in Variablen gespeichert werden. Diese Variablen unterscheiden sich

in ihren Datentypen. PHP unterstützt Datentypen für:

� ganze Zahlen

� Zahlen mit Nachkommastellen (auch genannt: Fließkommazahlen)

� Zeichenketten (Strings)

� Felder (ein- und mehrdimensionale Felder von Variablen)

� Objekte

4496.book Seite 25 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

26

Datentypen Der Datentyp für eine Variable wird nicht vom Programmierer festgelegt,

sondern richtet sich nach dem Zusammenhang, in dem die Variable verwen-

det wird. Eine Variable kann ihren Datentyp innerhalb eines Programms

wechseln. Im Unterschied zu vielen anderen Programmiersprachen findet

in PHP keine Variablendeklaration statt. Dies bedeutet, dass eine Variable

bei ihrem ersten Erscheinen sofort benutzt werden kann und dem Pro-

gramm vorher nicht bekannt gemacht werden muss.

Typhinweise Seit PHP 7.0 gibt es die Möglichkeit, die Datentypen der benutzten Varia-

blen beim Aufruf von Funktionen genauer zu prüfen. Dabei wird mit soge-

nannten Typhinweisen gearbeitet. Ihre Nutzung dient der Verbesserung

der Lesbarkeit, des Ablaufs und der Pflege von PHP-Programmen. Mehr

dazu finden Sie in Abschnitt 1.11.1.

Zunächst geht es um die einfachen Datentypen (Zahlen und Zeichenketten),

mit denen viele Aufgaben bereits bei der Programmierung erledigt werden

können. Später kommen Felder und Objekte hinzu.

1.3.1 Namen

Variablennamen Für den Namen einer Variablen gelten folgende Regeln:

$ (Dollarzeichen) � Er muss mit einem Dollarzeichen beginnen.

� Er darf keine Leerzeichen enthalten.

� Er darf nur aus Buchstaben und Ziffern bestehen, wobei das erste Zei-

chen ein Buchstabe sein muss. Es sind Groß- und Kleinbuchstaben er-

laubt, zwischen denen jedoch unterschieden wird ($HokusPokus ist nicht

das Gleiche wie $hokuspokus).

� Er darf keine deutschen Umlaute und kein ß (scharfes S) enthalten.

� Er darf als einziges Sonderzeichen den _ (Unterstrich) enthalten.

� Er darf nicht mit einem reservierten Wort, z. B. mit einem Befehl aus der

Sprache PHP, identisch sein.

Sie sollten selbsterklärende Namen vergeben. Dies hat den Vorteil, dass

sich jeder, der sich später mit dem Programm befasst, sofort zurechtfindet.

Einige Beispiele sind: $Startmeldung, $Temperaturwert, $XKoordinate, $Ywert.

Ähnliche Regeln Diese Regeln gelten in ähnlicher Form für die Namen von Konstanten (sie-

he Abschnitt 1.3.5), Funktionen (siehe Abschnitt 1.8) sowie Klassen und

Methoden (siehe Kapitel 4). Eine wichtige Ausnahme: Nur die Namen von

Variablen beginnen mit einem Dollarzeichen.

4496.book Seite 26 Montag, 6. März 2017 10:12 10

1.3 Variablen, Datentypen und Operatoren

27

11.3.2 Variablen für Zahlen

Betrachten Sie einmal das folgende Programm, in dem der Preis für eine

Tankfüllung Benzin berechnet wird:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$liter = 14;$preis = 1.35;$zahlung = $liter * $preis;echo $zahlung;

?></body></html>

Listing 1.3 Datei zahl_var.php

Die Aufgabe dieses Programms ist die Multiplikation zweier Zahlen und die

Ausgabe des Ergebnisses. Dies wird wie folgt durchgeführt:

Zahlenvariable� Die Variable $liter wird eingeführt. Ihr wird der Wert 14 zugewiesen,

wodurch $liter zu einer Variablen für eine ganze Zahl wird.

� Die Variable $preis wird eingeführt. Ihr wird der Wert 1.35 zugewiesen,

also wird $preis zu einer Variablen für eine Zahl mit Nachkommastellen

(dabei muss der Punkt als Dezimaltrennzeichen verwendet werden).

� Die Variable $zahlung wird eingeführt. Die Variablen $liter und $preis

werden miteinander multipliziert; das Ergebnis wird der Variablen $zah-

lung zugewiesen. Damit wird $zahlung ebenfalls zu einer Variablen für

eine Zahl mit Nachkommastellen.

� Der Wert von $zahlung (also 18.9) wird mit der Anweisung echo ausgege-

ben. Mit echo lassen sich nicht nur Texte, sondern auch Variablen sowie

HTML-Code ausgeben. Dies wird in Abschnitt 1.3.4 erläutert.

Abbildung 1.4 zeigt die Ausgabe des Programms im Browser.

Abbildung 1.4 Ergebnis einer einfachen Berechnung

4496.book Seite 27 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

28

Hinweis

Eine Zahl mit Nachkommastellen kann auch als sogenannte Exponential-

zahl dargestellt werden. Diese Schreibweise eignet sich besonders für sehr

große oder sehr kleine Zahlen. Im oben angegebenen Programm hätten

Sie für die Zahl 1.35 eine der Schreibweisen aus Tabelle 1.1 verwenden kön-

nen, was zum gleichen Ergebnis geführt hätte.

1.3.3 Rechenoperatoren für Zahlen

Rechenoperatoren

+ - * / %

Bei Zahlen können Sie die Rechenoperatoren (arithmetische Operatoren)

aus Tabelle 1.2 verwenden.

Zu erwähnen sind auch die kombinierten Zuweisungsoperatoren += und –=.

Mit ihrer Hilfe kann eine Addition bzw. eine Subtraktion zusammen mit

einer Zuweisung erfolgen. Hierzu zwei Beispiele:

Schreibweise Berechnung Ergebnis

$preis = 0.135e1; 0.135 * 101 = 0.135 * 10 1.35

$preis = 135e-2; 135 * 10–2 = 135 * 0.01 1.35

Tabelle 1.1 Beispiele für Schreibweisen von Exponentialzahlen

Operator Bedeutung

+ Addition

- Subtraktion

* Multiplikation

/ Division

% Modulo-Operation: der Rest bei einer ganzzahligen Division.

So ergibt z. B. 7 % 3 den Wert 1, denn 7 dividiert durch 3 ergibt 2,

Rest 1.

** Potenzieren mithilfe des Exponentialoperators (seit PHP 5.6).

Ein Beispiel: 2 ** 3, gesprochen: 2 hoch 3.

Mehr dazu in Abschnitt 10.2.

Tabelle 1.2 Rechenoperatoren in PHP

4496.book Seite 28 Montag, 6. März 2017 10:12 10

1.3 Variablen, Datentypen und Operatoren

29

1� $x = 5; $x += 3; (jetzt hat $x den Wert 8)

� $x = 5; $x -= 3; (jetzt hat $x den Wert 2)

Ein weiteres Beispiel mit einer etwas umfangreicheren Berechnung:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$liter1 = 16;$liter2 = 23;$liter3 = 34;$preis = 1.35;$gesamtzahlung = ($liter1 + $liter2 + $liter3) * $preis;echo $gesamtzahlung;

?></body></html>

Listing 1.4 Datei zahl_operator.php

Rangordnung der

Operatoren

Beachten Sie, dass (wie in der Mathematik üblich) Multiplikation und Divi-

sion Vorrang vor Addition und Subtraktion haben, also zuerst ausgeführt

werden. Bei Operatoren mit gleicher Rangordnung werden die Ausdrücke

von links nach rechts bearbeitet.

Allerdings können Sie als Entwickler die Reihenfolge durch das Setzen von

Klammern beeinflussen. Ausdrücke in Klammern werden zuerst vollstän-

dig ausgewertet; das Ergebnis fließt später in die restliche Berechnung ein.

Zum vorliegenden Programm: Die Variablen $liter1, $liter2, $liter3 und

$preis werden eingeführt und mit Werten belegt. Die Variable $gesamtzah-

lung wird wie folgt errechnet:

� Die drei Literzahlen werden addiert (ergibt 73).

� Die Gesamtliterzahl wird mit dem Preis multipliziert (ergibt 98.55).

Die Ausgabe des Programms im Browser sehen Sie in Abbildung 1.5.

Abbildung 1.5 Ergebnis einer umfangreicheren Berechnung

4496.book Seite 29 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

30

Der Ausdruck $gesamtzahlung = $liter1 + $liter2 + $liter3 * $preis, also

ohne Klammern, führt nicht zum richtigen Ergebnis, da in diesem Fall

� die Multiplikation zuerst ausgeführt wird (es ergibt sich der Preis für

34 Liter) und

� anschließend zu diesem Preis die beiden anderen Literzahlen hinzu-

addiert werden.

Übung »u_zahl«

Berechnen Sie in einem PHP-Programm (Datei u_zahl.php) den Bruttopreis

eines Einkaufs. Es werden insgesamt drei Artikel eingekauft. Die Netto-

preise der einzelnen Artikel betragen 22,50 €, 12,30 € und 5,20 €. Der Brut-

topreis berechnet sich bekanntlich aus dem Nettopreis zuzüglich 19 %

Umsatzsteuer. In die Berechnung muss also der Faktor 1.19 eingehen.

Speichern Sie die Datei im Hauptverzeichnis Ihres Webservers und testen

Sie anschließend Ihr Programm, indem Sie einen Browser aufrufen und die

Adresse http://localhost/u_zahl.php eingeben.

Die Ausgabe des Programms im Browser sollte wie in Abbildung 1.6 aus-

sehen.

Abbildung 1.6 Ergebnis der Übung »u_zahl«

INF Hinweis: Eine (mathematisch nicht erlaubte) Division einer positiven oder

negativen Zahl durch 0 führt seit PHP 7.0 nicht mehr zu einem Abbruch

des Programms. Als Ergebnis wird INF bzw. -INF angezeigt. INF steht als Ab-

kürzung für infinity (deutsch: unendlich).

1.3.4 Variablen und Operatoren für Zeichenketten

Strings Zeichenketten (Strings) müssen in doppelte Hochkommata (" ") oder in

einfache Hochkommata (' ') eingeschlossen werden.

Hochkomma, Punkt Das Zeichen . (Punkt) dient der Verkettung von Zeichenketten bzw. von

Zahlen und Zeichenketten. Dies wird z. B. für eine kommentierte Ergebnis-

ausgabe genutzt. Der Operator .= (Punkt gleich) kann zur Vergrößerung

einer Zeichenkette eingesetzt werden. Falls die Zeichenketten HTML-Code

4496.book Seite 30 Montag, 6. März 2017 10:12 10

1.3 Variablen, Datentypen und Operatoren

31

1enthalten, gelangt dieser HTML-Code zur Ausführung. Ein Beispielpro-

gramm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$liter = 14;$preis = 1.35;$zahlung = $liter * $preis;$einheit1 = "Liter";$einheit2 = 'Euro';

$gesamt = "<p>" . $liter . " " . $einheit1;$gesamt .= " kosten " . $zahlung . " " . $einheit2 . "</p>";echo $gesamt;echo "<p>$liter $einheit1 kosten $zahlung $einheit2</p>";echo '<p>$liter $einheit1 kosten $zahlung $einheit2</p>';

?></body></html>

Listing 1.5 Datei zeichenkette.php

Erläuterung:

� Im ersten Teil des Programms findet die Berechnung des Preises statt.

� Den Variablen $einheit1 und $einheit2 werden Zeichenketten zugewie-

sen – in doppelten bzw. in einfachen Hochkommata.

� Der Variablen $gesamt wird eine Zeichenkette zugewiesen, die sich aus

einzelnen Zeichenketten, Zahlen- und Zeichenkettenvariablen sowie

HTML-Code zusammensetzt (Operator .).

� Die Zeichenkette $gesamt wird verlängert (Operator .=).

� Die Zeichenkette $gesamt wird ausgegeben.

� Der gleiche Ausgabetext soll auf zwei weitere Arten ausgegeben werden.

Der Wert einer einzelnen Variablen wird auch ausgegeben, falls die Va-

riable innerhalb einer Zeichenkette untergebracht wird. Diese Form

wird häufig verwendet. Sie sollten allerdings darauf achten, dass die Zei-

chenkette zwischen doppelte Hochkommata gesetzt wird.

� Falls die Variable innerhalb einer Zeichenkette in einfachen Hochkom-

mata steht, wird nur der Name der Variablen, nicht aber der Wert der Va-

riablen im Text ausgegeben (siehe Ausgabe). Dies ist normalerweise

nicht erwünscht.

4496.book Seite 31 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

32

Ein Tipp zum besseren Verständnis: Verfolgen Sie jeden einzelnen Schritt

des Programms und notieren Sie den aktuellen Wert jeder Variablen, so-

bald sich dieser ändert.

Hinweis

Beim Schreiben eines Programms im Editor sollte innerhalb einer Zeichen-

kette, also innerhalb einfacher oder doppelter Hochkommata, kein Zeilen-

umbruch erfolgen. In diesem Buch ist dies aber aus drucktechnischen

Gründen an manchen Stellen notwendig, da einige Zeichenketten schlicht

zu lang sind.

Sie erkennen zusammengehörige lange Zeichenketten leicht an dem

geringeren Abstand zwischen den einzelnen Zeilen und an der Einrückung

ab der zweiten Zeile. An diesen Stellen wird kein Absatzumbruch, sondern

ein manueller Zeilenwechsel durchgeführt. Falls Sie die betreffende Pro-

grammstelle übernehmen, sollten Sie sie unbedingt in eine einzelne Zeile

schreiben.

Abbildung 1.7 zeigt die Ausgabe des Programms im Browser.

Abbildung 1.7 Arbeiten mit Zeichenketten

Übung »u_zeichenkette«

Schreiben Sie das Programm aus der vorherigen Übung u_zahl um (Datei

u_zeichenkette.php). Das Zwischenergebnis und das Endergebnis sollen

errechnet werden. Speichern Sie die Datei im Hauptverzeichnis Ihres

Webservers und testen Sie Ihr Programm, indem Sie einen Browser aufru-

fen und die Adresse http://localhost/u_zeichenkette.php eingeben. Die

Ausgabe des Programms im Browser sollte wie in Abbildung 1.8 aussehen.

4496.book Seite 32 Montag, 6. März 2017 10:12 10

1.3 Variablen, Datentypen und Operatoren

33

1

Abbildung 1.8 Ergebnis der Übung »u_zeichenkette«

1.3.5 Konstanten

UnveränderlichKonstanten dienen der Speicherung von unveränderlichen Werten. Als

Entwickler können Sie sich den Namen einer Konstanten meist leichter

merken als den zugehörigen Wert. Nachfolgend ein kleines Beispiel:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

const pi = 3.1415926;const gruss = "Guten Morgen";echo pi . "<br>";echo gruss . "<br>";// gruss = "Hallo";

?></body></html>

Listing 1.6 Datei konstanten.php

const, ohne $Mithilfe des Schlüsselworts const werden die Zahlenkonstante pi und die

Zeichenkettenkonstante gruss definiert. Beachten Sie, dass im Unterschied

zu Variablen kein $-Zeichen vor dem Namen notiert wird. Konstanten kön-

nen nicht direkt innerhalb von Zeichenketten ausgegeben werden, da sie

mangels $-Zeichen nicht vom restlichen Text unterschieden werden kön-

nen. Beim Versuch, eine Konstante zu ändern, erscheint eine Fehlermel-

dung.

In Abbildung 1.9 sehen Sie die Ausgabe des Programms.

4496.book Seite 33 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

34

Abbildung 1.9 Konstanten

1.3.6 Referenzen

Weiterer Name Sie können auf eine vorhandene Variable eine sogenannte Referenz ein-

richten. Damit haben Sie die Möglichkeit, auf diese Variable über einen

weiteren Namen zuzugreifen. Referenzen werden vor allem im Zusam-

menhang mit Funktionen und Methoden interessant (siehe Abschnitt

1.8.6). Eine erste Einführung bietet das nachfolgende Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$orig = 12.3;echo "$orig<br>";

$refe = &$orig;$refe = 5.8;echo "$orig<br>";

?></body></html>

Listing 1.7 Datei referenz.php

Operator & Die Variable $orig wird erzeugt. Es wird ihr ein Wert zugewiesen und ausge-

geben. Danach wird mithilfe des Operators & die Referenz $refe auf die Va-

riable $orig eingerichtet. Eine anschließende Änderung des Werts über die

Referenz entspricht einer Änderung des Werts der Variablen. In Abbildung

1.10 sehen Sie die Ausgabe des Programms.

Abbildung 1.10 Referenzen

4496.book Seite 34 Montag, 6. März 2017 10:12 10

1.4 Einfache Formularauswertungen

35

11.4 Einfache Formularauswertungen

Formulare

auswerten

In den bisher gezeigten Beispielen hat der Benutzer eines Programms noch

keine Möglichkeit, eigene Eingaben vorzunehmen. Er kann das Programm

lediglich aufrufen und das Ergebnis betrachten.

Eine besondere Stärke und ein typischer Einsatzzweck von PHP ist jedoch

die Auswertung von Benutzereingaben aus Formularen. Erst durch eine

solche Auswertung wird die dynamische Informationsübermittlung zwi-

schen Benutzer und Webserver ermöglicht. Dem Betrachter wird zunächst

ein Formular vorgelegt, in dem er eigene Einträge vornehmen bzw. bei

dem er aus bereits vorhandenen Einträgen auswählen kann. Er füllt das

Formular aus, sendet es ab und erhält nach der Auswertung eine Antwort

vom Webserver.

1.4.1 Eingabeformular

TexteingabefeldIn diesem Abschnitt soll eine Informationsübermittlung mithilfe von ein-

zeiligen Texteingabefeldern ermöglicht werden. Formulare können noch

aus einer Reihe weiterer Elemente bestehen. Diese werden ausführlich in

Kapitel 2, besprochen.

Der HTML-Programmcode des Formulars:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><p>Bitte tragen Sie Ihren Vornamen und Ihren Nachnamen ein.<br>

Senden Sie anschließend das Formular ab.</p><form action = "eingabe.php" method = "post">

<p><input name = "vor"> Vorname</p><p><input name = "nach"> Nachname</p><p><input type = "submit"><input type = "reset"></p>

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

Listing 1.8 Datei eingabe.htm

Die Ausgabe des Formulars im Browser, mit eingegebenen Beispieldaten,

sehen Sie in Abbildung 1.11.

4496.book Seite 35 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

36

Abbildung 1.11 Eingabeformular mit Beispieldaten

form, action,

method

Innerhalb des HTML-Dokuments befindet sich ein form-Container. Die

Markierung <form> beinhaltet:

� das Attribut action, das auf die Datei mit dem PHP-Auswertungspro-

gramm (hier eingabe.php) verweist, und

� das Attribut method, das auf die Übermittlungsmethode zum Webserver

(hier post) verweist.

Der form-Container beinhaltet die verschiedenen Formularelemente. Dabei

handelt es sich um:

� zwei einzeilige Texteingabefelder mit den Namen vor bzw. nach für die

Eintragung des Vornamens bzw. des Nachnamens,

submit � eine Schaltfläche zum Absenden (englisch: to submit), beim Betätigen

werden die eingetragenen Daten an den Server gesendet, und es wird

das genannte PHP-Auswertungsprogramm angefordert,

reset � eine Schaltfläche zum Zurücksetzen (englisch: to reset) des Formulars,

beim Betätigen wird das Formular wieder in den Anfangszustand ver-

setzt, wie es z. B. bei einer Fehleingabe notwendig sein kann.

Die Auswertung der Eingabedaten stelle ich im folgenden Abschnitt vor.

Übung »u_eingabe«, Teil 1

Erweitern Sie das Beispiel dahingehend, dass eine vollständige Adresse

eingegeben werden kann (Datei u_eingabe.htm). Es sollen zusätzlich drei

weitere Eingabefelder für die Angaben zu Straße, Hausnummer, Postleit-

zahl und Ort innerhalb des Formulars vorhanden sein. Das Formular sollte

wie in Abbildung 1.12 aussehen (mit Beispieldaten).

4496.book Seite 36 Montag, 6. März 2017 10:12 10

1.4 Einfache Formularauswertungen

37

1

Abbildung 1.12 Erweitertes Eingabeformular mit Beispieldaten

1.4.2 Auswertung mit $_POST

Das antwortende PHP-Programm für das Formular in der Datei einga-

be.htm sieht wie folgt aus:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

echo "Guten Tag, " . $_POST["vor"] . " " . $_POST["nach"];?></body></html>

Listing 1.9 Datei eingabe.php

Falls der Benutzer das obige Beispiel eingegeben hat, antwortet der Server

wie in Abbildung 1.13 dargestellt.

Abbildung 1.13 Auswertung eines einfachen Eingabeformulars

$_POSTEs gibt in PHP einige vordefinierte Variablen, u. a. das assoziative Feld

$_POST. Aus den Namen der Eingabefelder werden automatisch Elemente

dieses Felds, falls die Übermittlungsmethode post verwendet wird.

4496.book Seite 37 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

38

Die Elemente können angesprochen werden, indem Sie ihren Namen in

Anführungszeichen und eckigen Klammern hinter dem Namen des Felds

$_POST angeben. Die Eintragung im Texteingabefeld vor wird also zum Wert

der Variablen $_POST["vor"] im Programm.

Feldelemente lassen sich allerdings nicht in einer Zeichenkette innerhalb

von Hochkommata ausgeben, wie dies bei einzelnen Variablen der Fall ist.

Daher ist die Ausgabezeile mit echo etwas umfangreicher. Weitere Einzel-

heiten zu Feldern sowie insbesondere zu assoziativen Feldern folgen in Ab-

schnitt 1.10.2.

Übung »Code eingeben«

Dieses Zusammenspiel von HTML-Datei und PHP-Datei stellt einen wichti-

gen Schritt dar. Daher zunächst eine »einfache« Aufgabe: Geben Sie das

angegebene Beispiel in einen Texteditor ein und speichern Sie es unter

den Dateinamen eingabe.htm und eingabe.php ab. Füllen Sie das Formular

aus, senden Sie es ab und kontrollieren Sie die Reaktion des Webservers.

Übung »u_eingabe«, Teil 2

Erstellen Sie (passend zum Formular aus der Übung u_eingabe, Teil 1) ein

PHP-Programm, das die Daten des Benutzers bestätigt (Datei u_ein-

gabe.php). Falls der Benutzer die oben angegebenen Beispieldaten einge-

geben hat, soll die Ausgabe des Programms im Browser aussehen wie in

Abbildung 1.14.

Abbildung 1.14 Auswertung des erweiterten Eingabeformulars

1.4.3 Umwandlung von Zeichenketten in Zahlen

Ein Texteingabefeld eines Formulars nimmt eine Zeichenkette auf; es wird

dabei eine Zeichenkette an das PHP-Programm übermittelt. Häufig sollen

jedoch Zahlen, z. B. zur Ausführung von Berechnungen, übermittelt wer-

4496.book Seite 38 Montag, 6. März 2017 10:12 10

1.4 Einfache Formularauswertungen

39

1den. Zeichenketten werden nach den folgenden Regeln implizit konver-

tiert bzw. umgewandelt:

Ziffern, Vorzeichen� Zeichenketten, die nach einem optionalen Vorzeichen nur Ziffern ent-

halten, werden in ganze Zahlen umgewandelt. Beispiele: "42", "-42" oder

"+42".

Dezimalpunkt,

Exponent

� Zeichenketten, die zusätzlich einen Dezimalpunkt oder am Ende nach

einem optionalen Vorzeichen einen Exponenten nach einem e oder E

enthalten, werden in Zahlen mit Nachkommastellen umgewandelt, also

in Fließkommazahlen. Beispiele: "4.2", "-4.2", "42e3", "4.2e3", "4.2e-3"

oder "-4.2E3".

� Andere Zeichen sollten vermieden werden.

Warnung� Falls innerhalb einer Zeichenkette andere Zeichen stehen, wird nur der

vordere Teil der Zeichenkette bis zum Beginn der anderen Zeichen

umgewandelt. Allerdings erfolgt eine Warnung, dass es sich nicht um

einen wohlgeformten numerischen Wert handelt. Beispiele: "42abc23"

(Zahlenwert: 42) oder "4.2 Liter" (Zahlenwert 4.2).

Wert 0� Falls am Beginn einer Zeichenkette andere Zeichen stehen, ergibt sich

der Zahlenwert 0, und es erfolgt ebenfalls die oben genannte Warnung.

Beispiele: "abc42" oder "Summe 4.2".

Explizite

Umwandlung

Sie können natürlich nicht wissen, was der Benutzer eingibt. Zur Vermei-

dung der oben genannten Warnung sollten Sie daher Eingaben oder ande-

re Zeichenketten, aus denen Sie Zahlenwerte entnehmen möchten, explizit

in Zahlen umwandeln.

intval(), doubleval()Dazu dienen die beiden Funktionen doubleval() für Zahlen mit Nachkom-

mastellen und intval() für ganze Zahlen. Ein Beispiel mit einigen Um-

wandlungen folgt:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$a = 435;echo intval($a) . "<br>";

$b = "22.6";echo doubleval($b) . "<br>";echo intval($b) . "<br>";

?></body></html>

Listing 1.10 Datei umwandlung.php

4496.book Seite 39 Montag, 6. März 2017 10:12 10

1 PHP-Programmierkurs

40

Im Fall von intval("22.6") werden die Nachkommastellen abgeschnitten,

und es ergibt sich der Wert 22.

Eingabefehler In den Einführungsbeispielen dieses Buchs werden Eingabefehler des Be-

nutzers nicht immer abgefangen. Die Programme würden sonst unnötig

umfangreich und schwer verständlich. Später werden wir Routinen in die

Programme einbauen, die möglichst alle Eingabefehler abfangen. Aber es

gilt immer der Grundsatz: Kein Programm ist vollständig gegen Eingabe-

fehler gesichert.

1.4.4 Umwandlung von Eingaben

Im nachfolgenden Beispiel wird der Benutzer aufgefordert, zwei Zahlen in

ein Formular einzugeben und das Formular abzusenden. Bei den Eingaben

handelt es sich um Zeichenketten. Diese werden mithilfe der Funktion

doubleval() in Zahlen umgewandelt. Ein PHP-Programm berechnet die

Summe der beiden Zahlen und gibt das Ergebnis aus. Der HTML-Code des

Formulars lautet:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><p>Bitte zwei Zahlen eintragen und das Formular absenden</p><form action = "eingabe_zahl.php" method = "post">

<p>Wert 1: <input name = "w1"></p><p>Wert 2: <input name = "w2"></p><p><input type = "submit"><input type = "reset"></p>

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

Listing 1.11 Datei eingabe_zahl.htm

Das PHP-Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$w1 = doubleval($_POST["w1"]);$w2 = doubleval($_POST["w2"]);$erg = $w1 + $w2;

4496.book Seite 40 Montag, 6. März 2017 10:12 10

1.4 Einfache Formularauswertungen

41

1echo "Die Summe von $w1 und $w2 ist $erg";

?></body></html>

Listing 1.12 Datei eingabe_zahl.php

Ein Aufruf mit den in Abbildung 1.15 dargestellten Eingabewerten ergibt die

in Abbildung 1.16 gezeigte Antwort.

Abbildung 1.15 Senden von Zahlen

Abbildung 1.16 Umwandlung und Berechnung des Ergebnisses

Im Antwortprogramm werden die eingegebenen Zeichenketten nach den

oben genannten Regeln implizit (automatisch) in Zahlen umgewandelt.

Übung »u_eingabe_zahl«

Erstellen Sie ein Eingabeformular (Datei u_eingabe_zahl.htm) und ein

dazu passendes PHP-Programm (Datei u_eingabe_zahl.php), mit dessen

Hilfe das Quadrat einer Zahl berechnet werden kann. Die Zahl soll also mit

sich selbst multipliziert werden. Vergessen Sie nicht, die eingegebene Zei-

chenkette in eine Zahl umzuwandeln.

Formular und Ergebnis sollten wie in Abbildung 1.17 und Abbildung 1.18

aussehen.

4496.book Seite 41 Montag, 6. März 2017 10:12 10

313

7

Kapitel 7

Dateien und Verzeichnisse

Dateien lesen

und schreiben

In vielen Fällen muss zur Speicherung kleinerer Datenmengen keine Daten-

bank angelegt werden. Für einen Seitenzugriffszähler reicht es beispielswei-

se aus, eine einfache Textdatei zu verwenden. In diesem Abschnitt behandle

ich die Funktionen zum Schreiben und Lesen von Textdateien. Darüber hi-

naus erläutere ich Funktionen, die allgemein Informationen über Dateien

und Verzeichnisse bereitstellen.

SchreibrechteUnter Ubuntu Linux oder macOS werden zur Erstellung oder Änderung

von Dateien und Verzeichnissen zunächst Schreibrechte benötigt. Bei den

meisten Website-Providern wird Linux genutzt. Dort werden Ihnen nor-

malerweise Schreibrechte innerhalb Ihrer Domain gegeben.

7.1 Dateitypen

Bei der Ein- und Ausgabe von Daten in Dateien sollten Sie wissen, welcher

Dateityp vorliegt und welche Zugriffsart Sie verwenden können. Man un-

terscheidet zwischen den folgenden Zugriffsarten:

Sequenziell� Sequenzieller Zugriff: Diese Möglichkeit wird bei einer Datei bevorzugt,

deren einzelne Zeilen unterschiedlich lang sind und jeweils mit einem

Zeilenumbruch beendet werden. Ihren Inhalt können Sie mit einem ein-

fachen Texteditor bearbeiten. Die Zeilen werden rein sequenziell gele-

sen bzw. geschrieben. Es ist nicht möglich, auf eine bestimmte Zeile

direkt zuzugreifen, da Sie nicht wissen können, wie viele Vorgängerzei-

len es gibt und wie lang diese jeweils sind.

Wahlfrei� Wahlfreier Zugriff: Diese Möglichkeit haben Sie bei einer Datei, die gleich

lange Datensätze beinhaltet. Es können Zeilenumbrüche existieren,

müssen aber nicht. Die Länge und die Struktur eines einzelnen Daten-

satzes sollten bekannt sein. Die Datensätze können direkt gelesen bzw.

verändert werden, da Sie den Ort jedes Datensatzes berechnen können.

4496.book Seite 313 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

314

Binär � Binärer Zugriff: Diese Zugriffsmöglichkeit haben Sie bei jeder Datei. Sie

arbeiten mit reinen Byte-Folgen. Diese können mithilfe eines darauf

angepassten Programms gelesen oder verändert werden. Allerdings

kann dies zur Folge haben, dass die Dateien nicht mehr mit den dazu-

gehörigen Anwendungsprogrammen gelesen werden können. Beispiel:

Sie überschreiben in einer Oracle-Datenbank die Stelle, an der die

Anzahl der Datensätze einer bestimmten Tabelle steht. Das kann dazu

führen, dass diese Tabelle oder sogar die ganze Datenbank zerstört wird.

Es gibt Mischformen zwischen den genannten Typen. Ohne Kenntnis der

Struktur einer Datei ist es nicht möglich, diese korrekt zu bearbeiten.

7.2 Schreiben einer sequenziellen Datei

Überschreiben Mithilfe des nachfolgenden Programms werden einige Zeilen in eine Text-

datei geschrieben. Falls diese Datei bereits existiert, wird sie überschrieben.

Zunächst das Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$fp = @fopen("daten.txt","w");// $fp = @fopen("daten.txt","a");// $fp = @fopen("unter/daten.txt","w");// $fp = @fopen("../daten.txt","w");// $fp = @fopen("../weitere/daten.txt","w");// $fp = @fopen("C:/Temp/daten.txt","w");

if (!$fp)exit("Datei kann nicht zum Schreiben angelegt werden");

fputs($fp, "Erste Zeile\n");for ($i=10; $i<=30; $i+=10)

fputs($fp, "$i\n");fputs($fp, "Letzte Zeile\n");

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

?></body></html>

Listing 7.1 Datei schreiben.php

4496.book Seite 314 Montag, 6. März 2017 10:12 10

7.2 Schreiben einer sequenziellen Datei

315

7

Line FeedIn Abbildung 7.1 sehen Sie den Inhalt der ausgegebenen Datei im Editor

Notepad++ inklusive Angabe der Sonderzeichen. Das Zeichen LF (Line Feed,

deutsch: Zeilenvorschub) wird durch die Zeichenfolge \n erzeugt. Inner-

halb des PHP-Programms werden die Funktionen fopen(), exit(), fputs()

und fclose() verwendet.

Abbildung 7.1 Nach dem Schreiben der Datei daten.txt

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

� Der erste Parameter gibt den Namen der Datei an. In unserem Beispiel

handelt es sich um die Datei mit dem Namen daten.txt, die sich im sel-

ben Verzeichnis wie das PHP-Programm befindet.

write� Der zweite Parameter gibt den Öffnungsmodus an. Hier ist es w (für

write), das heißt, die Datei wird zum Überschreiben geöffnet. Jeder Auf-

ruf des Programms überschreibt den alten Inhalt der Datei, falls vorhan-

den. Andere Öffnungsmodi sind z. B. r (für read, Lesen aus einer Datei)

und a (für append, Anhängen von Inhalten an eine Datei).

Dateizeiger� Der Rückgabewert der Funktion fopen() ist ein sogenannter Dateizeiger.

Er wird in der Variablen $fp gespeichert. Dieser Dateizeiger wird für wei-

tere Zugriffe auf die Datei benötigt. Sollte die Datei am angegebenen Ort

nicht existieren, gibt die Funktion fopen() den Wert false zurück.

Operator @� Das Zeichen @ (der sogenannte Silence-Operator) vor dem Namen einer

Funktion sorgt dafür, dass eventuell auftretende Fehlermeldungen

beim Ausführen der betreffenden Funktion auf dem Bildschirm erschei-

nen. Dies ist besonders beim Dateizugriff sinnvoll, damit einem poten-

ziellen Angreifer kein Hinweis auf den Namen einer Datei auf dem

Server gegeben werden kann.

exit()Kann die Datei nicht geöffnet werden, sollte das PHP-Programm mithilfe

der Funktion exit() beendet werden, da die nachfolgenden Schritte nur

möglich sind, wenn die Datei zum Schreiben geöffnet werden kann. Man

kann der Funktion exit() eine Zeichenkette übergeben, die in diesem Feh-

lerfall auf dem Bildschirm ausgegeben wird.

4496.book Seite 315 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

316

fputs() Die Funktion fputs() dient der Ausgabe in eine Datei:

� Der erste Parameter gibt an, in welche Datei ausgegeben werden soll. Da-

bei muss es sich um den Dateizeiger einer zuvor geöffneten Datei han-

deln. Hier ist es $fp.

� Der zweite Parameter beinhaltet die Ausgabe. Die Zeichenfolge \n dient

der Erstellung eines Zeilenumbruchs innerhalb der Datei.

� Sie könnten einen optionalen dritten Parameter nutzen. Er begrenzt die

Länge der Ausgabe auf die angegebene Zeichenanzahl.

Nach einem Schreibvorgang mithilfe von fputs() wird der Dateizeiger wei-

tergesetzt. Der nächste Schreibvorgang erfolgt also hinter dem vorherigen

Schreibvorgang. Es wird sequenziell weitergeschrieben.

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

� Der Parameter gibt an, welche Datei geschlossen werden soll. Dabei

muss es sich um den Dateizeiger einer zuvor geöffneten Datei handeln.

Hier ist es $fp.

� Sie sollten geöffnete Dateien immer schließen, auch wenn nach der

Beendigung eines PHP-Programms ohnehin alle beteiligten Dateien

geschlossen werden. Andernfalls könnte das Betriebssystem weitere

Zugriffe auf diese Datei verwehren, da es sie für noch geöffnet hält.

Weitere

Pfadangaben

Im Programm sehen Sie (aktuell auskommentierte) Möglichkeiten zum

Öffnen von Dateien in anderen Verzeichnissen mithilfe von fopen(). Es

wird sowohl mit relativen, also vom aktuellen Verzeichnis ausgehenden

Pfadangaben, als auch mit absoluten Pfadangaben gearbeitet.

� Falls Sie die Datei mit dem Öffnungsmodus a aufrufen, werden die Inhal-

te an die bereits vorhandenen Inhalte angehängt.

� Der Aufruf fopen("unter/daten.txt","w") öffnet die Datei daten.txt im

Unterverzeichnis unter, falls es dieses Verzeichnis gibt.

� Der Aufruf fopen("../daten.txt","w") öffnet die Datei daten.txt im

übergeordneten Verzeichnis.

� Der Aufruf fopen("../weitere/daten.txt","w") öffnet die Datei daten.txt

im Unterverzeichnis weitere des übergeordneten Verzeichnisses, falls es

das Verzeichnis weitere gibt.

� Der Aufruf fopen("C:/Temp/daten.txt","w") öffnet die Datei daten.txt im

absoluten Verzeichnis C:/Temp, falls es dieses Verzeichnis gibt.

4496.book Seite 316 Montag, 6. März 2017 10:12 10

7.3 Lesen einer sequenziellen Datei

317

7

7.3 Lesen einer sequenziellen Datei

Das nachfolgende Programm dient dem Lesen aller Zeilen einer Textdatei.

Diese Textdatei kann mithilfe eines einfachen Texteditors oder z. B. mithil-

fe des Schreibprogramms aus Abschnitt 7.2 erzeugt werden. Zunächst das

Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$fp = @fopen("daten.txt","r");while(!feof($fp)){

$zeile = fgets($fp, 100);echo "|$zeile|<br>";

}fclose($fp);

?></body></html>

Listing 7.2 Datei lesen.php

In Abbildung 7.2 sehen Sie die Ausgabe des Programms im Browser. Inner-

halb des PHP-Programms werden die Funktionen fopen(), feof(), fgets()

und fclose() verwendet.

readDie Datei daten.txt wird mithilfe der Funktion fopen() im Öffnungsmodus

r (für read, Lesen aus einer Datei) geöffnet.

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

� Der Parameter gibt an, welche Datei geprüft werden soll. Dabei muss es

sich um den Dateizeiger einer zuvor geöffneten Datei handeln. Hier ist

es $fp.

� Der Rückgabewert der Funktion ist true, falls das Ende der Datei festge-

stellt wird, ansonsten false.

� Im Programm wird eine bedingungsgesteuerte Schleife verwendet. Die-

se wird wiederholt, solange das Ende der Datei noch nicht erreicht ist

(while (!feof($fp)).

� Im Namen der Funktion feof() steckt die Abkürzung EOF für End of File,

also Dateiende.

4496.book Seite 317 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

318

fgets() Innerhalb der while-Schleife wird die Funktion fgets() zum Lesen eines

Werts aus einer Datei eingesetzt:

� Der erste Parameter gibt an, aus welcher Datei gelesen werden soll. Da-

bei muss es sich um den Dateizeiger einer zuvor geöffneten Datei han-

deln. Hier ist es $fp.

� Der zweite Parameter gibt die Länge der einzulesenden Zeichenkette an.

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 ganzer Zeilen eine

Leselänge wählen, die auf jeden Fall für die Zeilen der betreffenden Datei

ausreicht.

� Der Rückgabewert der Funktion fgets() ist der gelesene Wert (ein-

schließlich des Zeilenumbruchs). Er wird hier in der Variablen $zeile ge-

speichert. Diese Variable wird auf dem Bildschirm ausgegeben.

Dateizeiger Nach einem Lesevorgang mithilfe von fgets() wird der Dateizeiger weiter-

gesetzt. Der nächste Lesevorgang erfolgt also hinter dem vorherigen Lese-

vorgang. Es wird sequenziell weitergelesen.

Die Datei wird mithilfe von fclose() geschlossen.

Abbildung 7.2 Nach dem Lesen der Datei daten.txt

Mögliche Probleme In Abbildung 7.2 sehen Sie, dass jede Zeile aus der Datei zur Ausgabe in zwei

senkrechte Striche eingekleidet wird. Sie können diese Striche natürlich

auch im Programm weglassen. Sie dienen nur der Verdeutlichung von zwei

möglichen Problemen:

� Am Ende jeder Zeile einer Textdatei stehen, abhängig vom Betriebssys-

tem und abhängig von dem Programm, das die Textdatei erzeugt hat,

noch ein oder zwei Zeichen. Diese Zeichen werden ebenfalls in der Varia-

blen $zeile gespeichert. In der Ausgabe erscheinen sie als Leerzeichen

4496.book Seite 318 Montag, 6. März 2017 10:12 10

7.4 Verbessertes Lesen einer Datei

319

7

und können ignoriert werden. Falls Sie die gelesenen Inhalte jedoch wei-

terverarbeiten möchten, müssen diese Zeichen gegebenenfalls gelöscht

werden.

� Am Ende der gesamten Textdatei steht das Zeichen EOF für das Datei-

ende. Abhängig von dem Programm, das die Textdatei erzeugt hat, steht

es in der letzten Zeile entweder zusammen mit nützlichem Inhalt oder

als einziges Zeichen. Im vorliegenden Beispiel trifft der zweite Fall zu

und erzeugt eine nicht notwendige leere Zeile.

In Abschnitt 7.4 sehen Sie eine verbesserte Version des Leseprogramms.

Darin werden u. a. die hier genannten Probleme gelöst.

7.4 Verbessertes Lesen einer Datei

Das nachfolgende Programm stellt eine verbesserte Version des Lesepro-

gramms aus Abschnitt 7.3 dar. Zunächst das Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

if(!file_exists("daten.txt"))exit("Datei kann nicht gefunden werden");

$fp = @fopen("daten.txt","r");if(!$fp)

exit("Datei steht nicht zum Lesen bereit");

while(!feof($fp)){

$zeile = fgets($fp, 100);while(ord(substr($zeile, strlen($zeile)-1)) == 13

|| ord(substr($zeile, strlen($zeile)-1)) == 10)$zeile = substr($zeile, 0, strlen($zeile)-1);

if(!(feof($fp) && $zeile == ""))echo "|$zeile|<br>";

}fclose($fp);

?></body></html>

Listing 7.3 Datei lesen_besser.php

4496.book Seite 319 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

320

Existenz der Datei Wenn mithilfe der Funktion file_exists() festgestellt wird, dass die Datei

nicht existiert, wird das Programm mithilfe der Funktion exit() und der

entsprechenden Fehlermeldung beendet.

Öffnen nicht

möglich

Kann die Datei nicht zum Lesen geöffnet werden, wird das Programm

ebenfalls mithilfe der Funktion exit() und der zugehörigen Fehlermel-

dung beendet.

Innerhalb der while-Schleife zum Durchlauf aller Zeilen der Datei sind zwei

Elemente hinzugekommen:

Zeilenende

abschneiden

� Eine weitere while-Schleife mit folgendem Ablauf: Solange das letzte Zei-

chen der Zeile den Code 13 oder den Code 10 hat, wird die Zeile um ein

Zeichen verkürzt. Das betreffende Zeichen für Zeilenende wird also ab-

geschnitten, und es verbleibt der reine Zeileninhalt.

Letzte Zeile prüfen � Eine Prüfung der Zeile, in der das Zeichen EOF steht: Falls eine Zeile das

Zeichen EOF beinhaltet und ansonsten leer ist, erfolgt keine Ausgabe der

Zeile auf dem Bildschirm.

Ein Vergleich der Ausgabe in Abbildung 7.3 mit der in Abbildung 7.2 zeigt

den Erfolg der Maßnahmen.

Abbildung 7.3 Nach dem verbesserten Lesen der Datei daten.txt

7.5 Vereinfachtes Lesen einer Datei

Die Funktionen readfile() und file() liefern eine Möglichkeit zum ver-

einfachten Lesen einer Datei:

readfile() � readfile() liest den vollständigen Inhalt einer Datei auf einmal und gibt

ihn direkt auf dem Bildschirm aus. Zeilenumbrüche werden als Leerzei-

chen ausgegeben, wie die Ausgabe in Abbildung 7.4 zeigt.

file() � file() liest den vollständigen Inhalt einer Datei zeilenweise in ein ein-

dimensionales Feld ein. In der Ausgabe in Abbildung 7.4 sehen Sie, dass

4496.book Seite 320 Montag, 6. März 2017 10:12 10

7.6 Schreiben einer CSV-Datei

321

7

die Elemente des Felds jeweils die Zeichen am Ende der Zeile enthalten.

Sie könnten mit der Maßnahme aus Abschnitt 7.4 abgeschnitten wer-

den.

Abbildung 7.4 Nach dem vereinfachten Lesen der Datei daten.txt

Beide Funktionen werden im folgenden Beispiel dazu benutzt, den Inhalt

der bereits bekannten Datei daten.txt vollständig wiederzugeben:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

if(!file_exists("daten.txt"))exit("Datei kann nicht gefunden werden");

echo "<p>Lesen mit readfile():<br>";readfile("daten.txt");echo "</p>";

echo "<p>Lesen mit file():<br>";$feld = file("daten.txt");for($i=0; $i<count($feld); $i++)

echo "|$feld[$i]|<br>";echo "</p>";

?></body></html>

Listing 7.4 Datei lesen_einfach.php

7.6 Schreiben einer CSV-Datei

DatenaustauschDas CSV-Format dient als universelles Austauschprogramm zwischen un-

terschiedlichen Anwendungen. Viele Programme, wie z. B. MS Excel unter

4496.book Seite 321 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

322

Windows oder LibreOffice Calc unter Ubuntu Linux und macOS, können

Dateien im CSV-Format schreiben und lesen.

Trennzeichen Die Datensätze in einer CSV-Datei stehen jeweils in einer eigenen Zeile. Die

Informationen innerhalb eines Datensatzes werden durch ein Trennzei-

chen voneinander getrennt, meist ein Semikolon. Dies führt z. B. in MS

Excel zu einer Aufteilung in einzelne Zellen.

Das nachfolgende Programm erzeugt eine CSV-Datei. Die ausgegebenen

Daten in den Zeichenketten können ursprünglich die Ergebnisse von Be-

rechnungen oder Eigenschaften einer Klasse sein oder aus einer Daten-

bank stammen.

Abbildung 7.5 Nach dem Schreiben der Datei daten.csv

Abbildung 7.6 Datei daten.csv in MS Excel

In Abbildung 7.5 sehen Sie die Datei in einem Texteditor, in Abbildung 7.6

in MS Excel. Beim Öffnen der Datei in LibreOffice Calc unter Ubuntu Linux

oder macOS können Sie die Einstellungen des Textimport-Dialogfelds, das

beim Import angezeigt wird, einfach mit OK bestätigen.

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$fp = @fopen("daten.csv","w");if (!$fp)

exit("Datei kann nicht zum Schreiben angelegt werden");

fputs($fp, "Maier;Hans;6714;3500;15.03.1962\n");fputs($fp, "Schmitz;Peter;81343;3750;12.04.1958\n");fputs($fp, "Mertens;Julia;2297;3621,5;30.12.1959\n");

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

4496.book Seite 322 Montag, 6. März 2017 10:12 10

7.7 Lesen einer CSV-Datei

323

7

?></body></html>

Listing 7.5 Datei schreiben_csv.php

iconv()Falls Umlaute innerhalb von MS Excel falsch dargestellt werden, können

Sie die betreffenden Zeichenketten mithilfe der Funktion iconv() in einem

anderen Zeichensatz codieren. Nachfolgend wird die Zeichenkette »Mül-

ler« von UTF-8 in ISO-8859-1 umgewandelt.

$x = iconv("UTF-8", "ISO-8859-1//TRANSLIT", "Müller");

ImportSie haben beim Import von Daten in MS Excel auch die Möglichkeit, die Co-

dierung einzustellen: Rufen Sie bei geöffneter Excel-Datei den Menüpunkt

Daten • Externe Daten abrufen • Aus Text auf. Im ersten Schritt des

Textkonvertierungs-Assistenten können Sie in der Liste Dateiursprung

z. B. die Codierung Unicode (UTF-8) wählen.

7.7 Lesen einer CSV-Datei

Das nachfolgende Programm dient dem Lesen einer CSV-Datei. Sie kann

mithilfe eines beliebigen Programms erzeugt werden, das CSV-Daten aus-

geben kann. Im vorliegenden Fall handelt es sich um die Ausgabedatei des

Programms in Abschnitt 7.6, die anschließend in MS Excel um einen Daten-

satz vergrößert wird (siehe Abbildung 7.7).

Abbildung 7.7 Datei daten.csv, in MS Excel verändert

Zunächst das Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

if(!file_exists("daten.csv"))exit("Datei kann nicht gefunden werden");

$fp = @fopen("daten.csv","r");

4496.book Seite 323 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

324

if(!$fp)exit("Datei steht nicht zum Lesen bereit");

while(!feof($fp)){

$zeile = fgets($fp, 100);while(ord(substr($zeile, strlen($zeile)-1)) == 13

|| ord(substr($zeile, strlen($zeile)-1)) == 10)$zeile = substr($zeile, 0, strlen($zeile)-1);

if(!(feof($fp) && $zeile == "")){

$worte = explode(";", $zeile);for($i=0; $i<count($worte); $i++)

echo "$i:|$worte[$i]| ";echo "<br>";

}}fclose($fp);

?></body></html>

Listing 7.6 Datei lesen_csv.php

Nach dem erfolgreichen Öffnen der CSV-Datei werden die einzelnen Zeilen

innerhalb einer while-Schleife gelesen. Wie bereits in Abschnitt 7.4 erläu-

tert, werden die Zeichen für das Zeilenende abgeschnitten, und es wird die-

jenige Zeile ignoriert, die nur das Zeichen EOF beinhaltet.

explode() Aus jeder Zeile wird mithilfe der Funktion explode() ein Feld erzeugt. Die

Elemente des Felds stellen die einzelnen Informationen des Datensatzes

dar. Sie sind durch das Trennzeichen Semikolon voneinander getrennt. In

der Ausgabe stehen die Elemente einzeln, nummeriert und ohne das Zei-

chen für das Zeilenende (siehe Abbildung 7.8).

Abbildung 7.8 Nach dem Lesen der Datei daten.csv

4496.book Seite 324 Montag, 6. März 2017 10:12 10

7.8 Ein einfacher Webcounter

325

7

7.8 Ein einfacher Webcounter

WebcounterIm folgenden Beispiel wird ein Zähler realisiert, der die Anzahl der Zugriffe

auf eine Datei festhält. Ein solcher Webcounter wird im Internet oft einge-

setzt, um die Beliebtheit bzw. den Erfolg einer Webseite zu messen und an-

zuzeigen. Das Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

if(file_exists("schreiben_webcounter.txt")){

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

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

}else

$zahl = 0;}else

$zahl = 0;

/* Zahl erhöhen */$zahl = $zahl + 1;echo "Webcounter steht auf $zahl";

/* Neue Zahl schreiben */$fp = @fopen("schreiben_webcounter.txt", "w");

if(!$fp)exit("Webcounter kann nicht geschrieben werden");

fputs($fp,$zahl);fclose($fp);

?></body></html>

Listing 7.7 Datei schreiben_webcounter.php

4496.book Seite 325 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

326

Falls es sich um den ersten Zugriff auf die Datei handelt, existiert sie noch

nicht (Funktion file_exists()), und der Zähler wird auf 0 gesetzt. Es wird

versucht, die Datei zu öffnen. Falls dies gelingt, wird der aktuelle Zähler-

stand aus der Datei in die Variable $zahl eingelesen. Falls es nicht gelingt,

wird der Zähler auf 0 gesetzt.

Anschließend hat die Variable in jedem Fall einen Wert. Dieser Wert wird

um 1 erhöht, ausgegeben und anschließend in die Datei geschrieben, so-

dass sie für den nächsten Zugriff den aktuellen Wert bereitstellt. Die Ausga-

be nach einigen weiteren Zugriffen sehen Sie in Abbildung 7.9.

Abbildung 7.9 Zugriffszähler

7.9 Wahlfreier Zugriff

Datensätze

fester Größe

Ein wahlfreier Zugriff auf eine Datei kann erfolgen, wenn in einer Datei Da-

tensätze fester Größe stehen. Durch die feste Größe ist gewährleistet, dass

die Position jedes einzelnen Datensatzes eindeutig berechnet werden

kann.

Die Funktion fseek() versetzt den Dateizeiger einer zuvor geöffneten Datei

an die angegebene Position. Damit erreichen Sie direkt jeden Datensatz,

ohne alle vorhergehenden Datensätze lesen zu müssen.

Beim wahlfreien Zugriff können außerdem noch die beiden folgenden

Funktionen nü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 15

Datensätze beinhaltet. Jeder Datensatz besteht aus einer ganzen Zahl. Jede

Zahl wird formatiert in die Datei geschrieben, sodass sie stets die gleiche

Breite hat. Der Formatierung dient die Funktion sprintf().

4496.book Seite 326 Montag, 6. März 2017 10:12 10

7.9 Wahlfreier Zugriff

327

7

Zunächst das Programm, das 15 zufällige Zahlen zwischen 1 und 30000 for-

matiert in eine Datei schreibt. Damit wird eine Datenbank-ähnliche Datei

mit 15 Datensätzen erzeugt. Es folgt das Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

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

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

exit("Datei kann nicht zum Schreiben angelegt werden");

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

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

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

?></body></html>

Listing 7.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 wird dabei als

ganze Zahl interpretiert, ähnlich wie bei der Funktion printf() in der Pro-

grammiersprache C. Eine Zeichenkette der Länge 6 beansprucht 6 Byte

Speicherplatz in einer Datei. Das Ergebnis sieht aus wie in Abbildung 7.10.

Abbildung 7.10 Datei mit Datensätzen gleicher Länge (Ausschnitt)

Zum Lesen in der Datenbank kann der Benutzer in einem Formular die

Nummer des gewünschten Datensatzes eingeben, wie Sie in Abbildung 7.11

sehen.

4496.book Seite 327 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

328

Abbildung 7.11 Eingabe der Datensatznummer

Der Code des Formulars:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

if(!file_exists("beliebig.txt"))exit("Datei kann nicht gefunden werden");

?><p>Treffen Sie eine Auswahl:</p><form action="lesen_beliebig_b.php" method="post"><p>Datensatz: <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 7.9 Datei lesen_beliebig_a.php

filesize() Das Formular wird dynamisch erstellt: Mithilfe der Funktion filesize()

wird die Größe der Datei in Byte (hier 90 Byte) berechnet. Aus diesem 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. So-

mit kann der Benutzer keinen Fehler bei der Auswahl machen. Das PHP-

Programm zur Auswertung der Eingabe:

4496.book Seite 328 Montag, 6. März 2017 10:12 10

7.9 Wahlfreier Zugriff

329

7

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

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

exit("Datei kann nicht zum Lesen geöffnet werden<p>");

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

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

Listing 7.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. Da-

bei muss es sich um den Dateizeiger einer zuvor geöffneten Datei han-

deln. Hier ist es $fp.

� Der zweite Parameter gibt die relative Startposition an, das heißt die An-

zahl der Byte relativ zur absoluten Startposition. Diese Anzahl wird über

die eingegebene Nummer und die Größe eines Datensatzes berechnet.

� Der dritte Parameter gibt die absolute Startposition an. 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 des Da-

teizeigers gelesen. Es wird eine bestimmte Anzahl von Zeichen gelesen.

Diese Anzahl entspricht der Länge der einzulesenden Zeichenkette -1, hier

also 6. Damit ist gewährleistet, dass nur die unmittelbar folgende ganze

Zahl gelesen wird. Die Ausgabe mit der oben ausgewählten Nummer sehen

Sie in Abbildung 7.12.

Abbildung 7.12 Ausgabe des gewünschten Datensatzes

4496.book Seite 329 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

330

7.10 Informationen über Dateien

stat() Die Funktion stat() liefert eine Reihe von Informationen zu einer Datei in

Form eines Felds. Im folgenden Beispiel werden die Feldelemente 7 und 9

ausgegeben. Diese liefern die in Abbildung 7.13 dargestellten Informatio-

nen.

Timestamp Die Zeitangabe wird als Unix-Timestamp geliefert. Sie muss noch in eine

lesbare Form gebracht werden.

Abbildung 7.13 Dateiinformationen

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$fn = "beliebig.txt";$info = stat($fn);

echo "Datei: $fn<br>";echo "Anzahl Byte: $info[7]<br>";echo "Zeitpunkt der letzten Modifizierung: "

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

Listing 7.11 Datei datei_info.php

Im Feld $info wird der Rückgabewert der Funktion stat() gespeichert. Die

Zeitangabe wird mithilfe der Funktion date() umgeformt. Genaue Infor-

mationen über die Formatierungsmöglichkeiten der Funktion date() und

ähnlicher Funktionen finden Sie in Kapitel 9.

7.11 Informationen über ein einzelnes Verzeichnis

Verzeichnis

öffnen und lesen

Bisher wird immer nur eine einzelne Datei bearbeitet, deren Name bekannt

ist. Häufig stellt sich aber die Aufgabe, eine ganze Reihe von Dateien zu be-

4496.book Seite 330 Montag, 6. März 2017 10:12 10

7.11 Informationen über ein einzelnes Verzeichnis

331

7

arbeiten, deren Namen und Anzahl unbekannt sind. Zu diesem Zweck kön-

nen Sie die Verzeichnisfunktionen opendir(), readdir() und closedir()

verwenden. Sie werden im folgenden Programm eingesetzt, um Informa-

tionen über Dateien und Verzeichnisse zu generieren, die sich in einem be-

stimmten Verzeichnis befinden. Zunächst das Programm:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?php

$verz = "D:/EasyPHP/eds-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'>Anzahl<br>Byte</td>";echo "<td>Letzte<br>Modifizierung</td>";

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

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

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 bzw. schreibbar? */echo "<td>";if(is_readable($dname)) echo "R";

4496.book Seite 331 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

332

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 7.12 Datei verzeichnis.php

Im vorliegenden Fall soll der Inhalt des Hauptverzeichnisses des Pakets

EasyPHP ermittelt werden, das bei mir in dem Verzeichnis D:\EasyPHP

installiert ist. Diese Angabe in der ersten PHP-Zeile müssen Sie auf das von

Ihnen gewünschte Verzeichnis anpassen.

chdir() Das genannte Verzeichnis wird mit der Funktion chdir() zum aktuellen

Verzeichnis gemacht. Es folgt die Ausgabe der Tabellenüberschrift.

opendir(), readdir() Die Funktion opendir() dient dem Öffnen eines Zugriffs-Handles für das

aktuelle Verzeichnis. Über dieses Handle liefert die Funktion readdir() je-

weils einen Objektnamen aus dem Verzeichnis. Dabei wird unsortiert vor-

gegangen. Gleichzeitig setzt readdir() einen Zeiger weiter, sodass beim

nächsten Aufruf der nächste Objektname geliefert wird usw. Dies kann so

lange wiederholt werden, wie Objektnamen vorhanden sind.

Funktionen Im vorliegenden Programm wird die Wiederholung mit einer while-Schlei-

fe realisiert. Alle Objekte eines Verzeichnisses werden ermittelt. Für jedes

Objekt werden insgesamt fünf Funktionen zur Lieferung von Informatio-

nen über das Objekt aufgerufen:

� Die Funktionen is_file() und is_dir() sagen aus, ob es sich bei dem

Objekt um eine Datei bzw. ein Verzeichnis handelt.

4496.book Seite 332 Montag, 6. März 2017 10:12 10

7.12 Informationen über den Verzeichnisbaum

333

7

� Die Funktionen is_readable() und is_writeable() sagen aus, ob das Ob-

jekt lesend bzw. schreibend geändert werden kann.

� Die Funktion stat() haben Sie bereits in Abschnitt 7.10 kennengelernt.

closedir()Nach dem Abschluss der while-Schleife wird das Zugriffs-Handle mithilfe

der Funktion closedir() wieder geschlossen. Einen Ausschnitt der Ausgabe

des Programms sehen Sie in Abbildung 7.14.

Abbildung 7.14 Infos über ein Verzeichnis (Ausschnitt)

7.12 Informationen über den Verzeichnisbaum

Zur Ermittlung von Informationen über einen ganzen Verzeichnisbaum,

also über die Unterverzeichnisse und deren Unterverzeichnisse usw., be-

dienen Sie sich der Funktionen aus dem vorherigen Abschnitt und eines re-

kursiven Aufrufs (siehe auch Abschnitt 1.11.5).

getcwd()Diese Funktion wird vom Hauptprogramm aus erstmalig mit einem Start-

verzeichnis aufgerufen. Im vorliegenden Fall soll der Inhalt des Verzeich-

nisses fpdf unterhalb des Hauptverzeichnisses des Pakets EasyPHP ermit-

telt werden, das bei mir in dem Verzeichnis D:\EasyPHP installiert ist. Diese

Angabe müssen Sie im Programm auf das von Ihnen gewünschte Verzeich-

nis anpassen. Innerhalb der Funktion wird mit der Verzeichnisfunktion

getcwd() das aktuelle Arbeitsverzeichnis (englisch: current working directo-

ry, abgekürzt cwd) ermittelt.

4496.book Seite 333 Montag, 6. März 2017 10:12 10

7 Dateien und Verzeichnisse

334

Anschließend werden die Objekte innerhalb dieses Verzeichnisses ermit-

telt. Dabei steht das Kürzel . (ein Punkt) für das aktuelle Verzeichnis und

das Kürzel .. (zwei Punkte) für das übergeordnete Verzeichnis. Für diese

beiden Fälle erfolgt keine Aktion. Wenn es sich bei dem Objekt um eine

Datei handelt, wird diese mit Namen ausgegeben.

Rekursive Funktion Handelt es sich bei dem Objekt um ein Unterverzeichnis,

� wird in dieses Verzeichnis gewechselt,

� die Funktion ruft sich rekursiv auf, und

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

Mit dieser Methode gelingt die Bearbeitung des gesamten Verzeichnis-

baums:

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><table border="1"><?php

function objektliste(){

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

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

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

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

/* 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>";}

4496.book Seite 334 Montag, 6. März 2017 10:12 10

7.12 Informationen über den Verzeichnisbaum

335

7

}closedir($handle);

}

/* Startverzeichnis */chdir("D:/EasyPHP/eds-www/fpdf");

/* Erster Aufruf der Funktion */objektliste();

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

Listing 7.13 Datei verzeichnisbaum.php

Die Ausgabe des Programms sehen Sie in Abbildung 7.15.

Abbildung 7.15 Infos über den Verzeichnisbaum (Ausschnitt)

In der linken Spalte der Tabelle wird der Name des Verzeichnisses ausgege-

ben, in der rechten Spalte der Name des Objekts.

4496.book Seite 335 Montag, 6. März 2017 10:12 10

Auf einen Blick

Auf einen Blick

1 PHP-Programmierkurs ....................................................................... 21

2 Daten senden und auswerten ......................................................... 133

3 Datenbanken mit MySQL .................................................................. 185

4 Objektorientierung in PHP ............................................................... 247

5 Fehler behandeln, Sicherheit erhöhen ......................................... 291

6 Zeichenketten ....................................................................................... 299

7 Dateien und Verzeichnisse ............................................................... 313

8 Felder ....................................................................................................... 337

9 Datum und Zeit .................................................................................... 371

10 Mathematische Funktionen ............................................................ 395

11 Sessions und Cookies ......................................................................... 415

12 Datenbanken mit SQLite3 und PDO .............................................. 445

13 XML ........................................................................................................... 461

14 Ajax ........................................................................................................... 473

15 Grafiken programmieren .................................................................. 495

16 PDF-Dateien erstellen ........................................................................ 521

17 Automatisierter E-Mail-Versand .................................................... 541

18 Beispielprojekte ................................................................................... 547

4496.book Seite 3 Montag, 6. März 2017 10:12 10

Inhalt

5

Inhalt

1 PHP-Programmierkurs 21

1.1 Einbettung von PHP in HTML .................................................................. 21

1.2 Kommentare ................................................................................................... 24

1.3 Variablen, Datentypen und Operatoren ............................................ 25

1.3.1 Namen ............................................................................................ 26

1.3.2 Variablen für Zahlen .................................................................. 27

1.3.3 Rechenoperatoren für Zahlen ................................................ 28

1.3.4 Variablen und Operatoren für Zeichenketten .................. 30

1.3.5 Konstanten ................................................................................... 33

1.3.6 Referenzen .................................................................................... 34

1.4 Einfache Formularauswertungen .......................................................... 35

1.4.1 Eingabeformular ......................................................................... 35

1.4.2 Auswertung mit $_POST .......................................................... 37

1.4.3 Umwandlung von Zeichenketten in Zahlen ...................... 38

1.4.4 Umwandlung von Eingaben ................................................... 40

1.5 Verzweigungen ............................................................................................. 42

1.5.1 if-Anweisung ................................................................................ 43

1.5.2 if/else-Anweisung ...................................................................... 44

1.5.3 Logische Operatoren ................................................................. 48

1.5.4 Rangordnung der Operatoren ................................................ 50

1.5.5 Mehrfache Verzweigung .......................................................... 51

1.5.6 switch/case-Anweisung ........................................................... 53

1.6 Mehr über Verzweigungen ...................................................................... 55

1.6.1 HTML in Verzweigungsblöcken ............................................. 55

1.6.2 Wahrheitswerte .......................................................................... 56

1.6.3 Ternärer Operator ?: .................................................................. 58

1.6.4 Spaceship-Operator <=> .......................................................... 59

1.6.5 Existenz einer Variablen ........................................................... 60

1.6.6 Typ prüfen ..................................................................................... 62

1.6.7 Koaleszenzoperator ?? .............................................................. 64

1.7 Schleifen ........................................................................................................... 65

1.7.1 for-Schleife .................................................................................... 65

4496.book Seite 5 Montag, 6. März 2017 10:12 10

Inhalt

6

1.7.2 Beispiele für for-Schleifen ....................................................... 67

1.7.3 Geschachtelte for-Schleifen .................................................... 68

1.7.4 Schleifen und Tabellen ............................................................. 69

1.7.5 while-Schleife .............................................................................. 72

1.7.6 do-while-Schleife ........................................................................ 74

1.7.7 Schleifenabbruch mit break .................................................... 75

1.7.8 Schleifenfortsetzung mit continue ...................................... 76

1.8 Funktionen ...................................................................................................... 77

1.8.1 Ein erstes Beispiel ....................................................................... 78

1.8.2 Definition, Aufruf und Funktionstypen ............................... 79

1.8.3 Funktionen mit einem Parameter ......................................... 80

1.8.4 Funktionen mit mehreren Parametern ............................... 83

1.8.5 Rückgabewert einer Funktion ................................................ 86

1.8.6 Kopie und Referenz .................................................................... 88

1.8.7 Gültigkeitsbereich von Variablen .......................................... 90

1.9 Behandlung von Fehlern ........................................................................... 93

1.9.1 Ohne Ausnahmebehandlung ................................................. 93

1.9.2 Mit Ausnahmebehandlung ..................................................... 94

1.10 Felder .................................................................................................................. 97

1.10.1 Numerisch indizierte Felder .................................................... 97

1.10.2 Assoziative Felder ....................................................................... 100

1.11 Mehr über Funktionen ............................................................................... 103

1.11.1 Typhinweise ................................................................................. 104

1.11.2 Variable Parameterlisten ......................................................... 108

1.11.3 Parameter entpacken ................................................................ 111

1.11.4 Optionale Parameter ................................................................. 112

1.11.5 Rekursive Funktionen ................................................................ 113

1.11.6 include-Anweisung .................................................................... 115

1.11.7 Generatoren ................................................................................. 118

1.12 Beispiele ............................................................................................................ 119

1.12.1 Entwicklung eines Programms .............................................. 119

1.12.2 Formatierung von Zahlen ........................................................ 120

1.12.3 Geldanlage .................................................................................... 122

1.12.4 Steuertabelle ................................................................................ 124

1.12.5 Bestimmung des Ostersonntags ........................................... 127

4496.book Seite 6 Montag, 6. März 2017 10:12 10

Inhalt

7

2 Daten senden und auswerten 133

2.1 Textelemente ................................................................................................. 133

2.1.1 Einzeilige Texteingabefelder .................................................. 134

2.1.2 Mehrzeilige Texteingabefelder .............................................. 136

2.1.3 Passworteingabefeld, verstecktes Element ....................... 138

2.2 Auswahlelemente ........................................................................................ 141

2.2.1 Radiobutton-Gruppe ................................................................. 141

2.2.2 Einfaches Auswahlmenü ......................................................... 144

2.2.3 Kontrollkästchen ......................................................................... 145

2.2.4 Mehrfaches Auswahlmenü ..................................................... 147

2.3 Aktionselemente .......................................................................................... 149

2.3.1 Absenden und Zurücksetzen .................................................. 150

2.4 Weitere Möglichkeiten .............................................................................. 153

2.4.1 Auswertung in anderem Frame ............................................. 153

2.4.2 Felder von Formularelementen ............................................. 155

2.4.3 Formular und Programm in einer Datei .............................. 158

2.4.4 Submit über Hyperlink, mit CSS ............................................ 160

2.4.5 Daten an Formularziel anhängen ......................................... 163

2.4.6 Daten an Hyperlink-Ziel anhängen ...................................... 166

2.4.7 Dateien auf den Server hochladen ....................................... 168

2.5 Beispiele ............................................................................................................ 171

2.5.1 Grundrechenarten ...................................................................... 171

2.5.2 Pizzabestellung ........................................................................... 174

2.5.3 Kopfrechnen ................................................................................. 177

2.6 PHP-Programme publizieren ................................................................... 183

3 Datenbanken mit MySQL 185

3.1 MySQL und phpMyAdmin ......................................................................... 186

3.1.1 phpMyAdmin ............................................................................... 187

3.1.2 Beispieldatenbank und -tabelle ............................................. 187

3.1.3 Datenbank erzeugen ................................................................. 188

3.1.4 Tabelle erzeugen ......................................................................... 188

3.1.5 Primärschlüssel erzeugen ........................................................ 189

4496.book Seite 7 Montag, 6. März 2017 10:12 10

Inhalt

8

3.1.6 Datensätze eintragen ............................................................... 190

3.2 PHP und MySQL ............................................................................................. 192

3.2.1 Verbindung aufnehmen, Datensätze anzeigen ............... 192

3.2.2 Datensätze auswählen ............................................................. 195

3.2.3 Ausgabe in eine HTML-Tabelle .............................................. 200

3.2.4 Auswahl von Daten über ein Suchformular ...................... 202

3.2.5 Datensätze erzeugen ................................................................ 210

3.2.6 Ändern mehrerer Datensätze ................................................. 214

3.2.7 Ändern eines bestimmten Datensatzes ............................. 214

3.2.8 Datensätze löschen .................................................................... 220

3.2.9 Benutzeroberfläche mit JavaScript und CSS ..................... 222

3.2.10 Ein Datenbankbrowser ............................................................. 230

3.3 Abfragen über mehrere Tabellen .......................................................... 230

3.3.1 Zweck der Datenbank ............................................................... 230

3.3.2 Datenbankmodell ....................................................................... 231

3.3.3 Verknüpfungen erstellen ......................................................... 231

3.3.4 Inhalt der Datenbank ................................................................ 232

3.3.5 Alle Personen ............................................................................... 233

3.3.6 Anzahl der Kunden ..................................................................... 234

3.3.7 Alle Kunden mit allen Projekten ............................................ 234

3.3.8 Alle Personen mit allen Projektzeiten .................................. 235

3.3.9 Alle Personen mit Zeitsumme ................................................ 236

3.3.10 Alle Projekte mit allen Personenzeiten ............................... 237

3.3.11 Alle Projekte mit Zeitsumme .................................................. 238

3.3.12 JOIN oder WHERE ....................................................................... 238

3.4 MySQL-Datenbanken publizieren ......................................................... 239

3.4.1 Verbindung aufnehmen ........................................................... 240

3.4.2 Export einer Tabelle ................................................................... 241

3.4.3 Tabelle und Daten per Programm erzeugen ..................... 244

4 Objektorientierung in PHP 247

4.1 Was ist objektorientierte Programmierung? ................................... 247

4.2 Klassen und Objekte ................................................................................... 248

4.2.1 Sichtbarkeit ................................................................................... 250

4496.book Seite 8 Montag, 6. März 2017 10:12 10

Inhalt

9

4.2.2 Anwendung der Klasse ............................................................. 251

4.3 Konstruktor und Ausgabe ......................................................................... 253

4.4 Destruktor ........................................................................................................ 255

4.5 Optionale Parameter .................................................................................. 257

4.6 Konstanten und statische Elemente .................................................... 260

4.7 Kopie und Referenz ..................................................................................... 262

4.8 Typhinweise .................................................................................................... 266

4.9 Objekte und Felder ...................................................................................... 267

4.10 Vererbung ........................................................................................................ 270

4.10.1 Grundlagen ................................................................................... 270

4.10.2 Konstruktoren bei Vererbung ................................................. 274

4.11 Schnittstellen ................................................................................................. 275

4.11.1 Eigene Schnittstellen ................................................................. 275

4.11.2 Iterator-Schnittstelle ................................................................. 277

4.12 Namensräume ............................................................................................... 279

4.13 Serialisierung .................................................................................................. 282

4.14 Beispiel »Scheck« .......................................................................................... 285

4.15 Beispiel »Kopfrechnen« ............................................................................. 290

5 Fehler behandeln, Sicherheit erhöhen 291

5.1 Anzeige von Fehlern .................................................................................... 291

5.2 Dauerhafte Konfiguration der Anzeige von Fehlern .................... 291

5.3 Temporäre Konfiguration der Anzeige von Fehlern ..................... 294

5.4 Angriffe und Sicherheit .............................................................................. 295

5.4.1 Programmpakete ........................................................................ 295

5.4.2 Sichtbare Daten .......................................................................... 295

5.4.3 Sessions .......................................................................................... 296

5.4.4 Variablen ....................................................................................... 297

5.4.5 Eingaben prüfen ......................................................................... 297

5.4.6 Passwörter .................................................................................... 298

4496.book Seite 9 Montag, 6. März 2017 10:12 10

Inhalt

10

6 Zeichenketten 299

6.1 Länge und Umwandlungsfunktionen ................................................. 299

6.2 Zeichenketten und Felder ......................................................................... 301

6.3 Teilzeichenketten ......................................................................................... 303

6.4 Suchen nach Position .................................................................................. 305

6.5 Vergleich von Zeichenketten .................................................................. 306

6.6 Codierung von Zeichen .............................................................................. 308

6.7 Verschlüsselung ............................................................................................ 309

7 Dateien und Verzeichnisse 313

7.1 Dateitypen ....................................................................................................... 313

7.2 Schreiben einer sequenziellen Datei ................................................... 314

7.3 Lesen einer sequenziellen Datei ............................................................ 317

7.4 Verbessertes Lesen einer Datei .............................................................. 319

7.5 Vereinfachtes Lesen einer Datei ............................................................ 320

7.6 Schreiben einer CSV-Datei ........................................................................ 321

7.7 Lesen einer CSV-Datei ................................................................................. 323

7.8 Ein einfacher Webcounter ........................................................................ 325

7.9 Wahlfreier Zugriff ........................................................................................ 326

7.10 Informationen über Dateien ................................................................... 330

7.11 Informationen über ein einzelnes Verzeichnis ............................... 330

7.12 Informationen über den Verzeichnisbaum ....................................... 333

8 Felder 337

8.1 Feld kopieren .................................................................................................. 337

8.2 Feld als Parameter ........................................................................................ 338

4496.book Seite 10 Montag, 6. März 2017 10:12 10

Inhalt

11

8.3 Feld als Rückgabewert ............................................................................... 339

8.4 Zufällige Werte aus einem Feld ............................................................. 340

8.5 Typhinweise .................................................................................................... 342

8.6 foreach-Schleife mit Referenzen ........................................................... 343

8.7 Operationen für numerisch indizierte Felder .................................. 344

8.7.1 Erzeugung mit der Funktion range() .................................... 344

8.7.2 Sortierung ..................................................................................... 346

8.7.3 Wert und Position der Extrema ............................................. 347

8.7.4 Statistische Auswertung .......................................................... 348

8.7.5 Feld verändern ............................................................................. 352

8.8 Sortierung eines assoziativen Felds ..................................................... 354

8.9 Zweidimensionale Felder .......................................................................... 355

8.9.1 Zweidimensionale numerische Felder ................................ 356

8.9.2 Zweidimensionale gemischte Felder ................................... 359

8.9.3 Zweidimensionale assoziative Felder .................................. 362

8.10 Benutzerdefinierte Sortierung ............................................................... 365

8.11 list-Anweisung ............................................................................................... 368

9 Datum und Zeit 371

9.1 Zeit ermitteln und ausgeben ................................................................... 371

9.2 Zeit formatiert ausgeben .......................................................................... 372

9.3 Zeitangabe prüfen ....................................................................................... 376

9.4 Absolute Zeitangabe erzeugen .............................................................. 377

9.5 Relative Zeitangabe erzeugen ................................................................ 378

9.6 Mit Zeitangaben rechnen ......................................................................... 380

9.7 Zeitbereich auswählen ............................................................................... 382

9.8 Zeitstempel in Datenbanken .................................................................. 383

9.9 Beispiel Feiertagsberechnung ................................................................. 385

9.10 Kopfrechnen mit Zeitmessung ............................................................... 389

4496.book Seite 11 Montag, 6. März 2017 10:12 10

Inhalt

12

10 Mathematische Funktionen 395

10.1 Ganze Zahlen und Fließkommazahlen ............................................... 395

10.2 Exponentialoperator ** .............................................................................. 397

10.3 PHP als Taschenrechner ............................................................................. 398

10.4 Umwandlung in ganze Zahl ..................................................................... 399

10.5 Ganzzahlige Division .................................................................................. 400

10.6 Extremwerte ................................................................................................... 401

10.7 Winkelfunktionen ........................................................................................ 402

10.8 Zufallszahlen .................................................................................................. 404

10.9 Mischen ............................................................................................................. 406

10.9.1 Mischen mit eigenem Algorithmus ...................................... 406

10.9.2 Mischen mit shuffle() ................................................................ 407

10.10 Stellenwertsysteme ..................................................................................... 409

10.11 Bit-Operatoren ............................................................................................... 411

11 Sessions und Cookies 415

11.1 Session-Management ................................................................................. 416

11.2 Beispiel für Sessions: Zugriffszähler .................................................... 416

11.3 Beispiel für Sessions: geschützte Website ........................................ 418

11.3.1 Ablauf ............................................................................................. 418

11.3.2 Login-Seite .................................................................................... 420

11.3.3 Intro-Seite ..................................................................................... 421

11.4 Beispiel für Sessions: Webshop .............................................................. 423

11.4.1 Ablauf ............................................................................................. 424

11.4.2 Startseite ....................................................................................... 426

11.4.3 include-Datei ................................................................................ 427

11.4.4 Tabelle der Artikel ....................................................................... 429

11.4.5 Warenkorb .................................................................................... 431

11.4.6 Kasse ............................................................................................... 435

11.5 Cookies .............................................................................................................. 435

4496.book Seite 12 Montag, 6. März 2017 10:12 10

Inhalt

13

11.6 Beispiel für Cookies: Besuch .................................................................... 437

11.7 Beispiel für Cookies: Adressspeicherung ........................................... 440

12 Datenbanken mit SQLite3 und PDO 445

12.1 SQLite3 .............................................................................................................. 446

12.2 Datenbankdatei, Tabelle und Datensätze erzeugen .................... 446

12.3 Abfrage der Datensätze ............................................................................. 448

12.4 Benutzeroberfläche mit JavaScript und CSS .................................... 450

12.5 Beispiel »Kopfrechnen« ............................................................................. 455

12.6 PDO ..................................................................................................................... 456

13 XML 461

13.1 Einlesen eines einzelnen Objekts .......................................................... 461

13.2 Einlesen mehrerer Objekte ....................................................................... 464

13.3 Zugriff auf Attribute ................................................................................... 467

13.4 Interne XML-Daten ...................................................................................... 469

13.5 Speicherung von Objekten ....................................................................... 470

14 Ajax 473

14.1 Hallo Ajax ......................................................................................................... 474

14.2 Parameter senden ........................................................................................ 476

14.3 XML-Datei lesen ............................................................................................ 479

14.3.1 Einzelnes Objekt .......................................................................... 479

14.3.2 Sammlung von Objekten ......................................................... 481

14.4 JSON-Datei lesen ........................................................................................... 483

14.4.1 Einzelnes Objekt .......................................................................... 484

4496.book Seite 13 Montag, 6. März 2017 10:12 10

Inhalt

14

14.4.2 Sammlung von Objekten ......................................................... 486

14.4.3 Decodieren von JSON-Daten .................................................. 488

14.5 Zugriff auf MySQL-Datenbank ............................................................... 490

14.6 Weitere Ereignisse ....................................................................................... 492

15 Grafiken programmieren 495

15.1 Installation testen ........................................................................................ 495

15.2 Grafik anzeigen ............................................................................................. 496

15.2.1 Grafik speichern .......................................................................... 497

15.2.2 Grafik unmittelbar anzeigen .................................................. 498

15.3 Texte anzeigen .............................................................................................. 500

15.3.1 Text mit internen Fonts ............................................................ 500

15.3.2 Text mit TrueType-Fonts .......................................................... 501

15.4 Bilder anzeigen .............................................................................................. 503

15.4.1 Bilder aus Dateien laden .......................................................... 503

15.4.2 Bilder spiegeln ............................................................................. 504

15.4.3 Bildausschnitte erstellen ......................................................... 505

15.4.4 Bilder aus Dateien ineinander einbetten ........................... 506

15.5 Zeichnungen erzeugen ............................................................................... 508

15.5.1 Ellipsen und Bogen ..................................................................... 508

15.5.2 Rechtecke und Polygone .......................................................... 510

15.5.3 Linien und Pixel ........................................................................... 511

15.5.4 Füllen mit Farbe .......................................................................... 513

15.6 Beispielprojekte ............................................................................................ 514

15.6.1 Darstellung eines Aktienkurses ............................................. 515

15.6.2 Erstellung eines CAPTCHAS ..................................................... 517

16 PDF-Dateien erstellen 521

16.1 Installation ...................................................................................................... 521

16.2 PDF-Dokument erzeugen .......................................................................... 521

4496.book Seite 14 Montag, 6. März 2017 10:12 10

Inhalt

15

16.3 Text in Zelle ..................................................................................................... 523

16.4 Fließtext, Schriftparameter ..................................................................... 525

16.5 Tabelle ............................................................................................................... 527

16.6 Kopf- und Fußzeile ....................................................................................... 530

16.7 Bild aus Datei laden ..................................................................................... 532

16.8 Hyperlinks ........................................................................................................ 533

16.9 Linie, Rechteck, Position ............................................................................ 537

17 Automatisierter E-Mail-Versand 541

17.1 Eine erste E-Mail ........................................................................................... 541

17.2 Eine E-Mail mit Header .............................................................................. 542

17.3 Ein E-Mail-Formular ..................................................................................... 542

17.4 E-Mails mit PHPMailer ................................................................................ 544

18 Beispielprojekte 547

18.1 Projekt »Chat« ............................................................................................... 547

18.1.1 Frame-Aufbau .............................................................................. 547

18.1.2 CSS-Formatierung ...................................................................... 549

18.1.3 Ausgabe, Version »Textdatei« ................................................ 549

18.1.4 Darstellung der Textdatei ........................................................ 550

18.1.5 Ausgabe, Version »Datenbank« ............................................. 551

18.1.6 Darstellung der Datenbanktabellen .................................... 552

18.1.7 Eingabe, Head .............................................................................. 553

18.1.8 Eingabe, PHP zum Speichern, Version »Textdatei« ......... 554

18.1.9 Eingabe, PHP zum Speichern, Version »Datenbank« ...... 555

18.1.10 Eingabe, Formular ...................................................................... 556

18.1.11 Mögliche Erweiterungen .......................................................... 557

18.2 Projekt »Blog« ................................................................................................ 558

18.2.1 Aufbau der Datenbank ............................................................. 560

4496.book Seite 15 Montag, 6. März 2017 10:12 10

Inhalt

16

18.2.2 Blog für den Betrachter, Programmcode ............................ 561

18.2.3 Blog für den Betreiber, Programmcode ............................... 563

18.3 Projekt »Forum« ........................................................................................... 567

Anhang

A HTML für PHP ................................................................................................. 569

A.1 Die erste Seite .................................................................................................. 570

A.2 Formulare .......................................................................................................... 571

A.3 Tabellen .............................................................................................................. 574

A.4 Hyperlinks ......................................................................................................... 575

B Installationen und Hilfestellungen ...................................................... 577

B.1 Installationen unter Windows ................................................................... 577

B.1.1 Installation des Pakets EasyPHP ............................................ 578

B.1.2 Installation des Pakets XAMPP ............................................... 581

B.1.3 FTP-Client FileZilla ...................................................................... 583

B.2 Installation unter Ubuntu Linux ................................................................ 584

B.3 Installation für macOS auf dem Mac ....................................................... 586

B.4 Windows – einige Tastenkombinationen .............................................. 587

B.5 Unix-Befehle ..................................................................................................... 588

B.5.1 Inhalt eines Verzeichnisses ..................................................... 588

B.5.2 Verzeichnis anlegen, wechseln und löschen ..................... 589

B.5.3 Datei kopieren, verschieben und löschen .......................... 589

Index .................................................................................................................................... 591

4496.book Seite 16 Montag, 6. März 2017 10:12 10

Index

591

Index

– (minus) ........................................................................ 28

-- (Verminderung) ...................................................... 67

^ (bitweise Exklusiv-Oder) .................................... 412

__clone()....................................................................... 263

__construct() .............................................................. 253

__destruct() ................................................................. 255

__toString() ................................................................. 253

:: (Klasse) ...................................................................... 272

! (logisches Nicht) ....................................................... 50

!= (ungleich) .................................................................. 43

!== (ungleich, mit Typ) .................................... 56, 306

? (URL).................................................................. 163, 295

?: (ternär) ........................................................................ 58

?? (Koaleszenz) ............................................................. 64

?> (einbetten)................................................................ 21

. (Verkettung)................................................................ 30

. (Verzeichnis) ............................................................. 588

.. (Verzeichnis) ............................................................ 588

.= (Anhängen an Zeichenketten) .......................... 30

… (Parameterfeld)...................................................... 111

' (Zeichenkette) ............................................................ 30

{ } (Anweisungsblock) ................................................ 44

{nb} (Platzhalter) ....................................................... 532

@ (Silence) ................................................ 296, 315, 550

* (mal) .............................................................................. 28

** (hoch) ................................................................. 28, 397

/ (durch) .......................................................................... 28

/* (Kommentar) ........................................................... 24

// (Kommentar) ........................................................... 24

\\ (Zeilenumbruch) .................................................. 315

& (bitweise Und) ....................................................... 412

& (Referenz) .................................................................. 34

& (URL) ................................................................ 163, 295

&& (logisches Und) .................................................... 49

% (Modulo) .................................................................... 28

% (Platzhalter) ............................................................ 196

+ (plus)............................................................................. 28

++ (Erhöhung) .............................................................. 67

< (kleiner) .............................................................. 43, 195

<?php ............................................................................... 21

<< (bitweise Links-Shift)......................................... 412

<= (kleiner gleich) .............................................. 43, 195

<=> (Spaceship) ............................................................ 59

<> (ungleich) ............................................................... 195

= (gleich, SQL) ............................................................. 195

== (gleich, PHP)............................................................. 43

=== (gleich, mit Typ) ................................................... 56

=> (Feld) ........................................................................ 101

> (größer) .............................................................. 43, 195

>= (größer gleich)............................................... 43, 195

>> (bitweise Rechts-Shift) ...................................... 412

| (bitweise Oder) ........................................................ 412

|| (logisches Oder) ........................................................ 48

~ (bitweise Inversion) ............................................. 412

$_COOKIE .................................................................... 436

$_FILES ................................................................ 170, 565

$_GET................................................ 163, 295, 430, 479

$_POST ................................................................ 297, 421

$_SESSION ................................................................... 415

0 (Präfix) ...................................................................... 409

0b (Präfix).................................................................... 409

0x (Präfix).................................................................... 409

127.0.0.1 ......................................................................... 385

A

A_I................................................................ 309, 384, 560

Absenden .............................................................. 36, 150

accdb.............................................................................. 459

action................................................................................ 36

AddAddress() .............................................................. 545

AddAttachment()...................................................... 545

AddBCC() ...................................................................... 545

AddCC() ......................................................................... 545

Addition .......................................................................... 28

AddLink() ..................................................................... 535

AddPage()..................................................................... 523

AddReplyTo().............................................................. 545

Ajax ................................................................................ 473

JSON-Feld................................................................. 486

JSON-Objekt ........................................................... 484

Parameter ............................................................... 476

Aktionsabfrage .......................................................... 211

Aktionselement......................................................... 149

AliasNbPages() ........................................................... 532

align .................................................................................. 70

AltBody ......................................................................... 545

4496.book Seite 591 Montag, 6. März 2017 10:12 10

Index

592

ALTER TABLE .............................................................. 242

AND ................................................................................ 196

Angriff ........................................................................... 295

Anmeldung ................................................................. 418

Anweisungsblock........................................ 44, 67, 102

Apache............................................................................. 23

Installation ............................................................. 577

append .......................................................................... 315

array (Typhinweis) ................................................... 343

array_key_exists() .................................................... 289

array_pop().................................................................. 352

array_push() ............................................................... 352

array_rand() ................................................................ 340

array_shift() ................................................................ 352

array_unshift()........................................................... 352

array() ..................................................................... 98, 101

arsort()........................................................................... 354

as ..................................................................................... 102

ASC.................................................................................. 196

asort() ............................................................................ 354

asXML() ......................................................................... 470

Asynchronous JavaScript and XML ................... 473

Aufhängen ..................................................................... 68

Ausnahmebehandlung ............................................ 93

Ausrichtung .................................................................. 70

Auswahlelement ....................................................... 141

Auswahlmenü............................................................ 209

einfaches ................................................................. 144

mehrfaches ............................................................. 147

AUTO_INCREMENT............................... 309, 384, 560

B

base_convert() ........................................................... 410

Basis ............................................................................... 398

Basisklasse ......................................................... 247, 271

Bedingung ..................................................................... 42

Benutzeroberfläche ................................................. 222

Bild

Ausschnitt ............................................................... 505

spiegeln .................................................................... 504

bindec() ......................................................................... 409

Bit-Operator ................................................................ 411

Blog................................................................................. 558

Body ............................................................................... 545

body ............................................................................... 570

Bogenmaß ................................................................... 403

BOM ............................................................................... 104

bool (Typhinweis)..................................................... 105

boolean ............................................................................ 56

Boolesche Variable...................................................... 56

boolval()........................................................................... 56

border............................................................................ 574

br ..................................................................................... 573

break .......................................................................... 54, 75

Byte Order Mark........................................................ 104

C

Cache ............................................................................. 296

Call-by-Reference......................................................... 88

Call-by-Value ................................................................. 88

CAPTCHA ........................................................... 495, 517

case .................................................................................... 54

catch.................................................................................. 93

cd..................................................................................... 589

ceil()................................................................................ 400

Cell() ............................................................ 524, 527, 536

Chat ................................................................................ 547

chdir() ............................................................................ 332

Checkbox ..................................................................... 145

checkdate() .................................................................. 376

checked ............................................................... 142, 145

chr() ................................................................................ 308

class ................................................................................ 249

Eigenschaft ............................................................. 280

Clientprogramm .......................................................... 19

clone .............................................................................. 263

close()

SQLite3 ..................................................................... 448

closedir()............................................................. 331, 333

Code einrücken .................................................. 23, 571

Codierung ....................................................................... 23

cols.................................................................................. 136

confirm() ...................................................................... 225

connect.inc.php......................................................... 240

const ................................................................................. 33

Container ..................................................................... 570

continue .......................................................................... 76

Cookies ............................................................... 415, 435

anzeigen .................................................................. 438

Lebensdauer........................................................... 296

copy() ............................................................................. 170

COUNT() ....................................................................... 234

4496.book Seite 592 Montag, 6. März 2017 10:12 10

Index

593

count() ........................................................ 111, 149, 170

cp ..................................................................................... 590

CREATE TABLE............................................................ 242

CSS ............................................................... 153, 161, 222

externe Datei ......................................................... 161

Formatvorlage ...................................................... 161

CSV, Format................................................................. 321

CSV-Datei ..................................................................... 301

lesen .......................................................................... 323

schreiben ................................................................. 322

current()........................................................................ 277

D

date() ........................................................... 330, 372, 377

Datei

Angabe der Position ........................................... 326

anlegen .................................................................... 589

binärer Zugriff ....................................................... 314

Ende ermitteln....................................................... 317

Existenz prüfen ..................................................... 284

formatierte Ausgabe .......................................... 326

Größe feststellen................................................... 328

Informationen ermitteln.......................... 330, 331

kopieren ................................................................... 590

Lese-/Schreibposition festlegen ..................... 326

lesen .......................................................................... 317

letzte Zeile ............................................................... 320

löschen ..................................................................... 590

öffnen ....................................................................... 315

schließen.................................................................. 316

schreiben ................................................................. 314

sequenzieller Zugriff ........................................... 313

umbenennen .......................................................... 590

vereinfachtes Lesen ............................................. 320

verschieben............................................................. 590

versteckt .................................................................. 589

wahlfreier Zugriff ........................................ 313, 326

Zeichen ausgeben ................................................ 316

Zeichen einlesen ................................................... 318

Zeilenende abschneiden .................................... 320

zurückspulen ......................................................... 326

Dateityp ........................................................................ 313

Dateizeiger .................................................................. 315

Datenbank ................................................................... 185

Abfrage..................................................................... 194

Ajax ........................................................................... 490

Datenbank (Forts.)

auswählen .............................................................. 393

Datensatz speichern ........................................... 194

erzeugen .................................................................. 188

hochladen ............................................................... 239

SQL kontrollieren ................................................. 197

Datenbankbrowser .................................................. 230

Datenbankmodell .................................................... 231

Datenbankserver ...................................................... 186

Verbindung aufnehmen ........................... 194, 240

Datenfeld ..................................................................... 185

Datensatz ..................................................................... 185

ändern ...................................................................... 214

auswählen ..................................................... 194, 195

erzeugen .................................................................. 210

gruppieren .............................................................. 237

identifizieren.......................................................... 189

löschen ..................................................................... 220

nummerieren................................................ 310, 384

zerlegen.................................................................... 324

Datentyp ......................................................................... 25

kontrollieren ................................................. 104, 342

Datentyphinweise ....................................................... 26

Datum und Zeit ......................................................... 371

Differenz ............................................... 378, 380, 381

erzeugen ......................................................... 377, 378

formatieren ............................................................ 372

Gültigkeit prüfen.................................................. 376

Systemzeit ermitteln .......................................... 371

decbin() ......................................................................... 409

dechex() ........................................................................ 409

declare........................................................................... 104

decoct() ......................................................................... 409

default .............................................................................. 54

deg2rad() ...................................................................... 403

DELETE ................................................................ 221, 226

DESC............................................................................... 196

Deserialisierung ........................................................ 282

Destruktor ................................................................... 255

Dezimalsystem.......................................................... 409

Dezimaltrennzeichen ................................................ 27

display_errors ............................................................ 292

Division ........................................................................... 28

durch 0 ................................................................. 30, 94

ganzzahlig .............................................................. 400

Rest ............................................................................... 28

do while ........................................................................... 74

document .......................................................... 152, 481

4496.book Seite 593 Montag, 6. März 2017 10:12 10

Index

594

DOCUMENT_ROOT .................................................. 459

Dollarzeichen ............................................................... 26

doubleval()............................................................ 39, 350

DROP TABLE................................................................ 243

Dualsystem ................................................................. 409

Dump............................................................................. 241

E

e (Eulersche Zahl) ...................................................... 398

e (Exponentialzahl) .................................................... 28

E_ALL ............................................................................. 292

EasyPHP................................................................. 20, 186

Installation ............................................................. 578

echo .................................................................................. 22

Eigenschaft .................................................................. 247

statische................................................................... 260

Eingabe ........................................................................... 35

Eingabefeld, Passwort ............................................. 138

Eingabemaske ............................................................ 159

Einsatzbereich.............................................................. 19

Element, verstecktes .................. 138, 163, 218, 227

else .................................................................................... 45

E-Mail

automatisieren ..................................................... 541

HTML-Mail ............................................................. 541

mit Anhang ............................................................ 541

enctype ......................................................................... 169

endif ................................................................................. 56

Endlosschleife .............................................................. 68

Ereignis ......................................................................... 492

Ergebniskennung ..................................................... 194

Erlernbarkeit................................................................. 18

error_log ...................................................................... 293

error_reporting ......................................................... 292

Eulersche Zahl ............................................................ 398

eval()............................................................................... 486

Event-Handler............................................................ 152

Exception Handling................................................... 93

exec()

PDO............................................................................ 459

SQLite3 ..................................................................... 447

exit() ..................................................................... 284, 315

Exklusiv-Oder, bitweise.......................................... 412

exp() ............................................................................... 398

explode() ......................................... 170, 289, 301, 324

Exponent...................................................................... 398

Exponentialoperator........................................ 28, 397

Exponentialrechnung ............................................ 398

Exponentialzahl ........................................................... 28

extends ......................................................................... 272

Extension

GD-Bibliothek ........................................................ 495

php_pdo_mysql.dll ............................................. 458

php_pdo_odbc.dll................................................ 458

php_pdo_sqlite.dll............................................... 458

php_sqlite3.dll ....................................................... 445

extension_loaded()........................................ 445, 496

F

Falsch................................................................................ 42

false ................................................................................ 152

fclose() ........................................................................... 316

Fehler............................................................................. 291

vermeiden ............................................................... 119

Feiertag ......................................................................... 128

berechnen ............................................................... 385

Feld .................................................................................... 97

als Parameter ........................................................ 338

als Rückgabewert................................................. 339

assoziativ ................................................ 37, 100, 354

benutzerdefiniert sortieren .............................. 365

eindimensional ........................................................ 97

Element entfernen ............................................... 352

Element hinzufügen............................................ 352

erzeugen .................................................. 99, 103, 344

Extrema ermitteln ............................................... 347

gemischt .................................................................. 355

in Klasse................................................................... 267

kopieren ................................................................... 337

mehrdimensional ....................................... 337, 355

numerisch indiziert ...................................... 97, 344

Operation ....................................................... 344, 354

Referenz .......................................................... 338, 339

Schlüssel .................................................................. 100

Schreibweise........................................................... 102

sortieren .................................................................. 346

statistische Auswertung.................................... 348

von Formularelementen .......................... 148, 155

von Objekten ......................................................... 267

Wert ........................................................................... 101

zweidimensional assoziativ ............................ 362

zweidimensional gemischt .............................. 359

4496.book Seite 594 Montag, 6. März 2017 10:12 10

Index

595

Feld (Forts.)

zweidimensional numerisch ........................... 356

feof() ............................................................................... 317

fetchArray(), SQLite3Result................................... 449

fgets() ............................................................................. 318

file ................................................................................... 169

file_exists() .................................................................. 284

file_get_contents() ................................................... 284

file_put_contents() ........................................ 284, 470

file() ................................................................................ 320

filesize()......................................................................... 328

FileZilla.......................................................................... 583

finally............................................................................... 96

Firefox, Datenschutz ............................................... 437

firstChild ...................................................................... 481

Fließkommazahl ....................................................... 395

float (Typhinweis)..................................................... 105

floor() ................................................................... 129, 400

Footer().......................................................................... 531

fopen() ........................................................................... 315

for...................................................................................... 65

foreach ................................................................ 102, 466

Referenz ................................................................... 343

form ........................................................................ 36, 572

Formatierung ............................................................. 153

Formular ............................................................ 297, 571

auswerten ........................................................ 35, 133

mit Programm ...................................................... 158

prüfen ....................................................................... 150

Forum ............................................................................ 567

Forward-Slash............................................................. 570

fpdf ................................................................................. 521

fputs() ............................................................................ 316

Frame............................................................................. 153

From............................................................................... 545

FromName .................................................................. 545

fseek() .................................................................. 326, 329

ftell() ............................................................................... 326

FTP .................................................................................. 183

func_get_arg()............................................................ 108

func_get_args().......................................................... 108

func_num_args() ...................................................... 108

function ................................................................. 78, 249

function_exists()......................................................... 96

Funktion ......................................................................... 77

als Parameter ........................................................ 367

Aufruf........................................................................... 79

benutzerdefiniert ................................................. 115

Funktion (Forts.)

Definition ................................................................... 78

Existenz prüfen ........................................................ 96

mathematisch ....................................................... 395

Parameter ........................................................... 80, 83

rekursiv ........................................................... 113, 334

Rückgabewert .......................................................... 86

Übergabe von Parametern.................................. 88

variable Parameterliste..................................... 108

verlassen..................................................................... 87

G

Gauß, Carl Friedrich................................................. 129

gd_info()....................................................................... 496

GD-Bibliothek ............................................................ 495

gedit ............................................................................... 589

Geldanlage................................................................... 122

Generator..................................................................... 118

getAttribute() ............................................................. 481

getAvailableDrivers() .............................................. 458

getcwd() ........................................................................ 333

getElementsByTagName() .................................... 481

getimagesize() ............................................................ 565

getMessage() .................................................................. 96

GET-Parameter .......................................................... 427

getrandmax() ............................................................. 404

GetX()............................................................................. 538

GetY() ............................................................................. 538

gleich ................................................................................ 43

Gleichheitszeichen, doppelt.................................... 43

Global

Schlüsselwort............................................................ 91

Variable ...................................................................... 91

Globaler Namensraum........................................... 279

Grafik ............................................................................. 495

anzeigen .................................................................. 496

Bild aus Datei laden ............................................ 503

Bildausschnitt ....................................................... 507

Bogen ........................................................................ 508

Breite......................................................................... 504

Ellipse........................................................................ 508

erzeugen und speichern .................................... 498

Farbpalette ............................................................. 498

gepunktete Linie................................................... 513

Größe ändern ........................................................ 566

Größe feststellen .................................................. 565

4496.book Seite 595 Montag, 6. März 2017 10:12 10

Index

596

Grafik (Forts.)

Höhe .......................................................................... 504

interner Font .......................................................... 500

leer erzeugen.......................................................... 566

Linie ........................................................................... 511

Linienart .................................................................. 512

Liniendicke.............................................................. 512

mit Farbe füllen ........................................... 498, 513

Objekt erzeugen.................................................... 497

Pixel ........................................................................... 511

Polygon .................................................................... 510

Rechteck................................................................... 510

speichern ................................................................. 497

Text drehen............................................................. 502

Text erzeugen ........................................................ 501

unmittelbar anzeigen ........................................ 498

Gregorianischer Kalender ..................................... 376

Groß- und Kleinschreibung.................................... 26

Größer .................................................................... 43, 195

Größer gleich....................................................... 43, 195

GROUP BY .................................................................... 237

Grundrechenart ........................................................ 171

H

Hash-Tabelle ................................................................. 97

head................................................................................ 570

Header() ........................................................................ 531

header()............................................................... 499, 523

Hexadezimalsystem................................................ 409

hexdec() ........................................................................ 409

hidden ................................................................. 138, 296

Hintergrundfarbe ..................................................... 162

Hochkommata.................................................... 30, 101

Hochladen

Daten ........................................................................ 168

Programme ............................................................ 183

Hover-Effekt ............................................................... 162

href ................................................................................. 575

HTML ............................................................................. 569

HTML-Entities ............................................................ 297

htmlentities() ............................................................. 297

HTML-Mail......................................................... 541, 544

htmlspecialchars() .................................................... 297

HTML-Tabelle ............................................................... 69

HTTP .............................................................................. 476

Hyperlink........................................................... 161, 575

Daten anhängen .................................................. 166

Hypertext Transfer Protocol................................ 476

I

iconv() ........................................................................... 323

if................................................................................... 42, 43

Image() ................................................................ 533, 537

image/jpg..................................................................... 499

imagearc() .................................................................... 509

imagecolorallocate()................................................ 498

imagecopy() ................................................................ 507

imagecopyresampled() .......................................... 566

imagecreate().............................................................. 497

imagecreatefromjpeg()........................................... 504

imagecreatefrompng() ........................................... 504

imagecreatetruecolor() .......................................... 566

imagecrop() ................................................................. 505

imagedashedline().................................................... 513

imagedestroy() .......................................................... 498

imageellipse() ............................................................. 509

imagefill()..................................................................... 498

imagefilledarc() ......................................................... 509

imagefilledellipse() .................................................. 509

imagefilledpolygon()............................................... 511

imagefilledrectangle() ............................................ 511

imagefilltoborder() .................................................. 514

imageflip() ................................................................... 504

imagejpeg() ................................................................. 498

imageline() .................................................................. 512

imagepng() .................................................................. 498

imagepolygon() ......................................................... 511

imagerectangle() ....................................................... 510

imagesetpixel().......................................................... 512

imagesetstyle() .......................................................... 512

imagesetthickness()................................................. 512

imagestring() .............................................................. 501

imagesx() ..................................................................... 504

imagesy()...................................................................... 504

imagettftext()............................................................. 502

IMG_FLIP_VERTICAL............................................... 505

implements ................................................................ 276

implode()...................................................................... 301

inc.php .......................................................................... 115

include ................................................................ 115, 117

4496.book Seite 596 Montag, 6. März 2017 10:12 10

Index

597

include_once .............................................................. 118

Index................................................................................ 98

INF.............................................................................. 30, 94

ini_get() ........................................................................ 293

ini_set() ......................................................................... 294

INNER JOIN .................................................................. 235

input .................................................................... 134, 572

INSERT INTO ............................................ 211, 226, 242

Instanz .......................................................................... 247

int (Typhinweis) ........................................................ 105

intdiv()........................................................................... 400

integer primary key ................................................. 446

interface ............................................................. 275, 276

Internetseite, dynamische ...................................... 18

intval() .................................................................... 39, 375

Inversion, bitweise ................................................... 412

IP-Adresse .................................................................... 383

is_array() ...................................................................... 341

is_bool() .......................................................................... 62

is_dir() ........................................................................... 332

is_file()........................................................................... 332

is_float().......................................................................... 62

is_int() ............................................................................. 62

is_numeric().................................................................. 62

is_object() .................................................................... 252

is_readable() ............................................................... 333

is_string() ....................................................................... 62

is_writeable() .............................................................. 333

isset ternary .................................................................. 64

isset()............................................. 60, 96, 147, 159, 417

Iterator .......................................................................... 277

J

JavaScript ........................................................... 149, 222

JavaScript Object Notation ................................... 483

JOIN ................................................................................ 235

geschachtelt ........................................................... 236

oder WHERE ........................................................... 238

JSON ............................................................................... 483

parse() ....................................................................... 486

json_decode() ............................................................. 490

json_encode() ............................................................. 484

JSON-Objekt ................................................................ 473

K

Kapselungsprinzip ................................................... 250

Key.................................................................................. 100

key()................................................................................ 277

Klammer

eckig ............................................................................. 98

geschweift ........................................................... 44, 67

Klasse............................................................................. 247

abgeleitet ....................................................... 247, 271

als Typhinweis....................................................... 266

Definition ................................................................ 249

Name ausgeben .................................................... 280

Klassenkonstante ..................................................... 260

Kleiner.................................................................... 43, 195

Kleiner gleich ...................................................... 43, 195

Koaleszenzoperator.................................................... 64

Kodierung....................................................................... 23

Kollation....................................................................... 189

Kommandozeile ....................................................... 588

Kommentar ................................................................... 24

Konstante ....................................................................... 33

Konstruktor ................................................................ 253

Vererbung ............................................................... 274

Kontrollkästchen ...................................................... 145

Konvertierung

explizit......................................................................... 39

implizit ........................................................................ 39

Kopfrechnen.................................. 177, 290, 389, 455

krsort() .......................................................................... 354

ksort() ............................................................................ 354

L

Ladezeit, verringern ................................................ 558

Lesbarkeit ....................................................................... 24

LF ..................................................................................... 315

LibreOffice Calc ......................................................... 322

LIKE ................................................................................ 196

Line Feed ...................................................................... 315

Line() .............................................................................. 539

Link() .............................................................................. 537

Links-Shift, bitweise ................................................ 412

Linux................................................................................. 20

list ................................................................................... 368

Ln()........................................................................ 527, 529

log_errors .................................................................... 292

4496.book Seite 597 Montag, 6. März 2017 10:12 10

Index

598

log()................................................................................. 398

log10() ............................................................................ 398

Logarithmus ............................................................... 398

Login .............................................................................. 418

Logisches Nicht............................................................ 50

Logisches Oder............................................................. 48

Logisches Und .............................................................. 49

Log-Tabelle .................................................................. 383

Lokale Variable ............................................................ 90

ls -al ................................................................................ 589

ls -l................................................................................... 588

M

macOS ............................................................................. 20

Installationen ........................................................ 586

mail().............................................................................. 541

MariaDB................................................................. 17, 186

Markierung ................................................................. 570

max().............................................................................. 402

Maximum.................................................................... 401

maxlength ................................................................... 134

md5() .................................................................... 298, 309

mdb ................................................................................ 459

Mehrere Tabellen...................................................... 230

Message-Digest.......................................................... 309

Metaangabe ................................................................ 570

method ........................................................................... 36

Methode ............................................................. 247, 249

statische................................................................... 260

microtime() .......................................................... 72, 371

min() .............................................................................. 402

Minimum..................................................................... 401

Mischen ........................................................................ 406

mkdir ............................................................................. 589

mktime()............................................................. 377, 382

Modularisierung .................................................. 77, 91

Modulo ........................................................................... 28

Modulo-Operator ....................................................... 28

MONTH() ...................................................................... 383

MS Access..................................................................... 456

MS Excel ....................................................................... 321

MSVCRT110.dll ........................................................... 581

multiple ........................................................................ 147

Multiplikation.............................................................. 28

mv ................................................................................... 590

MySQL .................................................................... 17, 186

mysqli_affected_rows() ......................................... 211

mysqli_close() ............................................................ 195

mysqli_connect()............................................ 194, 240

mysqli_fetch_assoc() .............................................. 194

mysqli_fetch_row() ................................................. 369

mysqli_num_rows()................................................ 194

mysqli_query() .......................................................... 194

mysqli_real_escape_ string()............................... 298

mysqli_select_db()................................................... 393

N

Nachkommastelle ....................................................... 27

name ................................................. 134, 136, 143, 170

Namensraum ............................................................. 279

global ........................................................................ 279

Namensregel ...................................... 26, 80, 188, 250

namespace .................................................................. 279

new ................................................................................. 251

next() ............................................................................. 277

Nicht, logisches ............................................................ 50

node ............................................................................... 481

NOT ................................................................................ 196

null .................................................................................... 61

number_format() ..................................................... 120

Nummerierung, automatisch ................... 384, 560

Nutzung von PHP

Anzahl ......................................................................... 17

Gründe ........................................................................ 18

O

Objekt ............................................................................ 247

als Parameter ........................................................ 263

als Rückgabewert................................................. 263

ausgeben ................................................................. 253

erzeugen .................................................................. 251

in Klasse................................................................... 267

klonen....................................................................... 263

kopieren ................................................................... 263

laden ......................................................................... 282

Lebensdauer........................................................... 253

speichern ................................................................. 282

octdec() ......................................................................... 409

Oder, bitweise ............................................................ 412

Oder, logisches.............................................................. 48

4496.book Seite 598 Montag, 6. März 2017 10:12 10

Index

599

Oktalsystem ................................................................ 409

ON ................................................................................... 235

onchange ..................................................................... 494

onmousedown........................................................... 494

onmouseout ............................................................... 494

onmouseover ............................................................. 494

onmouseup................................................................. 494

onreadystatechange ................................................ 476

onreset .......................................................................... 494

onSubmit ..................................................................... 152

onsubmit ..................................................................... 494

open()

XMLHttpRequest.................................................. 475

opendir()....................................................................... 331

Open-Source-Datenbank ....................................... 186

Operator

arithmetisch.............................................................. 28

logisch ............................................................... 48, 196

Rangordnung .................................................... 29, 50

Spaceship ................................................................... 59

ternär ........................................................................... 58

Vergleichs- .............................................. 42, 195, 196

option ............................................................................ 145

Optionaler Parameter ................................... 112, 257

Optionsschaltfeld ..................................................... 141

Gruppe...................................................................... 142

OR.................................................................................... 196

ord() ................................................................................ 308

ORDER BY..................................................................... 196

Ostersonntag .................................................... 127, 387

Output() ........................................................................ 523

P

p (Absatz)...................................................................... 573

PageNo() ....................................................................... 532

Parameter

entpacken ............................................................... 111

optional .......................................................... 112, 257

Typ kontrollieren..................................................... 81

Vorgabewert ................................................. 112, 257

zu wenige ................................................................... 81

Parameterfeld ............................................................ 111

parent ............................................................................ 272

parent::__construct() .............................................. 274

password ...................................................................... 138

Passwort ............................................................. 298, 419

Speicherung ........................................................... 298

verschlüsseln ......................................................... 298

PDF

Ausgabe ................................................................... 523

Bild skalieren ......................................................... 533

erzeugen .................................................................. 521

externer Hyperlink .............................................. 536

Fließtext ................................................................... 525

Font ........................................................................... 524

Füllfarbe .................................................................. 529

Hyperlink ................................................................ 533

Hyperlink erzeugen ............................................. 535

Hyperlink in einem Bild..................................... 537

Hyperlink in einem Bildbereich ...................... 537

Hyperlink in einer Zelle...................................... 536

Hyperlink, Zielpunkt ........................................... 535

Image-Map ............................................................. 533

Kopf- und Fußzeile .............................................. 530

Linie ........................................................................... 537

Liniendicke .................................................... 529, 538

Linienfarbe ............................................................. 529

Rechteck .................................................................. 537

Schreibposition ............................................ 531, 538

Schreibposition nach der Zelle ....................... 525

Schriftart ................................................................. 524

Schriftfarbe............................................................. 526

Schriftgröße .................................................. 524, 527

Schriftschnitt ................................................ 524, 527

Seite erzeugen ....................................................... 523

Seitenanzahl .......................................................... 532

Seitenumbruch ..................................................... 532

Standardfont ......................................................... 523

Tabelle ...................................................................... 527

unterstreichen ....................................................... 535

Zeilenhöhe .............................................................. 527

Zeilenumbruch................................... 525, 527, 529

Zelle ........................................................................... 524

Zellenausrichtung................................................ 525

Zellenfüllung.......................................................... 525

Zellengröße............................................................. 524

Zellenrand ............................................................... 525

PDF-Reader.................................................................. 521

PDO ...................................................................... 445, 456

PDOStatement........................................................... 459

Pfadangabe.................................................................. 316

PHP 7.1 .............................................................................. 17

PHP Data Objects ............................................ 445, 456

4496.book Seite 599 Montag, 6. März 2017 10:12 10

Index

600

PHP Hypertext Preprocessor ................................. 18

PHP_INT_MAX ................................................ 395, 404

PHP_INT_MIN.................................................. 395, 404

php_pdo_mysql.dll.................................................. 458

php_pdo_odbc.dll .................................................... 458

php_pdo_sqlite.dll ................................................... 458

php_sqlite3.dll ........................................................... 445

php.ini ........................... 291, 297, 580, 582, 585, 586

phpinfo() ......................................... 581, 582, 585, 587

PHPMailer.................................................................... 541

phpMyAdmin................................................... 186, 187

aktualisieren .......................................................... 188

Designer ................................................................... 231

Installation ............................................................. 577

Internetnutzung ................................................... 239

Pizzabestellung.......................................................... 174

Platzhalter ................................................................... 196

Plausibilität ................................................................. 297

post................................................................................... 36

Potenzieren ................................................................... 28

pow() .............................................................................. 398

Präfix ............................................................................. 409

Preis.................................................................................. 19

Primärschlüssel ......................................................... 189

private ........................................................................... 250

Programm

beenden................................................. 181, 284, 315

entwickeln............................................................... 119

Programmierstil.......................................................... 21

Programmierung, objektorientierte ................. 247

Programmpaket ........................................................ 295

Projektverwaltung.................................................... 230

protected ...................................................................... 250

Provider ........................................................................ 183

Proxy ............................................................................. 296

public ............................................................................. 250

Q

query()

PDO............................................................................ 459

SQLite3 ..................................................................... 448

R

rad2deg() ...................................................................... 403

radio............................................................................... 141

Radiobutton...................................................... 141, 206

Rahmen ........................................................................ 574

rand() ...................................................................... 72, 404

random_int().............................................................. 404

range() ........................................................................... 344

read ................................................................................ 315

readdir() ........................................................................ 331

readfile() ....................................................................... 320

readonly ............................................................. 134, 136

readystate .................................................................... 476

Rechenoperator............................................................ 28

Rechte, Unix ............................................................... 588

Rechtsassoziativ........................................................ 398

Rechts-Shift, bitweise.............................................. 412

Rect() .............................................................................. 539

Redistributable .......................................................... 581

Referenz ................................................................ 34, 130

Feld ................................................................... 338, 339

foreach ..................................................................... 343

Objekt ....................................................................... 262

Variable ...................................................................... 88

register globals .......................................................... 297

Rekursive Funktion ....................................... 113, 334

Relation ........................................................................ 230

REMOTE_ADDR ......................................................... 383

require........................................................................... 117

require_once .............................................................. 118

reset .............................................................. 36, 150, 572

responseText.............................................................. 476

responseXML ............................................................. 481

return ............................................................................... 87

return, JavaScript ...................................................... 152

rewind() .............................................................. 277, 326

rm ................................................................................... 590

rmdir.............................................................................. 589

round() .......................................................................... 400

rows................................................................................ 136

rsort() ............................................................................. 346

Rückgabewert................................................................ 86

Typ kontrollieren .................................................... 87

rwx.................................................................................. 588

4496.book Seite 600 Montag, 6. März 2017 10:12 10

Index

601

S

Schleife............................................................................ 65

Abbruch ...................................................................... 75

bedingungsgesteuert ...................................... 72, 74

endlos .......................................................................... 68

geschachtelt .............................................................. 68

Schnittstelle ................................................................ 275

Schreibrechte ............................................................. 313

Schriftart ...................................................................... 162

Schriftgröße ................................................................ 162

SEEK_CUR .................................................................... 329

SEEK_END .................................................................... 329

SEEK_SET...................................................................... 329

Seitenquelltext .......................................................... 229

SELECT ........................................................................... 194

select .................................................................... 145, 147

selected ......................................................................... 145

self................................................................................... 262

Send()............................................................................. 545

send() ............................................................................. 476

Separator ...................................................................... 301

Serialisierung ............................................................. 282

serialize() ...................................................................... 284

Serverprogramm ........................................................ 19

Session .......................................................................... 296

Gültigkeit beenden .............................................. 296

session_cache_limiter() ......................................... 296

session_destroy()...................................................... 416

session_id() ................................................................. 418

session_regenerate_id()......................................... 296

session_set_cookie_params() ............................. 296

session_start()............................................................ 416

Session-ID .................................................................... 417

regenerieren ........................................................... 296

Session-Management ............................................. 415

setcookie() ................................................................... 436

SetDrawColor()........................................................... 529

SetFillColor() ..................................................... 529, 539

SetFont() ....................................................................... 524

SetFontSize() ............................................................... 527

SetLineWidth() ................................................. 529, 538

SetLink()........................................................................ 535

setRequestHeader().................................................. 479

SetTextColor() ............................................................ 526

SetX().............................................................................. 539

SetXY() ........................................................................... 539

SetY() .............................................................................. 531

shuffle()............................................................... 406, 407

Sicherheit..................................................................... 295

Sichtbarkeit................................................................. 250

Silence-Operator .................................... 296, 315, 550

similar_text() ............................................................. 306

SimpleXML.................................................................. 461

simplexml_load_file() ............................................ 463

simplexml_load_string() ...................................... 469

size............................................................... 134, 170, 573

Sommerzeit ................................................................ 377

sort()............................................................................... 346

Sortierung, Feld ......................................................... 365

Spaceship-Operator .................................................... 59

span................................................................................ 490

Spiel................................................................................... 74

sprintf() ......................................................................... 326

SQL.................................................................................. 186

Großschrift ............................................................. 186

SQL-Code, schädlicher ............................................ 298

SQLite3 ................................................................ 445, 446

SQLITE3_ASSOC......................................................... 449

SQLite3Result ............................................................. 449

sqrt()............................................................................... 398

srand() .......................................................... 72, 404, 408

Startwert ......................................................................... 66

stat() ..................................................................... 330, 333

Statische Eigenschaft .............................................. 260

Statische Methode ................................................... 260

status ............................................................................. 476

Stellenwertsystem ................................................... 409

str_replace() ................................................................ 299

str_shuffle() ................................................................ 408

str_split()...................................................................... 301

strcasecmp() ............................................................... 306

strcmp() ........................................................................ 306

strftime() ...................................................................... 372

string (Typhinweis).................................................. 105

String-Funktionen.................................................... 299

stristr() .......................................................................... 303

strlen() ........................................................................... 299

strpos() .......................................................................... 305

strrchr()......................................................................... 303

strrev()........................................................................... 299

strrpos() ........................................................................ 305

strstr()............................................................................ 303

strtolower() ................................................................. 299

strtotime() ................................................................... 378

strtoupper()................................................................. 299

4496.book Seite 601 Montag, 6. März 2017 10:12 10

Index

602

strtr() .............................................................................. 299

Subject........................................................................... 545

submit .......................................................... 36, 150, 572

substr() .......................................................................... 303

Subtraktion ................................................................... 28

Suchformular ............................................................. 202

SUM() ............................................................................. 236

Superglobal

Array $_COOKIE ................................................... 436

Array $_FILES................................................ 170, 565

Array $_GET ........................................................... 430

Array $_SESSION .................................................. 415

Variable ...................................................................... 91

switch/case.................................................................... 53

Systemvoraussetzungen ......................................... 20

Systemzeit ermitteln .............................................. 371

T

Tabelle ................................................................. 185, 574

erzeugen .................................................................. 188

exportieren ............................................................. 241

mehrspaltig ............................................................ 574

Struktur .................................................................... 186

verknüpfen.............................................................. 234

verknüpft ................................................................. 230

Zeile ........................................................................... 574

Zelle ........................................................................... 574

table................................................................................ 574

target ............................................................................. 153

Tastenkombination

Alt + F4 ..................................................................... 587

Windows .................................................................. 587

Tausendertrennzeichen......................................... 121

td ..................................................................................... 574

Terminal ....................................................................... 588

Ternärer Operator ...................................................... 58

textarea......................................................................... 136

Textdatei

lesen .......................................................................... 317

mit Ajax laden....................................................... 476

schreiben ................................................................. 314

Texteingabefeld

einzeilig ............................................................. 35, 134

mehrzeilig ............................................................... 136

Textelement ............................................................... 133

Textfarbe ...................................................................... 162

this.................................................................................. 249

throw ................................................................................ 93

time() .......................................................... 371, 382, 439

TIMESTAMP ................................................................ 560

Timestamp ........................................................ 330, 372

Bereichsüberschreitung..................................... 385

title ................................................................................. 570

tr ...................................................................................... 574

true ................................................................................. 153

TrueType-Fonts ......................................................... 501

try....................................................................................... 93

TTF-Datei...................................................................... 502

Typ

prüfen ....................................................... 62, 252, 341

type ...................................................................... 170, 573

Typhinweise ....................... 26, 81, 87, 104, 266, 342

U

Überladen .................................................................... 257

Ubuntu Linux ............................................................... 20

Installationen ........................................................ 584

ucfirst() ......................................................................... 299

UCS .................................................................................... 24

ucwords() ..................................................................... 299

Umlaut ................................................................... 26, 189

darstellen ................................................................ 569

Und, bitweise.............................................................. 412

Und, logisches ............................................................... 49

ungleich........................................................................... 43

Unicode ................................................................. 24, 570

Universal Character Set............................................. 24

Unix, Befehle .............................................................. 588

unserialize() ................................................................ 284

unset() .................................................................... 61, 297

Unterstrich ..................................................................... 26

UPDATE … SET .................................................. 214, 226

Upload........................................................................... 168

URI, wechseln ............................................................. 523

URL, Daten anhängen ................................... 163, 295

use .................................................................................. 279

use const ...................................................................... 281

use function................................................................ 281

usort() ............................................................................ 365

UTF-8 ...................................................................... 23, 570

ohne BOM ............................................................... 104

utf8_general_ci ......................................................... 189

4496.book Seite 602 Montag, 6. März 2017 10:12 10

Index

603

V

valid() ............................................................................. 277

Value .............................................................................. 101

value.................................................. 134, 143, 147, 150

VALUES ......................................................................... 211

var_dump() ................................................................. 395

Variable........................................................................... 25

Existenz prüfen ............. 60, 64, 96, 147, 159, 211

global ........................................................................... 91

Gültigkeit ................................................................ 297

Gültigkeitsbereich................................................... 90

initialisieren ........................................................... 297

lokal.............................................................................. 90

löschen ........................................................................ 61

superglobal................................................................ 91

unerlaubter Zugriff.............................................. 297

Vererbung.................................................................... 270

Vergleichsoperator .................................................... 42

<=> ................................................................................ 60

Verkettung .................................................................... 30

Verknüpfung ................................................................ 48

Verschlüsselung ........................................................ 309

Verzeichnis

aktuell....................................................................... 588

aktuellen Namen ermitteln.............................. 333

anlegen .................................................................... 589

Hierarchie ............................................................... 588

Informationen ermitteln................................... 331

Inhalt ........................................................................ 588

lesen .......................................................................... 332

löschen ..................................................................... 589

öffnen ....................................................................... 332

schließen.................................................................. 333

übergeordnet ......................................................... 588

versteckt .................................................................. 589

wechseln ......................................................... 332, 589

Verzweigung ................................................................. 42

mehrfach ............................................................. 51, 53

mit ?: ............................................................................ 58

mit HTML ................................................................... 55

verschachtelt ............................................................ 51

Visual C++ Redistributable.................................... 581

Vorzeichen .................................................................. 412

W

Wahr ................................................................................. 42

Warenkorb................................................................... 423

Webcounter ................................................................ 325

Webserver, Hauptverzeichnis ................................ 25

Webshop ...................................................................... 423

WHERE .......................................................................... 195

oder JOIN ................................................................. 238

while ................................................................................. 72

Wiederholung ............................................................... 65

Wildcard ....................................................................... 196

Windows ......................................................................... 20

Installationen ........................................................ 577

Windows-Taste .......................................................... 587

Winkelfunktion ......................................................... 402

write ............................................................................... 315

Write() ................................................................. 526, 535

Würfel............................................................................... 72

Wurzel ........................................................................... 398

X

XAMPP ................................................................... 20, 186

Installation Linux ................................................ 584

Installation macOS ............................................. 586

Installation Windows ......................................... 581

XML ................................................................................ 461

Zeichenkette........................................................... 469

XML-Datei.................................................................... 462

XMLHttpRequest ...................................................... 473

Y

yield ............................................................................... 118

Z

Zahl.................................................................................... 27

Ganzzahlkonvertierung .................................... 399

Nachkommastelle ............................................... 122

Präfix ........................................................................ 409

Zeichencodierung .......................................... 308, 462

Zeichenkette .................................................................. 30

drehen ...................................................................... 299

4496.book Seite 603 Montag, 6. März 2017 10:12 10

Index

604

Zeichenkette (Forts.)

Länge ........................................................................ 299

Teile ersetzen ......................................................... 299

Teile extrahieren .................................................. 303

umwandeln ..................................................... 39, 299

vergleichen ............................................................. 306

Zeichen suchen...................................................... 305

zusammenfügen .................................................. 301

Zeichenkettenfunktionen ..................................... 299

Zeilenumbruch................................................... 22, 229

nicht erlaubter ......................................................... 32

Zeilenvorschub.......................................................... 315

Zeitangabe formatieren ......................................... 330

Zeitstempel ....................................................... 383, 560

Zufallszahlen ....................................................... 72, 404

aus Feld .................................................................... 340

Zugriffszähler ................................................... 325, 416

Zurücksetzen ....................................................... 36, 150

4496.book Seite 604 Montag, 6. März 2017 10:12 10

Thomas Theis

Einstieg in PHP 7 und MySQL – Ideal für Programmiereinsteiger604 Seiten, broschiert, mit CD, 12. Auflage 2017 24,90 Euro, ISBN 978-3-8362-4496-1

www.rheinwerk-verlag.de/4352

Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne emp-fehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungs-rechte liegen beim Autor und beim Verlag.

Teilen Sie Ihre Leseerfahrung mit uns!

Thomas Theis ist Diplom-Ingenieur für Technische Informatik und hat langjährige Erfahrung als IT-Dozent, unter anderem an der Fachhochschule Aachen. Er leitet Schulungen zu Web-programmierung, Visual Basic sowie Visual C# und ist Autor zahlreicher erfolgreicher Fachbücher. Einsteiger und Neulin-ge schätzen seine Fähigkeit, auch komplizierte Sachverhalte leicht verständlich zu machen und dabei den Spaß am Pro-grammieren nie aus den Augen zu verlieren.

Wissen, wie’s geht.