Springe zum Hauptinhalt

Gestalten-web

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

Bild: So funktioniert PHP

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>

Web-Dokument, wie es vom Web-Browser "empfangen" wird:

<html>
  <head>
   <title>PHP-Test</title>
  </head>
  <body>
   <h3>Hallo, liebe PHP-Freaks!</h3>
  </body>
</html>

Anzeige im Web-Browser:

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"

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

Beispiel: Zuweisung, Ausgabe von Variablenwerten

<?php
$farbe = "rot!";
$zahl = 5;
$string1 = "Max sieht";
$string2 = "vor 12!";
echo "$zahl $string2 $string1 $farbe";
?>
5 vor 12! Max sieht rot!

Der gleiche Effekt, aber unter Nutzung eines Feldes:

<?php
$feld = array(5, " vor 12!", " Max sieht", " rot!");
foreach ($feld as $wert) {
  echo "$wert";
}
?>
5 vor 12! Max sieht rot!

Außer foreach gibt es weitere Kontrollstrukturen zum Programmablauf in PHP.

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.
Tipp: Als (neues) Web-Dokument (.html) z.B. mit dem KompoZer erstellen, dort: Einfügen → PHP-Code...

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()
Beispiel: Abfrage mit 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

Beispiel: Datum der letzten Änderung

<?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.

Die Funktion getlastmod() wird auch in diesem Dokument verwendet (siehe Ende des Dokumentes bzw. HTML-Quelle).
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 stellt eine Vielzahl von Funktionen bereit; eine Gesamtübersicht bietet die PHP-Funktionsreferenz.

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
Folgendes Beispiel verdeutlicht den Zusammenhang. Zum besseren Verständnis sind hier Web-Formular und PHP-Statements (bewusst) getrennt in zwei Dateien: ein Web-Formular und ein PHP-Skript.
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?

   6:00 Uhr oder früher
   zwischen 6:00 und 9:00 Uhr
   zwischen 9:00 und 12:00 Uhr
   nicht vor mittags

  

Anschliessend wird das entsprechende PHP-Skript - zeit-auswerten.php - programmiert, welches in Abhängigkeit von der Wertebelegung der übergebenen Variablen eine Ausschrift erzeugt.

Aufgabe 3:

Wir tun was für die Bildung ;-)
Erstellen Sie ein Web-Dokument mit einer Auswahlliste (Formular), die als Einträge die Namen europäischer Hauptstädte enthält. Beim Submit soll (im gleichen Dokument) mit PHP zur gerade ausgewählten Hauptstadt der dazu passende Artikel aus Wikipedia in den Browser geladen werden! Wikipedia ist die weltweit umfangreichste, frei verfügbare Online-Enzyklopädie.
Tipp1: Der benötigte URL beginnt immer mit http://de.wikipedia.org/wiki/, an diesen wird der gerade gesuchte Begriff einfach angehangen. Wurde z.B. Berlin ausgewählt, lautet der URL http://de.wikipedia.org/wiki/Berlin
Tipp2: Die entscheidende Funktion, die Sie für das Redirect benötigen, heisst header().
Tipp3: Zur Entscheidung, ob der PHP-Teil durchlaufen werden soll (zuvor Stadt ausgewählt!), oder das Dokument erstmals aufgerufen wurde und somit das Web-Formular angezeigt werden soll, sollte in Selbigem ein input feld vom Typ hidden verwendet werden!

Über die vielfältigen Möglichkeiten mit Formularen kann man in der Selfhtml-Dokumentation mehr erfahren.

Zur praktischen Vertiefung dieser Thematik eignet sich dieses komplexe Beispiel.

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:

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):


Vertiefung:


© Steffen Brose, letzte Änderung:  27.02.2013 14:33:57