Web-Anwendungen programmieren mit PHP
↓ Überblick
↓ Relevante Merkmale
↓ Funktionsweise
↓ Einbinden von PHP
↓ Variablen und Datentypen
↓ Besondere Variablen
↓ Datums- und Zeitfunktionen
↓ PHP und Formulare
↓ PHP-Frameworks
↓ Ein Wort zur Sicherheit (Überblick)
Überblick
- ursprünglich: "Personal Home Page Tools"
- heute: "PHP Hypertext Processor"
- Skriptsprache für dynamische Webseiten
- wesentliche Basis von Portal-Software, Content Management Systemen usw.
- Eigenschaften einer simplen, leicht erlernbaren Programmiersprache
- Open Source Software, GPL-Lizenz
Relevante Merkmale
- Spezialanweisungen im Web-Dokument
- an beliebiger Stelle im Web-Dokument platzierbar
- stets mit Semikolon abschliessen
- werden vom Web-Server interpretiert
- das so generierte Dokument wird an Browser ausgeliefert
- PHP-Code bleibt somit vor Betrachter verborgen! → er sieht nur "fertiges" Web-Dokument
- PHP läuft durch ein Zusatz-Modul auf allen bekannten Web-Servern
- Sprachelemente: Variablen, einfache und komplexe Datentypen, Operatoren, Kontrollstrukturen, vielfältige Funktionen, . . .
- Vielzahl von Datenbank(format)en unterstützt!
- Beispiel: mySQL - sehr schnelle, stabile Datenbank
- somit PHP ideal für Zugriff auf (große) Datenbestände vom Web-Browser aus
- aber auch viele andere "kleinere" Anwendungen denkbar:
Formulare, Datum letzte Änderung, Statistik mit Bildgenerierung, Zugriffszähler (wieviele Zugriffe erfolgten auf mein Web-Dokument), Gästebuch bzw. Blog (-Server) u.v.a.m.!
Funktionsweise
Einbinden von PHP
a) direkte Einbindung ins Web-Dokument
Web-Dokument, vom Web-Server interpretiert:<html> <head> <title>PHP-Test</title> </head> <body> <?php echo "<h3>Hallo, liebe PHP-Freaks!</h3>"; ?> </body> </html> |
<html> <head> <title>PHP-Test</title> </head> <body> <h3>Hallo, liebe PHP-Freaks!</h3> </body> </html> |
Hallo, liebe PHP-Freaks! |
b) Aufruf eines separaten PHP-Skriptes
- alle PHP-Anweisungen in eine Datei - ein sog. PHP-Skript - abspeichern
- Web-Server muss Zugriff auf Skript haben, um es abarbeiten zu können
- das Skript wird in ein Web-Dokument eingebunden; Varianten:
- Aufruf per Hypertextlink, z.B. skript_einbinden.php
(und so sieht das Skript aus: Quellcode) - per Submit-Button - siehe Beispiel bei "PHP und Formulare"
- Aufruf per Hypertextlink, z.B. skript_einbinden.php
Variablen und Datentypen
- PHP-Variablen mit $ (gefolgt vom Namen)
gekennzeichnet: $variablenname
Beispiel: $summe - Variablen zu vereinbaren ist nicht notwendig
- Werte einfach zuweisen
- bei wiederholtem Aufruf desselben PHP-Skriptes bleiben Variablenwerte erhalten - persistente Speicherung!
- Datentypen: Ganzzahl, Dezimalzahl, Zeichenkette, Feld
- automatische Datentyp-Festlegung und -konvertierung
<?php $farbe = "rot!"; $zahl = 5; $string1 = "Max sieht"; $string2 = "vor 12!"; echo "$zahl $string2 $string1 $farbe"; ?> | 5 vor 12! Max sieht rot! |
<?php $feld = array(5, " vor 12!", " Max sieht", " rot!"); foreach ($feld as $wert) { echo "$wert"; } ?> | 5 vor 12! Max sieht rot! |
Aufgabe 1:
Wie im vorherigen Beispiel sollen die Werte der Elemente
eines Feldes ausgelesen werden.
Verwenden Sie dafür aber die Funktion
for anstelle von
foreach. |
Besondere Variablen
Es gibt zahlreiche vordefinierte, sehr nützliche Variablen in PHP:- Server-Umgebungsvariable: $_SERVER['NAME']
- Formular- und Cookiedaten: $_REQUEST['name'] bzw. detalliert:
$_GET['name'], $_POST['name'], $_COOKIE['name'] - Abfrage aller vordefinierter Variablen (und mehr): phpinfo()
Datums- und Zeitfunktionen
Beispiel: Ausgabe aktuelles Datum<?php $heute = date ("d.m.Y"); echo "Heute ist der $heute"; ?> Verkürzte Schreibweise: echo "Heute ist der ". date ("d.m.Y"); | Heute ist der 29.11.2024 |
<?php echo "Am " . date("d.m.Y H:i:s", getlastmod()) . " erfolgte die letzte Änderung dieses Dokumentes."; ?> | Am 27.02.2013 14:33:57 erfolgte die letzte Änderung dieses Dokumentes. |
Dabei bezieht sich getlastmod() stets auf das aktuelle Dokument. Um das Datum der letzten Änderung eines anderen Dokumentes zu ermitteln, kann z.B. die Funktion filemtime() verwendet werden. Das funktioniert natürlich nur, wenn der Web-Server die entsprechenden Zugriffsrechte hat.
Aufgabe 2: Wie müsste ein Web-Dokument aussehen, das mit PHP folgende Ausgabe erzeugt: Am Wochentag, den Tag.Monat.Jahr um Stunde:Minute:Sekunde Uhr wurde dieses Dokument vollständiger URL des Dokumentes zum letzten Mal geändert. Hinweis: Um den vollständigen URL zu erhalten, muss eine spezielle PHP-Variable abgefragt werden - siehe phpinfo(). |
PHP und Formulare
- mit PHP lässt sich sehr bequem auf die Werte der Eingabefelder eines Online-Formulars zugreifen
- die Werte sind in den Variablen $_REQUEST['name'] gespeichert (siehe oben), wobei name dem Namen der Variable im entsprechenden html-Formular entspricht
- der Bezug zwischen Formular und aufzurufendem PHP-Skript wird im Formular über den Namen des Skriptes und einen speziellen Button vom Typ submit hergestellt
- in der Praxis häufig (alternative) Variante anzutreffen: ein Web-Dokument, bestehend aus einem PHP-Teil zur Datenverarbeitung sowie einem (HTML-)Teil für das Web-Formular; analog dem Beispiel Gästebuch
Zunächst wird das Web-Formular entwickelt, welches eine Radiobox (klickbare Auswahlliste) enthält. Beim Betätigen des Submit-Buttons wird das Skript zeit-auswerten.php gerufen. Ihm wird der ausgewählte Eintrag als Name-Wert-Parameter übergeben. Das Dokument wird als Web-Dokument z.B. unter dem Namen form.html abgespeichert.
<b>Wann stehen Sie am Liebsten auf?</b> <FORM ACTION="zeit-auswerten.php"> <INPUT type="radio" name="zeit" value=1> 6:00 Uhr oder früher <br> <INPUT type="radio" name="zeit" value=2> zwischen 6:00 und 9:00 Uhr <br> <INPUT type="radio" name="zeit" value=3> zwischen 9:00 und 12:00 Uhr <br> <INPUT type="radio" name="zeit" value=4> nicht vor mittags <br> <INPUT type="submit" value="Abschicken!"> </FORM> |
Wann stehen Sie am Liebsten auf? |
Aufgabe 3:
Wir tun was für die Bildung ;-) |
PHP-Frameworks
Das Entwickeln komplexer Web-Applikationen kann mittels Frameworks vereinfacht werden. Aufwand/Nutzen sollten dabei in vernünftigem Verhältnis stehen.Einige der nachfolgend genannten, verbreitetsten Frameworks unterstützen nicht nur PHP, sondern auch jQuery oder andere Techniken der Web-Programmierung:
- CakePHP: aktive, große Community
- Symfony: viele Funktionen/Bibliotheken
- Zend Framework: dto.
- CodeIgniter: "schlank"; aber schnell sichtbare Ergebnisse
Ein Wort zur Sicherheit (Überblick)
Erhöhtes Augenmerk sollte vor allem dann auf die Sicherheit geworfen werden, wenn zum Beispiel Dateiinhalte verändert oder Formulardaten (direkt) weiterverarbeitet werden. Das größte Sicherheitsrisiko für das PHP-Programm stellen "externe" Eingaben (Formulardaten, Cookies, globale Variablen,...) dar! Eine ausführliche Darstellung der Problematik findet sich in Kursteil 2 Sicheres Programmieren mit PHP. Im Folgenden sind die wichtigsten Grundregeln zusammengefasst, welche der PHP-Programmierer (mindestens) beachten sollte:- Variablen immer initialisieren!
Grund: Das Manipulieren von Variablenwerten wird verhindert.<?php
$var1 = 0;
$var2 = "";
?> - Entfernen von Spezialzeichen (z.B. HTML-Tags)
Grund: HTML-Code kann nicht manipuliert werden und so zur Anzeige verfälschter Seiten-Inhalte führen.
Funktion htmlspecialchars() - Maskieren eventueller Shell-Metazeichen
Grund: Verhindert die (ungeprüfte) Ausführung von Befehlen oder Befehlsfolgen im PHP-Skript, z.B. das Löschen von Dateien; die Eingaben stammen z.B. von einem Formular-Eingabefeld
Funktion escapeshellcmd()
<?php
if (isset($_REQUEST['datei'])
# Shell-Metazeichen werden "maskiert", d.h. wirkungslos gemacht:
$datei = escapeshellcmd($_REQUEST['datei']);
system("cat $datei");
} else {
# Fehlerauschrift
echo "Inhalt der Datei kann nicht ausgegeben werden.";
}
?> - Checken des Datentyps einer Variable
Grund: Feststellen fehlerhafter Eingaben
mögliche Funktionen: is_numeric(), is_string()<?php
$number = (is_numeric($_REQUEST['number']) ? $_REQUEST['number'] : 0);
?> - Überprüfen, ob Variable einen Wert aus einer vorgegebenen
Wertemenge hat
Grund: Feststellen fehlerhafter Eingaben
Funktion isset()
Beispiel: in einem <select>-Menü sind nur drei Dateinamen erlaubt; deren Inhalt soll im PHP-Skript eingelesen werden<?php
$seiten = array('index.html' => 1, 'referenzen.html' => 1, 'projekt.html' => 1);
if (isset($_REQUEST['datei']) && isset($seiten[$_REQUEST['datei']])) {
# Dateiname ist gesetzt und erlaubt
include($_REQUEST['datei']);
} else {
# Fehler ausgeben
}
?>
Lösungen zu den Aufgaben (PHP-Skripte als Quellcode):
- Aufgabe 1: Feld auslesen
mit feststehender Feldgröße
mit beliebiger Feldgröße
- Aufgabe 2: Datum, Uhrzeit usw. der letzten Änderung ausgeben
einfache Ausgabe
Anzeige der Wochentage in deutsch
Vertiefung:
- W. Noack: PHP4. Grundlagen - Erstellung dynamischer Webseiten.
Handbuch des RRZN, beziehbar im URZ-Nutzerservice!
- W. Noack: PHP5. Fortgeschrittene Techniken der Web-Programmierung.
Handbuch des RRZN, beziehbar im URZ-Nutzerservice!