Web-basierte Anwendungssysteme PHP Teil 2 Prof. Dr. Armin Lehmann (lehmann@e-technik.org) Fachbereich 2 Informatik und Ingenieurwissenschaften Wissen durch Praxis stärkt Seite 1 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Variablen per Request setzen Variablen können durch den Abruf einer URL mit einem HTTP Query String gesetzt werden Ein? leitet den HTTP Query String ein z.b.: http://server/seite.php?var1=wert1&var2=wert2 Name Wert Trennzeichen Seite 2 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Variablen per Request setzen Wie kommt man aber mit PHP jetzt an den Variablennamen und den zugehörigen Wert? Hierzu benötigt man die sogenannten Superglobals: + $GLOBALS + $_SERVER + $_REQUEST + $_POST + $_GET + $_FILES + $_ENV + $_COOKIE + $_SESSION Seite 3 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Superglobals $GLOBALS Ermöglicht durch Referenzieren Zugriff auf globale Variablen <?php $w = 5; function doit() { echo $GLOBALS[ w ]; }?> doit(); Seite 4 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Superglobals $_SERVER Array, indem Informationen wie Header, Pfade und Weiteres beinhaltet sind Einträge werden durch den Webserver generiert: + $_SERVER[ REQUEST_METHOD ] liefert HTTP Methode des Requests + $_SERVER[ REMOTE_ADDR ] gibt IP-Adresse des Anfragenden zurück + $_SERVER['GATEWAY_INTERFACE'] gibt die Version des verwendeten CGI zurück Seite 5 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Superglobals $_POST, $_GET hiermit werden häufig Daten aus Formularen gesammelt $_GET sollte bei einem Aufruf eines neuen HTML-Dokuments genutzt werden, alle Variablen und Werte sind Bestandteil der URL $_POST zum Übertragen von Daten, z.b. Formulareinträgen aber auch Binärdaten in Nachrichten-Body Weitere Superglobals werden besprochen sobald diese benötigt werden Seite 6 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
$_GET-Verwendung z.b. Aufruf einer Seite mit HTTP Query String http://server/test.php?name=hans <?php?> echo <h1>willkommen. $_GET[ name ]. <\h1> ; mehrere Variablen in einem HTTP Query String http://server/test.php?name=hans&pet=dog <?php?> echo <h1>. $_GET[ pet ].. $_GET[ name ]. <\h1> ; Seite 7 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Formulare Dienen zur Eingabe von Nutzerdaten, z.b. Login-Daten Werden durch <form> eingeleitet <form> besitzt zwei Attribute: + method get/post + action Ziel-URL <form action="welcome.php" method="post"> Name: <input type="text" name="name"><br> E-mail: <input type="text" name="email"><br> <input type="submit"> </form> Seite 8 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Formulare Formularseite <html> <body> <form action="welcome.php" method="post"> Name: <input type="text" name="name"><br> <input type="submit"> </form> </body> </html> Antwortseite <html> <body> Welcome <?php echo $_POST["name"];?><br> </body> </html> Seite 9 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Formulare validieren Z.B. muss der Nutzer einen Namen eingeben und eine gültige Email-Adresse Zuerst prüfen wir, ob alle notwendigen Felder ausgefüllt wurden Dies sollte bereits auf der Formularseite realisiert werden Seite 10 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Formulare validieren $nameerr = $emailerr = ""; $name = $email = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_post["name"])) { $nameerr = "Name is required"; } else { $name = $_POST["name"]; } } if (empty($_post["email"])) { $emailerr = "Email is required"; } else { $email = $_POST["email"]; } Seite 11 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Formulare validieren Email-Adressen prüft man am besten mit der Funktion filter_var() Beispiel: $email = $_POST["email"]; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailerr = "Invalid email format"; } Seite 12 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Session Eine Session ist eine zeitgebundene Verbindung zwischen Client und Server Um Informationen über einen Client innerhalb der Dauer einer Session zu speichern, kann die Superglobal $_SESSION verwendet werden Sollen Daten permanent gespeichert werden kommen Datenbanken zum Einsatz Informationen werden serverseitig gehalten Seite 13 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Session Sessions können mit der Funktion session_start() erstellt und erkannt werden Dies wird immer als Erstes im Skript ausgeführt Mit session_unset() warden alle Session-Variablen gelöscht Mit session_destroy() wird die Session aktiv beendet Sonst endet eine Session standardmäßig bei Beenden des Browsers Seite 14 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Session Eine Session-Variable kann z.b. wie folgt gesetzt werden: $_SESSION["StartTime"] = date("r"); Jede Session bekommt vom Server automatisch eine ID zugewiesen Mit session_id() kann diese erfragt oder neu erstellt werden Seite 15 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Cookies Werden oft verwendet, um Nutzer zu identifizieren Sind kleine Textdateien, die auf dem Anwenderrechner hinterlegt werden Hierdurch weiß z.b. Amazon oder Google wonach Sie zuletzt gesucht haben Seite 16 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Cookies Mit der Funktion setcookie() kann ein neuer Cookie erzeugt werden setcookie(name, value, expire, path, domain, secure, httponly) name muss gesetzt werden, ist der Name des Cookie-Eintrags value Wert des Cookie-Eintrags expire Ablaufdatum des Cookies in Sekunden path Nur für Pfade innerhalb der Domain einschränken domain einschränken auf spezielle Domain secure nur Zugriff falls HTTPS verwendet wird httponly Skripte können nicht darauf zugreifen Seite 17 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17
Cookies Beispiel setcookie( WebApp, Vorlesung, time() + 3600, "/"); Mit der Funktion setcookie() werden auch Werte innerhalb des Cookies geändert oder gelöscht Um auf Werte zugreifen zu können, wird $_COOKIE[ cookie_name ] verwendet Seite 18 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17