Entstehung PHP
- PHP ist eine serverseitige Skriptsprache zur Erstellung dynamischer Webseiten
- PHP wurde 1994 von dem Dänen Rasmus Lerdorf entwickelt
- PHP steht für "PHP: Hypertext Preprocessor", ursprünglich "Personal Home Page Tools"
- Die Homepage von PHP
Versionen von PHP
- Die erste wirklich nutzbare Version, PHP 2.0, wurde 1995 veröffentlicht
- 1997 wurde PHP 3.0 freigegeben (erste stabile Version)
- Im Jahre 2000 PHP 4 (Zend)
- Im Juli 2004 wurde PHP 5 freigegeben (Weiterentwicklungen im Bereich der Objektorientierten Programmierung, der Zugriff auf XML Daten und
die Implementierung einer eigenen Datenbank "SQLite")
- Aktuelle Version PHP 8.2
Erfolg von PHP
- die freie Verfügbarkeit im Netz (Open-Source)
- Plattform unabhängig (PHP-Prozessor liegt im C-Quelltext vor, daher kann er leicht auf alle Plattformen übersetzt werden)
- eine reine Websprache
- Wiedererkennungseffekt durch die C-Syntax, die vielen schon von JavaScript oder Java bekannt ist
- einfache Kombination mit HTML und XHTML
- sehr großer Funktionsumfang (insbesondere Datenbankfunktionen)
- gutes Zusammenspiel mit MySQL, die wie PHP als Open Source im Netz verfügbar ist
- gigantisch viele Informationen im Netz
Source code editor
Komerzielle IDE
Dynamische Webseiten mit PHP
- Unter dynamischen Webseiten werden Seiten verstanden, deren endgültige, an den Server gesendete Form erst im Augenblick des Abrufs entsteht
- So können Daten interaktiv in die Seiten eingebaut werden
- Der Vorteil besteht vor allem in der Möglichkeit, auf Nutzereingaben reagieren zu können
- Formulare lassen sich sofort auswerten und schon die nächste Seite kann den Inhalt sofort wiedergeben
- Dynamische Webseiten benötigen nicht unbedingt Datenbanken
- Der PHP-Code wird, ähnlich wie JavaScript, in den HTML-Code eingebettet
- Im Gegensatz zu JavaScript wird der Code jedoch nicht vom Browser, sondern serverseitig interpretiert
Dynamische Webseiten

Der Nutzer ruft über eine URL(1) oder ein Formular ein PHP-Skript auf dem Server auf. Die enthaltenen Befehle werden vom PHP-Prozessor erkannt und
interpretiert(2). Falls notwendig sendet der PHP-Prozessor eine Anfrage an die Datenbank(3) und erhölt die gewünschten Antworten(4). Aus den
vorhanden Daten generiert der PHP-Prozessor die endgültige Webseite(5) (HTML-Code), die dem Nutzer übermittelt wird(6). Der Browser bekommt reines HTML zurück
und muß sich nicht um PHP kümmern. PHP benötigt deshalb keine bestimmte browserseitige Technik, kann also mit jedem Standardbrowser arbeiten.
Installation PHP mit Komponenten
Einzelkomponenten:
Komplett-Installation
- WAMP (Windows - Apache - MySQL - PHP)
- Apachefriends
- Unter Windows bietet sich die Installer-Version an (ca. 148 Mb.)
Die Funktion phpinfo()
Öffnen Sie einen Editor und geben Sie folgende Zeilen ein:
<?php
phpinfo();
?>
Erklärung phpinfo()
- Mit dem Beginn Tag <?php erkennt der PHP Interpreter auf dem Webserver, dass er Befehle ausführen soll, mit ?> endet der PHP Code
- phpinfo() ist eine von vielen PHP internen Funktionen
- Wichtig! Änderungen sind nur direkt in der php.ini Datei möglich
- Das Ende einer Codezeile endet immer mit einem Strichpunkt. Damit erkennt der Interpreter das Ende der Anweisung
- Speichern Sie Ihr erstes selbst erstelltes PHP Script in das Root-Verzeichnis \htdocs unter dem Namen "info.php". Geben Sie in Ihrem Browser
ein: http://localhost/info.php
- Gezeigt wird die Versionsnummer und die Konfigurationseinstellungen der PHP-ini
- Durch die Dateierweiterung des Dokumentes (*.php) weiß der Server, daß er die Datei als PHP-Code behandeln muß und ruft den Interpreter auf
PHP Anfänge und Endungen
<?php
// Standard-Anfang und Ende
?>
<?
/* Diese Markierung wird für kurze Tags benutzt. Um die Erkennung
für kurze Tags zu aktivieren, muß die entsprechende Anweisung in
der php.ini eingeschaltet werden. Standardmäßig steht sie auf on:
short_open_tag = On; */
?>
<%
/* Hier folgt PHP-Code. Diese Markierung wird für ASP-Tags benutzt.
Um die Erkennung für ASP-Tags zu aktivieren, muss die entsprechende
Anweisung in der php.ini eingeschaltet werden. Standardmäßig steht
sie auf on: asp_tags = On; /*
%>
<SCRIPT LANGUAGE="php">
// Hier folgt PHP-Code
</SCRIPT>
Kommentarzeichen
- Einzeiliger Kommentar beginnt mit zwei Schrägstrichen // oder einem Gatterzeichen #
- Mehrzeiliger Kommentar beginnt mit einem Schrägstrich und einem Stern /* und endet mit einem Stern, gefolgt von einem
Schrägstrich */
Interne PHP Funktionen anzeigen
In PHP gibt es viele vordefinierte Funktionen. Um die
Anzahl und Namen der vordefinierten Funktionen unserer
PHP Version zu ermitteln, wenden wir die vordefinierte
Funktion get_defined_functions() an.
print_r(get_defined_functions());
Mit der Funktion print_r betrachten wir den gesamten Inhalt
eines Arrays.
Alle Funktionen inklusive Erklärung findet man unter: PHP Manual
Ausgabe mit echo und print()
- Der Befehl echo gibt Daten in Browserfenstern aus
- echo 'Hallo Webmaster Kurs!';
- Der Inhalt wird in Hochkommatas geschrieben
- Ebenso bei der Funktion print()
- print('Hallo Webmaster Kurs!');
- Der Inhalt wird in Hochkommatas und runden Klammern geschrieben
- echo ist übersichtlicher und schneller
PHP in HTML einbetten
- Zu den großen Vorteilen von PHP gehört die Möglichkeit, PHP in HTML und HTML in PHP einbetten zu können
- Die Funktion echo leitet die Einbettung von PHP in HTML ein
- Der PHP Inhalt wird in Hochkommatas gesetzt
- Innerhalb des PHP Inhalts werden Hochkommatas zur Anzeige durch einen Backslash (\) escaped
PHP in HTML mit heredoc-Syntax
- Aus Perl kommt der sogenannte heredoc Operator
- Der Abschnitt wird durch den Operator <<< eingeleitet
- Am Begin des Blocks wird eine Zeichenkette definiert
- Zwischen Operator und der Zeichenkette darf kein Leerzeichen sein
- Die Zeichenkette darf im Block nicht nochmal vorkommen
- Am Ende wird die Zeichenkette wiederholt
Variablen
- Eine Variable ist ein Speicherbereich, dem Sie einen bestimmten Wert zuweisen können
- Eine Variable besteht aus einem frei wählbaren Namen mit vorgestelltem Dollarzeichen $
- Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen
- Er darf keine Leerzeichen oder nicht alphanumerische Zeichen enthalten
- PHP unterscheidet Groß- und Kleinschreibung
- Beispiele für gültige Variablen: $a oder $Tabelle_Kunde
Ausgabe der Variablen
- Mit echo Variablen in einem String ausgeben
- $vorname = 'Max';
- echo $vorname;
- Ausgabe: Max
Variablen und Strings verketten
- Der Punkt . ist in PHP eine Stringverkettung
- $vorname = 'Max';
- $nachname = 'Musterman';
- echo 'Der Vorname ist ' . $vorname . ' und der Nachname ist ' . $nachname;
- Ausgabe: Der Vorname ist Max und der Nachname ist Musterman
Anführungzeichen oder Hochkommatas?
- In PHP können Strings sowohl von normalen Anführungszeichen (") als auch von Hochkommas (') eingefasst werden
- Es gibt jedoch einen Unterschied zwischen diesen beiden Zeichen:
- der Bereich zwischen Anführungszeichen wird von PHP ausgewertet
- der Bereich zwischen Hochkommatas wird von PHP übergangen
$vorname = 'Max';
echo '$vorname';
Ausgabe: $vorname
Variablen-Übergabe per Link
- Häufig werden Variablen per Link an die nächste Webseite übergeben
- Die Übergabe der Variablen beginnt mit einem Fragezeichen hinter der aufzurufenden Webseite
- Die folgenden Variablen werden mit einem kaufmännischem & Zeichen eingeleitet
- Bei einer Variablen-Übergabe per Link wird standardmäßig die GET-Methode verwendet
- $vor = 'Max';
- $nach = 'Musterman';
- echo "<a href='test.php?vorn=$vor&nachn=$nach'>Uebergabe</a>";
- Globale Menschen rufen auf: echo "$vorn $nachn";
Sicherheitsrisiko bei Variablen
- In der php.ini gibt es einen Parameter "register_globals"
- Früher stand bei den meisten Providern der Wert "register_globals" auf ON
- Diese Art der Einstellung stellt ein Sicherheitsrisiko dar
- z.B. über die URL können so explizit Werte geändert werden
- In Zukunft werden immer mehr Provider "register_globals" auf OFF stellen
- Die Folge wird sein: PHP ist sicherer aber viele PHP-Seiten funktionieren nicht mehr
- Lösung: Um auf Variablen zuzugreifen, werden die Variablen in superglobale Arrays gepackt
- Diese Arrays werden ggf. mit $_POST[''] oder $_GET[''] aufgerufen
- Ab der Version PHP 4 gibt es das Superarray $_REQUEST
Variablen Übergeben in einem Formular
- Jedes Formularelement ist in (X)HTML durch das Attribut name gekennzeichnet
- Der Inhalt des (X)HTML Attributs name ist beim Aufruf mit PHP die Variable
- <form action="test1.php" method="get">
- <input type="text" name="vorname" value=""/>
- Der Aufruf in test1.php erfolgt mit echo "$_GET[vorname]";
- oder mit echo $_GET['vorname'];
if Anweisung
- Mit der if-Anweisung Code nur dann auszuführen, wenn ein
Vergleich "true" ergibt
- Wenn die Variable die Zeichenkette "lernen" enthält, ist der Vergleich true
- In den runden Klammern steht die Bedingung
- In den geschweiften Klammern die Anweisung
$test = 'lernen';
if($test == 'lernen')
{
echo 'Supi alles richtig.';
}
Der Vergleichsoperator == (zwei Gleichheitszeichen hintereinander!) vergleicht die Variable $test mit der Zeichenkette 'lernen'
else Anweisung
- Bei Verwendung der if Anweisung soll häufig ein alternativer Code ausgeführt werden
- Alternativer Code wird ausgeführt wenn der geprüfte Ausdruck false ergibt
- Um alternativen Code auszuführen, fügen Sie else an
if (Ausdruck)
{
// Aweisungen, die ausgeführt werden, wenn der Ausdruck wahr ist.
}
else
{
// Anweisungen, die in allen anderen Fällen ausgeführt werden.
}
Methoden der Klammersetzung
1. BSD-Stil - (Berkeley Software Distribution, Version des UNIX-BS)
if (Ausdruck)
{
// Aweisungen, die ausgeführt werden, wenn der Ausdruck wahr ist.
}
2. GNU-Stil - (GNU's Not Unix) freies Betriebssystem
if (Ausdruck)
{
// Aweisungen, die ausgeführt werden, wenn der Ausdruck wahr ist.
}
3. K&R-Stil (kommt aus der C Programmierung)
if (Ausdruck) {
// Aweisungen, die ausgeführt werden, wenn der Ausdruck wahr ist.
}
HTTP Funktion header()
- Mit der Funktion header() senden Sie Informationen an den Browser, bevor der Seitentext startet
- Notwendigerweise dürfen vor dem Header keine anderen Ausgaben erfolgen wie Leerzeichen oder
Doc-Type Definitionen
- Dabei reicht als "HTML-Bereich" z. B. bereits ein einziges Leerzeichen vor dem öffnenden PHP-Tag (" <?php")
- Eine häufige Anwendung für die header() Funktion ist die Umleitung auf eine andere Webseite
- In einer produktiven Online Umgebung sollten Sie immer einen absoluten Pfad eingeben
- header("Location: http://www.meineadresse.de");
Skript ruft sich selbst auf
- Das vordefinierte superglobale Array $_SERVER['SCRIPT_NAME'] ruft das eigene Skript erneut auf
- <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">
Variablen auf Existenz testen mit der Funktion isset()
- Die PHP Funktion isset() testet ob eine Variable überhaupt existiert
- Existiert die Variable, wird der Wert "True" zurückgegeben
- Existiert die Variable nicht, wird der Wert "False" zurückgegeben
- <input type="submit" name="senden" value="abschicken"/>
if (isset($_POST['senden']))
{
// Anweisung, wenn der Submit Button gedrückt wird (True).
}
Fehlermeldungen im Browser anzeigen lassen
- In der Entwicklung sollen alle Fehlermeldungen lokal im Browser angezeigt werden
- In der php.ini display_errors = On setzen
- Dieser Parameter kann auch in der Laufzeitumgebung gesetzt werden
- ini_set("display_errors", true);
- Wichtig! In der Produktivumgebung aus Sicherheitsgründen abschalten.
- display_errors = Off
Anzeigen von PHP Fehlern
- Standardmäßig werden nur Warnungen und kritische Fehler im Browser angezeigt
- Dafür sorgt die Einstellung in der php.ini: error_reporting = E_ALL & ~E_NOTICE
- Um sich alle Fehler anzeigen zu lassen setzen wir error_reporting = E_ALL
- Dieser Parameter kann auch in der Laufzeitumgebung gesetzt werden
- error_reporting(E_ALL);
- nachzulesen unter: http://de3.php.net/error_reporting
PHP Fehlerkategorien
- PHP unterstützt Fehlerbehandlung mit einem eingebauten Schweregrad-System
- PHP unterscheidet hauptsächlich in den folgenden fünf Kategorien
- E_NOTICE
- E_WARNING
- E_ERROR
- E_PARSE
- E_STRICT
Bedeutung der PHP Fehler
E_NOTICE Fehler sind unbedenkliche Fehler. Sie können helfen Hinweise auf eventuell vorhandene Bugs zu liefern. Generell stören solche Fehler nicht den Programmablauf, aber das Resultat entspricht vielleicht nicht den Vorstellungen (Bsp.: undefinierte Variable). Das Programm läuft erst einmal ohne Störungen weiter.
E_WARNING Fehler sind keine schweren Laufzeitfehler. Sie stoppen den Programmablauf nicht. E_WARNING Fehler zeigen auf, dass etwas Unvorhergesehenes eingetreten ist. Viele externe Fehler generieren E_WARNING Fehler (Bsp.: Aufruf einer externen Datei mit include, die nicht gefunden wird).
Das Programm läuft erst einmal ohne Störungen weiter.
E_ERROR sind schwere Fehler, die die Ausführung des Codes abbrechen (Bsp.: phpinf();) Das Programm läuft nicht weiter.
E_PARSE Fehler treten häufig auf z.B. bei Rechtschreibfehlern oder beim Vergessen des Semikolons hinter einer PHP-Anweisung. E_PARSE sind schwere Fehler, die die Ausführung des Codes abbrechen.
E_STRICT Fehler gibt es seit PHP 5. Sie treten auf bei Konstrukten, die nur aus Gründen der Abwärtskompatibilität zu PHP 4 erlaubt sind. Das Programm läuft weiter.
Arithmetische Operatoren
Ein Operator ist etwas das Sie mit einem oder mehreren
Werten füttern und Sie erhalten als Ergebnis einen anderen
Wert zurück.
Beispiel Name Ergebnis
$a + $b Addition Summe von $a und $b
$a - $b Subtraktion Differenz von $a und $b
$a * $b Multiplikation Produkt von $a und $b
$a / $b Division Quotient von $a und $b
Vergleichs-Operatoren
Vergleichs-Operatoren erlauben es - wie der Name schon sagt - zwei Werte zu
vergleichen.
Beispiel Name Ergebnis
$a == $b Gleich Gibt TRUE zurück, wenn $a gleich $b ist
$a != $b Ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist
$a <> $b Ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist
$a < $b Kleiner Als Gibt TRUE zurück, wenn $a kleiner als $b ist
$a > $b Größer Als Gibt TRUE zurück, wenn $a größer als $b ist
$a <= $b Kleiner Gleich Gibt TRUE zurück, wenn $a kleiner oder gleich $b ist
$a >= $b Größer Gleich Gibt TRUE zurück, wenn $a größer oder gleich $b ist
Logische Operatoren
Logische Operatoren verknüpfen verschiedene Werte.
Beispiel Name Ergebnis
$a and $b Und TRUE wenn sowohl $a als auch $b TRUE ist
$a && $b Und TRUE wenn sowohl $a als auch $b TRUE ist
$a or $b Oder TRUE wenn $a oder $b TRUE ist
$a || $b Oder TRUE wenn $a oder $b TRUE ist
$a xor $b Entweder Oder TRUE wenn entweder $a oder $b TRUE ist, aber nicht beide
! $a Nicht TRUE wenn $a nicht TRUE ist
Mehrfachauswertungen mit Switch
Wenn Sie mehrere aufeinander folgende Bedingungen gegen ein und dieselbe
Variable testen möchten, ist der if-Befehl sehr aufwändig. Mit switch steht ein
Befehl zur Verfügung, der solche Listen eleganter aufbaut.
switch (Ausdruck)
{
case wert1:
//wenn Ausdruck = wert1 wird dieser Code ausgeführt
break; //hier wird die gesamte switch Anweisung verlassen
case wert2:
//wenn Ausdruck = wert2
break;
default:
//wenn keiner von beiden Werten zutrifft,
//wird dieser Code ausgeführt
}
Datentypen
- In den meisten Programmiersprachen weist man im voraus den Variablen Datentypen zu
- PHP bestimmt selbst den Datentyp, wenn der Variablen Daten zugewiesen werden
- PHP verfügt über vier Standard-Datentypen
Typ: Beispiel: Beschreibung:
Integer 5 Ganzzahl
Double 3.24 Fliesskommazahl
String "Hallo" Zeichenkette
Boolean True True oder False
Überprüfung des Datentyps
- Mit der Funktion gettype() können Sie den Datentyp der Variablen überprüfen
$name = 'Max';
echo gettype($name); // ergibt String
$tel = 5503843;
echo gettype($tel); // ergibt Integer
$preis = 53.67;
echo gettype($preis); // ergibt Double
$ware = true;
echo gettype($ware); // ergibt Boolean
Umwandeln von Datentypen
- Mit der Funktion settype() wandeln Sie Variablen in
den gewünschten Datentyp um
$tel = '6803743';
echo gettype($tel); // ergibt String
settype($tel, "integer");
echo gettype($tel); // ergibt Integer
Ausgabe von Strings
- strrev() Invertiert einen String
- strtolower() Wandelt alles in Kleinbuchstaben um
- strtoupper() Wandelt alles in Großbuchstaben um
- ucfirst() Wandelt das erste Zeichen in einen Großbuchstaben um
- ucwords() Wandelt das erste Zeichen jedes Wortes in einen Großbuchstaben um
- trim() entfernt Leerzeichen am Anfang und am Ende des Strings
- ltrim() entfernt Leerzeichen am Anfang des Strings
- strpbrk() sucht Zeichen in einer Zeichenkette
- substr() vergleicht zwei Strings
- str_replace() ersetzt alle Vorkommen des Suchstrings durch einen anderen String
Sicheres Mail-Formular mit PHP
- Mit der Funktion mail() schreibt man mit wenigen Zeilen eine Webanwendung für den Mailversand
- Die Funktion benötigt einen Empfänger, eine Betreff-Zeile und eine Nachricht
- Werden Benutzereingaben nicht geprüft, so kann ein Webserver relativ einfach als Spamschleuder
missbraucht werden
Numerisches Array
- Ein Array kann Hunderte von Werten speichern
- Ohne dass jedes Mal eine neue Variable definiert werden muss
- Die Funktion array() setzen Sie ein, wenn Sie einer Variablen gleichzeitig mehrere Werte zuweisen
- Die Indizierung eines Arrays beginnt bei Null
- Bei der Ausgabe wird der Indexwert direkt hinter dem Arraynamen in eckige Klammern gesetzt
$vorname=array("alex", "paul", "gerd");
echo $vorname[0]; //ergibt alex
echo $vorname[1]; //ergibt paul
echo $vorname[2]; //ergibt gerd
Array in einen String umwandeln
- Mit der Funktion implode() wird ein Array in einen String umgewandelt
- implode() benötigt zwei Parameter
- Der erste Parameter ist das Trennzeichen mitdem der String dargestellt wird
- Der zweite Parameter ist der Name des Arrays
- $vorname=array("alex", "paul", "gerd");
- $new_string = implode("-", $vorname);
- echo $new_string ergibt: alex-paul-gerd
String in ein Array umwandeln
- Mit der Funktion explode() wird ein String in ein Array umgewandelt
- explode() benötigt zwei Parameter
- Der erste Parameter ist das Trennzeichen mitdem der String dargestellt wird
- Der zweite Parameter ist der Name des Strings
- $vornamen = "alex, paul, gerd";
- $my_array = explode(",", $vornamen);
- echo $my_array[1]; ergibt paul
Assoziatives Array
- Bei einem assoziativen Array greifen Sie nicht mit einer Zahl auf das Array zu
- Bei einem assoziativen Array greifen Sie mit einem Namen auf das Array zu
- Dies führt zu einer besseren Lesbarkeit
- Sie müssen Schlüssel und Wert für jedes Element hinzufügen
$adr=array
(
"vorname"=>"Susi",
"nachname"=>"Sonnenschein"
);
echo $adr["vorname"]; //ergibt Susi
echo $adr["nachname"]; //ergibt Sonnenschein
Zweidimensionales numerisches Array
- Ein mehrdimensionales Array ist ein Array, welches Arrays enthält
$name=array(array("max", "paul", "gerd"),
array("Muster", "Müller", "Maier"));
echo $name[0][0]; //ergibt max
echo $name[1][0]; //ergibt Muster
Zweidimensionales assoziatives Array
$adr=array
(
array(
"Vorname"=>"Kim",
"Nachname"=>"Sonnenschein",
"Alter"=>26,
"Wohnort"=>"Bonn"
),
array(
"Vorname"=>"Alex",
"Nachname"=>"Musterman",
"Alter"=>39,
"Wohnort"=>"Mainz"
)
);
echo $adr[1]["Nachname"]; //ergibt Musterman
Informationen über Arrays anzeigen
- Genauere Informationen über Arrays liefert print_r()
- $vorname=array("alex", "paul", "gerd", "hugo");
- print_r($vorname);
- Array ( [0] => alex [1] => paul [2] => gerd [3] => hugo )
foreach()-Schleife
Um ein Array komfortabel zu durchlaufen wurde ab PHP 4 die Funktion foreach() eingeführt
foreach(array as element)
{
...
}
- foreach() funktioniert nur in Verbindung mit Arrays
- Bei jedem Durchgang wird der Wert des aktuellen Arrays dem "as" Element (String) zugewiesen
- Der interne Array-Zeiger wird um eins erhöht
- Dadurch wird beim nächsten Durchgang automatisch das nöchste Element ausgewertet
Beispiel foreach()-Schleife
$vorname=array("alex", "paul", "gerd", "hugo");
foreach($vorname as $vname)
{
echo "$vname ";
}
Ausgabe: alex paul gerd hugo
while()-Schleife
- Schleifen werden benötigt, um Programm-Abschnitte mehrfach zu durchlaufen
- Die häufigste Schleifenart ist die while-Schleife
- Die while-Schleife kommt in fast allen Programmiersprachen vor
while (Bedingung)
{
Schleifeninhalt
}
- Die Bedingung wird mit jedem Eintritt in die Schleife getestet
- Solange der Ausdruck True zurückgibt, wird die Schleife durchlaufen
- Sollte der Ausdruck schon beim Eintritt in die Schleife False ergeben, wird die Schleife nicht durchlaufen
while() Schleife Beispiel
$counter=0;
$zahl=6;
while ($zahl>$counter)
{
echo "Counter hat den Wert: $counter <br>";
$counter++;
}
- Die Schleife in unserem Beispiel bricht ab, wenn $counter gleich 6 ist
- In der echo Funktion wird die Variable $counter ausgegeben
- Abschließend wird die Variable $counter immer um 1 erhöht
- Solange die Bedingung zutreffend ist
- Variablen werden immer außerhalb der Schleifen initialisiert
Der Break Befehl
- Wie verhindere ich Endlosschleifen
- Der Befehl break bricht die Schleife sofort ab
$counter=7;
$zahl=6;
while ($zahl<$counter)
{
echo "Counter hat den Wert: $counter <br>";
$counter++;
if ($counter==50) break;
}
do-while Schleife
- Bei while Schleifen kann es passieren, dass die Schleife nie durchlaufen wird
- Oftmals ist es notwendig die Schleife mindestens einmal zu durchlaufen
- Dies stellt die do...while Schleife sicher
- Der einzige Unterschied ist die Reihenfolge der Abarbeitung
- Zuerst wird die Schleife einmal durchlaufen und am Ende die Abbruchbedingung getestet
$counter=7;
$zahl=6;
do
{
echo "Counter hat den Wert: $counter <br />";
$counter++;
if ($counter==50) break;
} while ($zahl<$counter);
for() Schleife
1 2 4
for (Startanweisung; Bedingung; Schleifenanweisung)
{
3
Schleifeninhalt;
}
- Zuerst wird die Startanweisung(1) ausgeführt
- Dann, falls Bedingung(2) erfüllt ist, der Schleifeninhalt(3)
- Danach wird die Schleifenanweisung(4) ausgeführt
- Jetzt wird jedesmal überprüft ob die Bedingung noch wahr ist
- falls ja wird der Schleifeninhalt nochmals ausgeführt
- solange bis die Bedingung nicht mehr wahr ist
PHP greift auf das Dateisystem zu
- mkdir() erzeugt ein neues Verzeichnis
- opendir() öffnet ein Verzeichnis (".") => aktuelles Verzeichnis
- readdir() liest den nächsten Eintrag aus einem Verzeichnis, im Fehlerfalle FALSE
- closedir() schliesst das komplette Verzeichnis
- readfile() liest den Inhalt einer Datei und gibt ihn im Browser aus
- fopen() öffnet die Datei
- fputs() schreibt in die Datei
- fclose() schliesst die Datei
- unlink() löscht eine Datei
- copy() kopiert eine Datei
Die Funktion fopen()
- fopen() öffnet eine Datei
- Die Funktion fopen() erwartet zwei Parameter
- Den Namen der Datei und einen Parameter um zu sagen was zu tun ist
r öffnet eine Datei zum Lesen und setzt den Datenzeiger an
den Anfang
r+ öffnet eine Datei zum Lesen und Schreiben. Setzt den
Datenzeiger an den Anfang
w öffnet eine Datei zum Schreiben, sonst wird sie angelegt.
Vorhandene Daten werden gelöscht
w+ öffnet eine Datei zum Lesen und Schreiben, sonst wird sie
angelegt. Vorhandene Daten werden gelöscht
a öffnet eine Datei zum Schreiben, sonst wird sie angelegt.
Vorhandene Daten bleiben erhalten. Datenzeiger steht am Ende
a+ öffnet eine Datei zum Lesen u. Schreiben, sonst wird sie angelegt.
Vorhandene Daten bleiben erhalten. Datenzeiger steht am Ende
Konstanten
- Eine Konstante ist ein feststehender Wert, der nicht umdefiniert oder zurück gesetzt werden kann
- Eine Konstante beginnt nicht mit einem '$'
- Auf eine Konstante kann überall zugegriffen werden
- Eine Konstante kann nur eindimensionale Werte (also keine Arrays) enthalten
- Wegen der Übersicht im Code sollten Konstantennamen immer groß geschrieben werden
- Konstanten werden häufig in include Dateien definiert
- Konstanten werden mit define() definiert
- define("WEB", "Webmaster"); echo WEB; => Webmaster
include() und require()
- Die include() Anweisung bindet die angegebene Datei ein und wertet diese aus
- In solchen PHP-Dateien steht Code der von anderen Dateien ebenfalls benötigt wird
- Die require() Anweisung ist in jeder Hinsicht gleichwertig
- Mit der einen Ausnahme: der Umgang mit Fehlern
- include() erzeugt bei Fehlern ein Warning
- während require() in einem Fatal Error endet
- Verwenden Sie require(), wenn Sie möchten, daß eine fehlende Datei die Ausführung ihres Skripts beendet
- bei include() wird ihr Skript weiterhin ausgeführt
Funktionen
- Eine Funktion ist ein Stück zusammengehörender Code, der es erlaubt, eine bestimmte Aufgabe in wiederverwendbarer Art umzusetzen
- Funktionen werden durch das Schlüsselwort function eingeleitet
- Nach dem Schlüsselwort folgt der Name der Funktion
- Benötigt die Funktion Argumente, schreiben wir Variablennamen in die runden Klammern
- Die Variablennamen werden durch Kommas getrennt
- Auch wenn keine Argumente nötig sind, müssen die runden Klammern geschrieben werden
- Es spielt keine Rolle, wo und wann Funktionen definiert werden
- Aufgerufen werden die Funktionen mit ihrem Namen und den optionalen Argumenten in den runden Klammern
Funktion ohne Argumente
function hallo()
{
echo "<h1>Guten Abend! Willkommen bei der ersten PHP Funktion.</h1>";
}
hallo(); //hiermit rufen wir die Funktion auf
- Die Klammern in der Funktion bleiben leer
- Die Funktion benötigt keine Argumente
Globale Variablen in Funktionen
$vn = 'alex';
function my()
{
global $vn;
echo $vn;
}
my();
- Jede in einer Funktion benutzte Variable ist zunächst auf den lokalen Bereich der Funktion beschränkt
- Global geltende Variablen müssen innerhalb von Funktionen als solche definiert werden
- Globale Variablen werden in der Funktion mit dem Schlüsselwort global definiert
Funktion mit Argument
function ausgabe($text)
{
echo "$text <br>";
}
ausgabe("Dies ist Zeile 1");
ausgabe("Dies ist Zeile 2");
ausgabe("Dies ist Zeile 3");
- Die Funktion ausgabe erwartet einen Parameter
- Innerhalb der Funktion wird die Variable $text mit Zeilenumbruch an den Browser ausgegeben
Funktion mit Rückgabewert
function ausgabe($ZahlEins, $ZahlZwei)
{
$ergebnis = $ZahlEins + $ZahlZwei;
return $ergebnis;
}
echo ausgabe(4,9); =>ergibt 13
- Die Funktion gibt einen Wert mit der Anweisung return zurück
- return unterbricht die Funktionsausführung
- Der Wert wird an den aufrufenden Code zurück gegeben
Funktion mit mehreren Rückgabewerten
function ausgabe($ZahlEins, $ZahlZwei)
{
$sum_ergebnis = $ZahlEins + $ZahlZwei;
$mal_ergebnis = $ZahlEins * $ZahlZwei;
return array($sum_ergebnis, $mal_ergebnis);
}
- Die Funktion gibt ein Array mit der Anweisung return zurück
- list($summe_ergebnis , $mal_ergebnis) = ausgabe(4,9);
- echo "Die Summe ist " . $summe_ergebnis . " die Multiplikation ist " . $mal_ergebnis
- Die Ausgabe ist 13 und 36
- Die Funktion list() weist Variablen zu, als wären sie ein Array
Rekursive Funktion
function countdown($startwert)
{
echo $startwert;
if ($startwert > 0)
{
countdown($startwert-1);
}
}
countdown(8);
- Eine rekursive Funktion ist eine Funktion, die sich so lange selbst aufruft, bis eine bestimmte Bedingung erfüllt ist
Die date() Funktion
- Es gibt verschiedene Zeitzonen und Datum und Uhrzeit werden in vielen Ländern anders angezeigt
- Deutschland: Tag, Monat, Jahr, dagegen in Amerika: Monat, Tag, Jahr
- Die Funktion date() gibt mit einem Parameter das aktuelle Datum aus
- Eine mögliche Formatierungsanweisung: echo date("d.m.Y");
Datums-Formatierungen I
- a. => am oder pm
- A. => AM oder PM
- d. => Tag des Monats mit 2 Stellen und führender Null: 01 bis 31
- D. => Tag der Woche als Abkürzung mit drei Buchstaben: Fri
- F. => Monat, ausgeschrieben: January
- h. => Stunde im 12-Stunden-Format: 01 bis 12
- H. => Stunde im 24-Stunden-Format: 00 bis 23
- g. => Stunde im 12-Stunden-Format ohne führende Null: 1 bis 12
- G. => Stunde im 24-Stunden-Format ohne führende Null: 0 bis 23
- i. => Minuten: 00 bis 59
Datums-Formatierungen II
- j. => Tag des Monats ohne führende Null: 1 bis 31
- l => (kleines L). Wochentag, voll ausgeschrieben: Friday
- L. => Boolescher Wert, der bestimmt, ob das Datum in einem Schaltjahr liegt: 0 oder 1
- m. => Monat mit führender Null: 01 bis 12
- n. => Monat ohne führende Null: 1 bis 12
- M. => Monat als Abkürzung: Jan
- s. => Sekunden mit führender Null: 00 bis 59
- S. => Das Suffix der englischen Ordnungszahlen: th, nd usw
- t. => Anzahl der Tage in einem Monat: 28 bis 31
Datums-Formatierungen III
- U. => Sekunden seit Beginn der Unix-Epoche (1.1.1970)
- w. => Numerische Darstellung des Wochentags: 0 (für Sonntag) bis 6 (Samstag)
- Y. => Vierstellige Ausgabe des Jahres: 1999 oder 2000
- y. => Zweistellige Ausgabe des Jahres: 99 oder 00
- z. => Tag im Jahr: 0 bis 365
- Z. => Differenz zur Zeitzone in Sekunden: -43200 bis 43200. Dies entspricht 12 oder +12 Stunden
Datumsfunktionen
- Die meisten Datumsfunktionen rechnen mit der internen Angabe des Unix-Zeitstempels
- Diese Angabe stellt die Anzahl der Sekunden seit dem 1.1.1970 00:00 Uhr dar
- Die Funktion date() benötigt zwei Argumente
- eine Formatierungsanweisung und eine Zeitinformation als Unix-Zeitstempel
- Fällt der zweite Parameter weg, wird die aktuelle Zeit genommen
Datumsfelder umwandeln
- Der Datentyp date in einer MySQL Datenbank liefert ein Datum mit dem Format (yyyy-mm-dd)
- In PHP wird date von MySQL als String interpretiert
- Diesen String wandeln wir in ein deutsches Format um(dd.mm.yyyy)
- In PHP wird der String in ein Array umgewandelt
- Die Funktion mktime() rechnet die Sekunden vom Unix-Zeitstempel bis zum entsprechendem Datum aus
- mktime(stunde, minute, sekunde, monat, tag, jahr, sz)
- Der Parameter sz ist optional (1=Sommerzeit, 0=Winterzeit, Standardwert=-1)
Cookies
- Netscape führte die Cookies Mitte der neunziger Jahre ein
- Cookies helfen das HTTP Protokoll zu erweitern
- Der Server sagt dem Browser, dass er ein Cookie auf dem Client anlegen soll
- Der Client sendet die Informationen des Cookies an den Server
- Jedoch nur an den Server, von dem es auch angefordert wurde
- Der Server übernimmt nur eine passive Rolle und kann daher nicht manipulieren
- Cookies haben durch Fehlinformationen einen zweifelhaften Ruf
- Cookies kann man im Browser deaktivieren
setcookie()
- Die setcookie() Funktion wird direkt am Anfang aufgerufen
- Erwartet wird ein Muss - und fünf optionale Argumente
- Name des Cookies (muss gesetzt werden!)
- Inhalt des Cookies
- Verfallsdatum (wie lange soll das Cookie gültig sein?)
- Pfadangabe (standardmässig werden Cookies in die davor gesehen Standard Pfade gespeichert)
- Domain (die Webseite woher der Cookie kommt)
- Sicherheitsparameter (leer: dann wird das Cookie unverschlüsselt gesendet, ansonsten HTTPS, das heisst HTTP über SSL)
Cookie Anwendung
- setcookie("versteck", $_POST['Passwort'], time()+900);
- Dieses Cookie hat den Namen $_COOKIE['versteck']
- speichert den Inhalt des Textfeldes Passwort
- und 'stirbt' nach 15 Minuten (900 Sekunden)
- Browser speichert max. 300 Cookies
- Grösse 4 KByte pro Cookie
- 20 Cookies pro Server und Domain
PHP Sicherheit
- Cross-Site Scripting (XSS)
- das X steht im Englischen für Kreuz (= Cross)
- Manipulation von Inhalten über unsichere Eingabefelder
- Versuch fremden Code, wie z.B. JavasScript, auszuführen
- SQL Injection
- richtet sich gegen Datenbankserver
- Änderung von Datenbankabfragen um sich z.B. einzuloggen
- Remote Code Execution
- Ausführen beliebigen PHP-Codes über unsichere Skripte
- Gesamter Webserver wird angegriffen
Verhindern Cross-Site Scripting (XSS)
- Filtern von (X)HTML-Tags
- htmlspecialchars() wandelt Sonderzeichen in (X)HTML-Code um
- strip_tags() entfernt (X)HTML- und PHP-Tags aus einem String
- ENT_QUOTES wandelt einfache als auch doppelte Anführungszeichen um
- Böse Eingabe: <script>alert("XSS");</script>
- $clean_name = htmlspecialchars(strip_tags($_GET['name']), ENT_QUOTES)
- Ausgabe: alert(\"XSS\");
- htmlspecialchars() und strip_tags() sorgen für JavaScript freie Ausgabe
siehe Bsp.: bm.it-openproject.de/test_gast/gastbuch.php o. .../test_sec (Bild einfügen mit $GLOBAL
Erlauben von (X)HTML Tags
- HTML_BBCodeParser Pear
- BBCode ist die Abkürzung für Bulletin Board Code
- Es wird kein unerlaubter Code eingeschleust
- Der Benutzer hat die Möglichkeit Eingaben mit (X)HTML vorzunehmen
- Die Tags werden als eckige Klammern interpretiert
Bulletin=Bericht
Verhindern SQL Injection
- Datenvalidierung hilft SQL Injection zu verhindern
- "SELECT * FROM test WHERE id = '" . (int) $_GET['id'] . "'";
- Zusätliche Anführungszeichen erschwert ebenfalls eine SQL Injection
- mysql_real_escape_string
- Maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung in einer SQL-Anweisung
- AND vorname = '" . mysql_real_escape_string($_GET['name']) . "'";
siehe http://localhost/sicherheit/mysql/sure_sql.php