Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
2Webtechnologien - WS 2018/19 - Teil 6/PHP I
Literatur
[6-1] Lubkowitz, Mark: Webseiten programmieren und gestalten. Galileo, 2003
[6-2] Möhrke, Carsten: Besser PHP programmieren. Galileo, 4. Auflage, 2012
[6-3] Samar, Richard et al.: PHP de Luxe. mitp, 4. Auflage, 2004
[6-4] Möhrke, Carsten: PHP PEAR. Galileo, 2005
[6-5] Lerdorf, Rasmus; Bergmann, Sebastian; Hicking, Garvin: PHP kurz&gut. O'Reilly, 3. Auflage, 2006
[6-6] Bergmann, Sebastian: PHPUnit kurz&gut. O'Reilly, 2006
[6-7] Reimers, Stefan; Thies, Gunnar: PHP 5.3 & MySQL 5.1. 2. Auflage 2009
[6-8] Sklar, David; Trachtenberg, Adam: PHP5 Kochbuch. O'Reilly, 3. Auflage, 2009
[6-9] Schmidt, Stephan: PHP Design Patterns. O'Reilly, 2. Auflage, 2009
3Webtechnologien - WS 2018/19 - Teil 6/PHP I
Literatur im Web
[W1] Grundlegende Dokumentation:http://www.php.nethttp://www.php.net/docs.php
[W2] http://de.wikipedia.org/wiki/PHP
[W3] Tipps und Code-Schnipsel:http://www.selfphp.info/de/extras/download.php
[W4] Erstes Tutorial (Deutsch): http://de.php.net/tut.php
[W5] http://php.net/manual/de/migration70.php http://php.net/manual/de/migration71.php http://php.net/manual/de/migration72.php
Webtechnologien – SS 2018 - Teil 6/PHP I
4Webtechnologien - WS 2018/19 - Teil 6/PHP I
Übersicht
• Geschichte
• Datentypen
• Zugriff auf Formulardaten
• Kontrollstrukturen
• Funktionen
5Webtechnologien - WS 2018/19 - Teil 6/PHP I
Geschichte
In diesen Foliensätzen wird die PHP-Version 7.2.* behandelt.
1994 PHP/FI von Rasmus Lerdorf 2009 PHP Version 5.3
1995 PHP/FI 2.0 2012 PHP Version 5.4
1998 PHP Version 3 2013 PHP Version 5.5
2000 PHP Version 4 2014 PHP Version 5.6
2004 PHP Version 5 2015 PHP Version 7.0
2016 PHP Version 7.1
2017 PHP Version 7.2
PHP = Personal Home Page Tools (ursprünglicher Name)PHP = PHP Hypertext Processor (aktueller Name)
6Webtechnologien - WS 2018/19 - Teil 6/PHP I
Ein paar Statistiken I – November 2018
Aus:https://www.tiobe.com/tiobe-index/
TIOBE ProgrammingCommunity Index
7Webtechnologien - WS 2018/19 - Teil 6/PHP I
Ein paar Statistiken II – November 2018
TIOBE ProgrammingCommunity Index
Aus:https://www.tiobe.com/tiobe-index/
8Webtechnologien - WS 2018/19 - Teil 6/PHP I
Ein paar Statistiken III – Januar 2018
Aus:https://news.netcraft.com/archives/2018/02/13/february-2018-web-server-survey.html
9Webtechnologien - WS 2018/19 - Teil 6/PHP I
Ein paar Statistiken IV – November 2018
Aus:http://w3techs.com/
Sprachen im Browser
Frameworks im BrowserFrameworks im Browser
Sprachen im Server
Server
Server-Betriebssysteme
10Webtechnologien - WS 2018/19 - Teil 6/PHP I
Einsatz von PHP
• Als eigenständiges Programm: Dies wird hier nicht behandelt.
• Zusammen mit HTML
– innerhalb des Webservers (Apache, Modul mod_php)
– als Skript in einem separierten Prozess (nicht behandelt)
• Die Skripte werden auf den Web-Server gebracht, indirekt vom Browser per HTTP aufgerufen und auf dem Server ausgeführt.
• Die Ausgabe der PHP-Routinen wird dann zum Browser geschickt.
<?php ...PHP-Code... ?>
Einbinden von PHP in die html-Datei
11Webtechnologien - WS 2018/19 - Teil 6/PHP I
Syntax
• Jeder Befehl wird mit einem Semikolon abgeschlossen.
• Datei-Endung ist .php
• Groß-/Kleinschreibung spielt in den meisten Fällen eine Rolle.
• Kommentare:
<?php# Kommentar bis Zeilenende
?>
<?php// Kommentar bis Zeilenende
?>
<?php/* Kommentar über mehrere Zeilen */
?>
12Webtechnologien - WS 2018/19 - Teil 6/PHP I
Das erste Programm bzw. die erste Seite I
<html>... ...<body> <?php
echo "Hallo world!<br>";?></body> </html>
• Alles außerhalb <?php … ?> geht direkt an den Browser.
• echo gibt den Parameter aus. Es ist auch eine durch Kommata getrennte Liste von Parametern möglich, die aneinander gereiht ausgegeben werden.
• echo kann mit oder ohne Klammern aufgerufen werden: mit Klammern ist aber nur ein Parameter möglich, keine Parameterliste.Z.B. echo("Hallo world! <br>");
• Zeichenketten werden in "" gestellt.
• Der Output aus PHP wird gemischt mit den HTML-Teilen in der Reihenfolge von vorn nach hinten an den Browser gesendet.
13Webtechnologien - WS 2018/19 - Teil 6/PHP I
Das erste Programm bzw. die erste Seite II
<html>……… <body><p> Das ist mein erstes PHP-Skript
<?php echo "Hallo world!<br>";?>
<p> und das wars schon.</body> </html>
<html>……… <body><p> Das ist mein erstes PHP-Skript
<p> und das wars schon.</body> </html>
Hallo world!<br> PHP-Prozessor
14Webtechnologien - WS 2018/19 - Teil 6/PHP I
Variablen und deren Deklaration
• Variablennamen beginnen immer mit "$" gefolgt von "_" oder einem Buchstaben. Dann folgen nur noch folgende Zeichen: "a-zA-Z0-9_"
• Groß-/Kleinschreibung unterscheidet!
• Variablen werden normalerweise nicht deklariert, es gibt aber Ausnahmen.Ab PHP 7 können auch Parameter mit einem Typ deklariert werden.
• Variablen haben den Typ aus der rechten Seite der letzten Zuweisung.
• Beispiele für Variablen
$Vorname
$a
15Webtechnologien - WS 2018/19 - Teil 6/PHP I
Zuweisungen
$Variable= Ausdruck;
• Zuweisungen wie in C, Java und JavaScript
• Beispiele:
$Vorname= "Elvira";
$a= 10+100; // $a hat dann den Wert 110
$a= $a+1; // $a hat nun den Wert 111
$a= $b." "; // $a hat den Wert von b mit
// einem Blank angehängt
• Die Variable hat anschließend den Typ der rechten Seite der Zuweisung.
• Jede Zuweisung hat als Wert den Wert des Ausdrucks auf ihrer rechten Seite, die wiederum Teil eines umfassenden Ausdrucks sein kann.
16Webtechnologien - WS 2018/19 - Teil 6/PHP I
Elementare Datentypen (Primitive Datentypen)
Datentyp Beispiele für Werte Größe
Integer 23, -4, 0377 (Oktal),0xFF (Hexadezimal)
0b01010001 (Binär)
32 bit (Windows)
64 bit(falls möglich)
Double 3.1415, -2.2, 1.678e23, -2.4e-6 64 bit, IEEE754
Boolean • Für alle Werte außer 0: true
• Für 0-Werte: false
Operator Erläuterung
+ Addition
- Subtraktion
* Multiplikation
/ Division
% Modulo
17Webtechnologien - WS 2018/19 - Teil 6/PHP I
Strings I
• Strings werden mit " oder mit ' geklammert:
– "…": Interpretation der Variablen im Stringz.B. $a= 10; $b= "$a Flaschen";$b enthält den String '10 Flaschen'
– '…': Keine Interpretation des Inhaltesz.B. $a= 10; $b= '$a Flaschen';$b enthält den String '$a Flaschen'
• Aneinanderreihung von Strings durch einen Punkt ("."):
$a= "Hallo "."Welt"; // ergibt: 'Hallo Welt'
18Webtechnologien - WS 2018/19 - Teil 6/PHP I
Strings II
• Namen von Variablen können und müssen manchmal mit {} geklammert werden, z. B.
$typ= 'Hoch'; $HS= "$typschule" ergibt '' $HS= "${typ}schule" ergibt 'Hochschule'
$typ= 'Grund';$GS= "${typ}schule" ergibt 'Grundschule'
$NN= '${typ}schule' ergibt '${typ}schule'
• Sonderzeichen "\" als Fluchtzeichen (Escape) nur in "…":
Zeichen Erläuterung Zeichen Erläuterung
\n Newline \$ $-Zeichen
\r Return \" "-Zeichen
\t Tabulator \077 Oktaler Wert
\\ \ selbst \xFF Hex-Wert
Hinweis:Es gibt keinBackspace (\b).
19Webtechnologien - WS 2018/19 - Teil 6/PHP I
Vergleichsoperatoren
Operator Erläuterung ergibt wahr wichtig
< kleiner 3<7
<= kleiner gleich 5.7<=10e4
> größer 3>2.9
>= größer gleich 3>=3.0
== gleich 9 == "9" Typanpassung!
!= ungleich 9!="s"
=== identisch 9 === 9 Keine Anpassung
!== nicht identisch 9 !== "9" Keine Anpassung
Beispiel Ergebnis
9 == "9" wahr
9 === "9" falsch
9 === 9 wahr
0x9 === 9 wahr
9.0 === 9 falsch
Die Identität erfordert, dass nebendem Wert auch der Typ gleich seinmuss.
20Webtechnologien - WS 2018/19 - Teil 6/PHP I
Zuweisungen mit Operatoren
Operator Beispiel Ergebnis nach $a= 9;
+= $a+= 1; 10
-= $a-= 1; 8
*= $a*= 2; 18
/= $a/= 2; 4,5
%= $a%= 2; 1
.= $a.= "zig"; "9zig"
Typisch:
$a= "Guten Tag!";$a.= "<br>";
Diese Form der String-Zusammensetzungist sehr beliebt – aber: Vermeiden Sie das!
21Webtechnologien - WS 2018/19 - Teil 6/PHP I
Logische Operatoren
PHP PHP Erläuterung Java
and && Logisches Und &&
or || Logisches Oder ||
xor Logisches Exklusiv-Oder
! Negation !
Beispiel
($a!=0) and ($b=="Evelyn")($a!=0) && ($b=="Evelyn")
Siehe dazu: http://www.php.net/manual/de/language.operators.logical.php
Achtung! Die gleichen Operatoren &&/and und ||/or haben eineunterschiedliche Bindungsstärke!Immer Klammern setzen!
22Webtechnologien - WS 2018/19 - Teil 6/PHP I
Konvertierung von Typen
• Werte werden in den "erwarteten" Typ konvertiert.
• Innerhalb von Ausdrücken nach Integer, wenn ein Teil ein Integer ist, sonst Double, wenn ein Teil vom Typ Double ist.
Ausdruck Ergebnis
"3" + "4" 7
"3" . "4" "34"
"3" - "Eier" 3, da 3-0
"3 Äpfel"*"12 Birnen" 36
Bei der Konvertierung von String nach Integer wird von linksnach rechts solange konvertiert wie eine sinnvolle Zahl von linksnach rechts gelesen existiert. Startwert ist 0.
23Webtechnologien - WS 2018/19 - Teil 6/PHP I
Konvertierung nach Boolean
Bedeutung Werte anderer Typen Typ
false 0 Integer
0.0 Double
"0" (ist Integer 0 (!)) String
"" (Leerer String) String
'' (Leerer String) String
Leeres Array Array
Leeres Objekt Object
Alles andere bedeutet true.
24Webtechnologien - WS 2018/19 - Teil 6/PHP I
Abfragen des Typs I
Funktion True, wenn Variable
is_long(Variable) vom Typ long ist
is_double(Variable) vom Typ double ist
is_string(Variable) vom Typ string ist
is_array(Variable) ein Array ist
is_object(Variable) ein Object ist
is_bool(Variable) vom Typ bool ist
Funktionen zum Abfragen des Typs einer Variablen:
gettype(Variable) liefert den aktuellen Typ als String, bestimmt ihn aber nicht.
Diese Funktion sollte eigentlich nicht verwendet werden, da der Rückgabe-wert in Zukunft geändert werden könnte.Siehe dazu: http://de3.php.net/manual/de/function.gettype.php
25Webtechnologien - WS 2018/19 - Teil 6/PHP I
Abfragen des Typs II
Funktion True, wenn
is_null(Variable) Variable den NULL-Wert hat
isset(Variable) Variable keinen NULL-Wert hat
Der Null-Wert ist auch gleich der einzige Wert des Typs Null.
Ein Zuweisung von null
Funktionen zum Abfragen von Werten einer Variablen:
• an ein Variable: erhält den Wert Null, bleibt aber erhalten
• an ein Objekt: Vernichtung diese Objekts
• an ein Array-Element: erhält den Wert Null, bleibt aber erhalten
26Webtechnologien - WS 2018/19 - Teil 6/PHP I
Typumwandlungen / Cast
Cast Umwandlung in
(bool),(boolean) Boolean
(int), (integer) Integer
(real), (double), (float) Double
(string) String
(array) Array
(object) Objekt
cast-Operatoren:
Mit diesen Operatoren werden explizit die Typen innerhalb von Ausdrücken festgelegt.
Siehe dazu:http://www.php.net/manual/de/language.types.type-juggling.php
27Webtechnologien - WS 2018/19 - Teil 6/PHP I
Array
• Es gibt nur 1-dimensionale Felder mit einem positiven Integer-Index.
• Der Index läuft von 0 bis zur Größe -1.
• Auf Array-Elemente wird durch Name[Expression] zugegriffen.
• Arrays werden durch elementweises Zuweisen erstellt:
• Dasselbe in einem Stück und in gleichwertigen Versionen:
$a[0]= "Hallo";$a[1]= "Gerhardt";$a[2]= "!";
$a[]= "Hallo";$a[]= "Gerhardt";$a[]= "!";
Das Weglassen der Indexe bewirkt ein hinten Anhängen miteinem gleichzeitigen Erhöhen des höchsten Indexes.
$a= array("Hallo","Gerhardt","!");
$a= ["Hallo","Gerhardt","!"]; Verkürzte Form
28Webtechnologien - WS 2018/19 - Teil 6/PHP I
Hash als spezielles Array
• Ein Hash ist ein Array, wobei der Index ein String ist. Oder anders formuliert: Die Elemente haben einen Namen.
• Auf Hash-Elemente wird durch Name['String'] zugegriffen.
• Ein Hash wird als Menge von Paaren (Index, Value) aufgefasst.
• Hashs werden durch elementweises Zuweisen erstellt:
• Dasselbe in einem Stück:
$b= array("Anrede"=>"Frau","Vorname"=>"Elvira", "Nachname"=>"Meier-Vormann");
$b= ["Anrede"=>"Frau","Vorname"=>"Elvira", "Nachname"=>"Meier-Vormann"];
$b["Anrede"] = "Frau";$b["Vorname"] = "Elvira";$b["Nachname"]= "Meier-Vormann";
Verkürzte Form
29Webtechnologien - WS 2018/19 - Teil 6/PHP I
Array und Hash
• Der Typ von Array/Hash-Elementen kann innerhalb eines Arrays/Hashs beliebig verschieden sein.
• 2- oder mehrdimensionale Felder müssen – wie in Java – stückweise zusammengebaut werden, denn es gibt nur Vektoren.
• Arrays und Hashs werden intern gleich implementiert, d.h. es handelt sich um eine lineare Liste, die aus Paaren von einem Schlüssel (Key, Indexwert) und dem Wert bestehen – genauso wie in JavaScript.
• Es können "Lücken" im Array vorhanden sein, die beim Zugriff in For-Schleifen beachtet werden müssen: wenn auf diese Lücken zugegriffen wird, gibt es eine Exception.
30Webtechnologien - WS 2018/19 - Teil 6/PHP I
if
• Wenn nur ein Befehl im then- oder else-Teil vorkommt, könnten auch die {} weggelassen werden (was zu vermeiden ist).
if(Ausdruck) { ....}
if(Ausdruck) { ....} else { ....}
31Webtechnologien - WS 2018/19 - Teil 6/PHP I
switch
• Das Switch-Konstrukt ist wie in C/C++/Java.
• Fehlt das break, werden die direkt folgenden Statements ausgeführt.
switch(Ausdruck) { case Wert: .... break; case Wert: .... break; .... default: ....}
switch(Ausdruck) { case Wert: case Wert: .... break; .... default: ....}
32Webtechnologien - WS 2018/19 - Teil 6/PHP I
while
• Auch hier dieselbe Semantik wie in C/C++/Java.
do { .... ....} while(Ausdruck);
while(Ausdruck) { .... ....}
33Webtechnologien - WS 2018/19 - Teil 6/PHP I
for
• Auch hier wieder dieselbe Semantik wie in C/C++/Java.
• break bricht die Schleife ab.
• continue springt zur Abbruchabfrage Ausdruck zurück.
for(Start; Ausdruck; Veränderung) { .... ....}
34Webtechnologien - WS 2018/19 - Teil 6/PHP I
foreach
• Hier wird die Schleife immer für jedes Element durchlaufen, wobei $Variable die Laufvariable bzw. $Key der "Schlüssel" zur Laufvariablen ist.
• Feld ist etwas, das als Array oder Hash interpretiert werden kann.
• Die erste Form wird bei Arrays, die zweite bei Hashs benutzt.
• Dies entspricht der For-In-Schleife bei JavaScript (und auch Java).
• Wenn ein Array Löcher haben kann, sollte möglichst diese Form der Schleife benutzt werden, da diese Schleife alle Löcher automatisch überspringt.
foreach(Feld as $Variable) { ....}
foreach(Feld as $key => $Variable) { ....}
Array
Hash
35Webtechnologien - WS 2018/19 - Teil 6/PHP I
Funktionen I
• In PHP können Funktionen an beliebiger Stelle definiert werdenEmpfehlung: Deklarieren am Anfang an zentraler Stelle
• Parameter werden per Call-By-Value übergeben,d.h. die Werte der Parameter werden kopiert.
• Es ist aber möglich die Adresse des Parameters mit & zu übergeben - das gilt analog auch für das Funktionsresultat.
• Sonderregelung bei den Objekten! Objekte werden immer per Adresse übergeben, nie als Kopie – also wie in Java.
function Name($arg1, $arg2, $arg3,.., $argN) { .....}
function Name($arg1, $arg2, $arg3,.., $argN) { ..... return Ausdruck;}
36Webtechnologien - WS 2018/19 - Teil 6/PHP I
Funktionen II
• Parameter mit Defaultwerten können dann beim Aufruf weggelassen werden.
• Wenn Parameter ohne Default-Werte beim Aufruf weggelassen werden, dann haben diese im Funktionskörper keinen Inhalt.Dies muss in der Funktion explizit geprüft werden.
• Jede Funktion kann mit beliebig vielen Parametern mit beliebigen Werttypen aufgerufen werden – unabhängig von der Deklaration.Die aufgerufene Routine muss dies berücksichtigen. Es gibt aber einen Mechanismus, um dies zu verhindern: ab PHP 7
function Hello($Name= "Helmut") { echo "Hallo ".$Name;}
Hello(); // gibt "Hallo Helmut" ausHello("Hanna"); // gibt "Hallo Hanna" aus
37Webtechnologien - WS 2018/19 - Teil 6/PHP I
Type Hints ab PHP 7 I
string
int
float
bool
array
Klassennamen
Interface
declare(strict_types=1);
function add(int $a, int $b) { return $a + $b;}function sub(int $a, int $b): int { return $a - $b;}$u= add(10,20);$v= sub(26,9);echo '$u='.$u.' $v='.$v;
Ausgabe: $u=30 $v=17
Es ist möglich, wie in anderenProgrammiersprachen für dieParameter und Resultate vonFunktionen Typen anzugeben.
Folgende Typen sind möglich:
Dies ist aber nur möglich, wenn als erstes die declare-Anweisung wie obenangegeben wird.
38Webtechnologien - WS 2018/19 - Teil 6/PHP I
Type Hints ab PHP 7.1 II
function writeHW(bool $what): ?string{ if($what) { return 'Hallo World'; } else { return null; }}var_dump(writeHW(true));var_dump(writeHW(false));
function write(?string $str){ var_dump($str);}write('Hello');write(null);
string(11) "Hallo World"NULL
string(5) "Hello"NULL
Wenn statt eines Wertes vom erwarteten Typ ein Null auch geliefert bzw.übergeben werden kann, wird dies durch ein vorlaufendes ? gekennzeichnet.
39Webtechnologien - WS 2018/19 - Teil 6/PHP I
Type Hints ab PHP 7.1 III
function swap(&$left, &$right): void{ if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp;}$a = 1;$b = 2;var_dump(swap($a, $b), $a, $b);
Die Routine swap tauscht diebeiden Variablen, die mit Call-by-Reference übergebenwurden (&).Diese Routine liefert immer null.
Quelle:http://php.net/manual/de/ migration71.new-features.php
NULLint(2)int(1)
Ist der Return-Typ mit void deklariert, so darfein return-Statement fehlen oder es wird ohneeinen Parameter benutzt.
40Webtechnologien - WS 2018/19 - Teil 6/PHP I
Ausgabe-Routinen
echo $Stringprint $String
Gibt den String auf der Console aus.
var_dump(Expression) Gibt den Ausdruck samt Typ formatiert aus.http://php.net/manual/de/function.var-dump.php
var_export(Expression) Gibt den Ausdruck samt Typ so formatiert aus, dass dieser der PHP-Syntax entspricht http://de2.php.net/manual/de/function.var-export.php
Zur Ausgabe von Arrays oder Hashs ist var_export() sehr gut.
41Webtechnologien - WS 2018/19 - Teil 6/PHP I
Variablen als "Funktionen"
function func() { ....}$fcall= "func";$fcall();
Damit lassen sich eine Art Zeiger auf Routinen realisieren.Nur wenn es anders nicht oder nur sehr aufwendig geht, solltediese Konstruktion benutzt werden.
!
42Webtechnologien - WS 2018/19 - Teil 6/PHP I
Geltungsbereich von Variablen in PHP I
• Links wird nichts ausgegeben, denn die Variable $str in Ausgabe() ist lokal, rechts ist sie global; daher wird dort "Hallo World!" ausgegeben.
• Globale Variablen werden außerhalb von Funktionen deklariert und benutzt, aber nicht innerhalb von Funktionen - es sei denn sie werden dort mit dem Schlüsselwort global deklariert.
• Merke:Der erste Zugriff auf eine nicht vorhandene Variable erzeugt diese in dem Kontext dieses Zugriffs, also lokal oder global.
• Die Arrays $_GET[] oder $_POST[] sind überall global und können lokal ohne Deklaration benutzt werden.; daher heißen diese superglobal.
function Ausgabe() { echo $str;}$str= "Hallo World!";Ausgabe();
function Ausgabe() { global $str; echo $str;}$str= "Hallo World!";Ausgabe();
43Webtechnologien - WS 2018/19 - Teil 6/PHP I
Geltungsbereich von Variablen in PHP II
• Mit static wird eine lokale Variable mit einer Lebenszeit des gesamten Skripts deklariert.
function Counter() { static $cnt= 0; if($cnt==0) { echo "Erster Aufruf!\n"; } else { echo "Schon $cnt mal aufgerufen.\n"; } $cnt++;}Counter();Counter();Counter();Counter();
Erster Aufruf!Schon 1 mal aufgerufen.Schon 2 mal aufgerufen.Schon 3 mal aufgerufen.
44Webtechnologien - WS 2018/19 - Teil 6/PHP I
Bemerkung über Deklaration
• In PHP werden Variablen häufig nicht deklariert.
• Aber Sie sollten so viel wie möglich mit Type Hints, also der Deklaration von Funktionsparametern arbeiten!
• In folgenden Ausnahmen muss deklariert werden:
– Variablen als Parameter
– Globale Variablen sollen lokal verwendet werden.
– Lokale Variablen sollen static (statisch) sein.
– (Bei den den Klassen gibt es noch weitere Ausnahmen)
45Webtechnologien - WS 2018/19 - Teil 6/PHP I
Einfügen externer Dateien I
• An der Aufrufstelle werden die Dateien als dorthin kopiert betrachtet.Dies bedeutet, dass an allen Stellen im PHP-Skript, also auch in Kontrollkonstrukten, include bzw. require verwendet werden darf.
• Bei beiden Konstrukten wird zu Beginn der Datei Filename in den HTML-Modus gewechselt; daher sind die PHP-Start-/Ende-Tags(<?php ... ?>) in den angegebenen Dateien erforderlich.
• Besonderheit von include: Trotz Fehlern wird weiter gearbeitet
• Besonderheit von require: Bei Fehlern erfolgt Abbruch.
• Beide können mehrfach – auch geschachtelt - ausgeführt werden.
require(Filename);include(Filename);
require("Prefix.inc.php");include("Deklaration.inc.php");
46Webtechnologien - WS 2018/19 - Teil 6/PHP I
Einfügen externer Dateien II
• Varianten, die dafür sorgen, dass die angegebene Datei nur ein einziges Mal geladen und ausgeführt wird, unabhängig davon wie viele require/includes mit dieser Datei ausgeführt werden.
• Alles andere ist genauso wie bei den Versionen ohne "_once".
•
require_once(Filename);include_once(Filename);
require_once("Prefix.inc.php");include_once("Deklaration.inc.php");
47Webtechnologien - WS 2018/19 - Teil 6/PHP I
Die Schichten (Tiers) einer Web-Anwendung
• Schicht 1: Browser
• Schicht 2a: Web-Server
• Schicht 2b: Skripte, hier in PHP
• Schicht 3: Datenbank(-Server)
• Die Schichten werden manchmal auch Tiers genannt.
• CGI = Common Gateway Interface
48Webtechnologien - WS 2018/19 - Teil 6/PHP I
Schnittstelle zwischen Server und Skript (CGI)
Web-Server
PHP-Processor
Schnitt-stelleerstellt(2)
read(1) ruftauf(3)
Die Schnittstellebesteht aus Hashs:
$_GET[] Formulardaten
$_POST[] Formulardaten
$_SERVER[] Daten über Webserver
$_COOKIE[] Cookies
$_ENV[] Daten über Umgebung
$_SESSION[] Session-Variablen
$_FILES[] Hochgeladene Dateien
benutzt(4)
Diese Hashs sind superglobal,d.h. sie brauchen nicht deklariert zu werden.
49Webtechnologien - WS 2018/19 - Teil 6/PHP I
Beispiele für Server-Variablen
Variable Bedeutung
$_SERVER['PHP_SELF'] Pfadname zum Skript selbst
$_SERVER['HTTP_HOST'] Name, IP-Adresse des Geräts mit dem Server
$_SERVER['HTTP_USER_AGENT'] Browsernamen
$_SERVER['HTTP_REFERER'] Vorherige URL beim Browser
$_SERVER['REMOTE_ADDR'] Name, IP-Adresse des Browsers
$_SERVER['SCRIPT_FILENAME'] Absoluter Pfadname des Skripts
$_SERVER['HTTPS'] Wird gesetzt, wenn mit https zugegriffen wird
Siehe dazu: http://php.net/manual/en/reserved.variables.server.php
50Webtechnologien - WS 2018/19 - Teil 6/PHP I
Daten aus Formularen I
• Der Name des INPUT-Tags ist Name des PHP-Hashs mit dem Inhalt des INPUT-Tags.
• Beispiel:
<form action="ID.php" method="get"> Name: <input type="text" name="user"/><br/> Passwort:<input type="text" name="password"/><br/> <input type="submit" value="Login"/></form>
Im Skript ID.php sind damit die Variablen $_GET['user'] und$_GET['password'] gesetzt.
Wird mit der Methode POST gearbeitet, so heißen die Variablen:$_POST['user '] und $_POST['password']
51Webtechnologien - WS 2018/19 - Teil 6/PHP I
Daten aus Formularen II
• Dies geht auch bei Mehrfachauswahl mit Feldern:
<form action="pizza.php" method="post">Pizza mit
<select name="Zutaten[]" size="3" multiple> <option>Peperoni</option> <option>Schnittlauch</option> <option>Spaghetti</option></select><input type="submit" value="Bestellen"/>
</form >
Dann existiert ein Array mit den selektierten Werten, aufdas mit $_POST['Zutaten'] zugegriffen werden kann.Z.B. $zutaten= $_POST['Zutaten'];$zutaten[0] // Zugriff auf die 1. ZutatAber auf die Array-Grenzen achten!
52Webtechnologien - WS 2018/19 - Teil 6/PHP I
Daten aus Formularen III
Variable Beispiel Erläuterung
$_GET $_GET['Vorname'] Zugriff auf Formularelemente
$_POST $_POST['PLZ'] Zugriff auf Formularelemente
$_REQUEST $_REQUEST['Vorname'] Zusammenfassung von $_GET, $_POST und $_COOKIE
$_FILES $_FILES['Datei'] Enthält Informationen über hoch geladene Dateien
53Webtechnologien - WS 2018/19 - Teil 6/PHP I
Superglobal
• Die aufgeführten Hash/Variablen sind global und brauchen nicht deklariert zu werden. Dies wird als superglobal bezeichnet.
• Aus Sicherheitsgründen sollte der Zugriff auf die Formulardaten immer über den vorgestellten Mechanismus erfolgen.
• Noch besser ist der Zugriff über Filterfunktionen:
– http://php.net/manual/de/function.filter-input.php
– https://www.w3schools.com/php/func_filter_input.asp
– http://www.php-tagebuch.de/get-und-post-variablen-sicher-auslesen