54
06.11.18 1 Webtechnologien - WS 2018/19 - Teil 6/PHP I Webtechnologien Teil 6: Einführung in PHP

Webtechnologien Teil 6: Einführung in PHPwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-06/06-WT-PHP-I-1.pdfWebtechnologien - WS 2018/19 - Teil 6/PHP I 2 Literatur [6-1]

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

06.11.18 1Webtechnologien - WS 2018/19 - Teil 6/PHP I

Webtechnologien

Teil 6: Einführung in PHP

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

54Webtechnologien - WS 2018/19 - Teil 6/PHP I

Nach dieser Anstrengung etwas Entspannung...