![]() |
|
|||||
Der gemeinsame Name (Attribut name) der ersten Optionsgruppe ist rziel. Nach Absenden des Formulares steht dadurch die Variable $rziel mit dem vom Benutzer ausgewählten Wert (Attribut value) im PHP-Programm zur Verfügung. Falls er z. B. »Wandern auf Gomera« auswählt, wird $rziel der Wert »Gomera« zugewiesen. Der gemeinsame Name der zweiten Optionsgruppe ist htyp. Falls der Benutzer z. B. »Drei-Sterne Hotel« auswählt, wird $htyp der Wert »Drei« zugewiesen. In jeder Optionsgruppe ist bereits eine Auswahlmöglichkeit voreingestellt (Attribut checked). Dies sollte bei jeder Optionsgruppe in einem Formular der Fall sein, da ansonsten dem antwortenden Programm gegebenenfalls keine eindeutige Information zugesandt wird. Aus den Informationen in den Variablen $rziel und $htyp wird im PHP-Programm mit Hilfe einer geschachtelten Verzweigung die Anzahl der vorliegenden Angebote ermittelt und in der Variablen $ang gespeichert. Der Wert dieser Variablen wird dem Betrachter zusammen mit einer Bestätigung seiner Eingabe-Daten zurückgesandt. Die Antwort hat das folgende Aussehen:
D.3.2 Menüs
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Mit Hilfe von Kontrollkästchen (Checkboxen) kann der Betrachter eine einfache Ja/Nein-Auswahl treffen. Anders als bei Optionsgruppen oder Auswahl-Menüs haben verschiedene Checkboxen keinen Einfluß aufeinander. Ein Beispiel:
Listing D.8 Datei ud07.htm<html> <body> Wünschen Sie in Ihrem Zimmer:<p> <form action = "ud07.php" method = "post"> <input type="checkbox" name="cd" value="Dusche / Bad" checked> Dusche oder Bad<p> <input type="checkbox" name="cm" value="Blick auf das Meer"> Meeresblick<p> <input type="checkbox" name="cz" value="Tresor"> Zimmertresor<p> <input type = "submit"> <input type = "reset"> </form> </body> </html>
Ein Kontrollkästchen wird erzeugt mit <input type="checkbox">. Soll das Kontrollkästchen schon markiert sein, wenn die Seite aufgerufen wird, so wird das Attribut checked hinzugefügt.
In diesem Formular kann der Betrachter drei voneinander unabhängige Eigenschaften für sein Hotelzimmer auswählen. Nach Absenden des Formulares bekommt er eine Antwort vom Webserver mit einer Bestätigung seiner Auswahl.
Das Formular hat folgendes Aussehen:
|
Die Antwort wird durch das folgende Programm geliefert:
Listing D.9 Datei ud07.php<html> <body> <?php echo "Danke für Ihre Anfrage, wir reservieren:<p>"; if ($cd) echo "Zimmer mit $cd, Aufpreis DM 20 / Tag<p>"; if ($cm) echo "Zimmer mit $cm, Aufpreis DM 30 / Tag<p>"; if ($cz) echo "Zimmer mit $cz, Aufpreis DM 5 / Tag"; ?> </body> </html>
Die Namen (Attribut name) der drei Checkboxen (cd, cm bzw. cz) können auch in diesem Programm wieder als Variablen ($cd, $cm bzw. $cz) genutzt werden. Diese Variablen haben eine doppelte Funktion:
| Zum einen kann überprüft werden, ob die jeweilige Checkbox vom Benutzer ausgewählt wurde. Falls sie ausgewählt wurde, dann existiert die Variable für das PHP-Programm. Dadurch ist das Ergebnis der Abfrage if ($checkboxname) wahr und die darauf folgende Anweisung wird ausgeführt. |
| Zum anderen beinhaltet die Variable einen Wert (Attribut value). Dieser Wert kann im Programm z. B. zur Ausgabe genutzt werden, wie im o. g. Programm geschehen. |
Die Antwort hat das folgende Aussehen:
|
Erzeugen Sie ein Formular für eine Pizza-Bestellung (Datei ud08.htm). Es soll zwei Eingabefelder für Text, eine Gruppe von zwei Radio-Buttons, ein Auswahl-Menü mit fünf Einträgen und zwei Checkboxen beinhalten.
In den beiden Eingabefeldern soll der Benutzer seinen Namen bzw. seine Adresse eintragen.
| Mit Hilfe der beiden Radio-Buttons soll er die Auswahl zwischen den Anreden »Herr« oder »Frau« haben. |
| Das Menü soll ihm die Auswahl zwischen fünf verschiedenen Sorten Pizza (mit unterschiedlichen Preisen) ermöglichen. |
| Die beiden Checkboxen soll der Benutzer ankreuzen, falls er zusätzlich »Thunfisch« bzw. »Extra Käse« auf seiner Pizza haben möchte. Dadurch wird der Preis natürlich entsprechend erhöht. |
Das Formular könnte z. B. folgendes Aussehen haben:
|
Nach Absenden des Formulares soll ihm durch ein PHP-Programm (Datei ud08.php) folgende Antwort geliefert werden:
|
Eine Textarea dient zur Aufnahme und Übermittlung eines umfangreicheren Textes. Dies könnte ein Diskussionsbeitrag, ein Kommentar o.ä. sein. Ein Beispiel:
Listing D.10 Datei ud09.htm<html> <body> Bitte geben Sie einen Text ein: <form action = "ud09.php" method = "post"> <textarea cols="30" rows="4" name="comment"> </textarea><p> <input type="submit" value="Text senden"> <input type="reset"> </form> </body> </html>
Eine Textarea wird mit Hilfe des Containers <textarea> </textarea> erzeugt. Die Attribute cols (=Spalten) und rows (=Zeilen) dienen zur Festlegung der Größe. Der Benutzer kann Text eingeben, und zwar auch über die angegebene Zeilenzahl hinaus, da die Textarea mit Rollbalken versehen ist.
Das Formular hat das folgende Aussehen:
|
Das nachfolgende PHP-Programm bestätigt die Übermittlung des Textes:
Listing D.11 Datei ud09.php<html> <body> <?php echo "Es wurde folgender Text übermittelt:<p> $comment"; ?> </body> </html>
Variablen, die aus einem Formular stammen, sind global. Falls diese Variablen innerhalb von einer Funktion verwendet werden sollen, müssen sie entweder an die betreffende Funktion übergeben werden oder innerhalb der Funktion mit Hilfe des Schlüsselwortes global bekannt gemacht werden.
Im nachfolgenden Beispiel werden einem Programm per Formular zwei Werte übergeben. Diese beiden Werte werden zum Vergleich auf zwei verschiedene Arten innerhalb von Funktionen addiert und ausgegeben. Die Datei mit dem Formular:
Listing D.12 Datei ud10.htm<html> <body> Bitte geben Sie zwei Werte ein und senden Sie das Formular ab: <form action = "ud10.php" method = "post"> <input name = "w1"> Wert 1<p> <input name = "w2"> Wert 2<p> <input type = "submit"> <input type = "reset"> </form> </body> </html>Listing D.13 Datei ud10.php
<html> <head> <?php function summEins() { global $w1, $w2; $s = $w1 + $w2; echo "Summe von $w1 und $w2: $s<p>"; } function summZwei($x, $y) { $s = $x + $y; echo "Summe von $x und $y: $s<p>"; } ?> </head> <body> <?php summEins(); summZwei($w1, $w2); ?> </body> </html>
Innerhalb der Funktion summEins() werden die beiden Variablen $w1 und $w2 mit Hilfe des Schlüsselwortes global als globale Variablen, deren Wert auch innerhalb der Funktion zur Verfügung stehen soll, bekannt gemacht.
Der Funktion summZwei() werden die Werte der beiden Variablen $w1 und $w2 über Parameter übermittelt. Sie tragen in der Funktion die Namen $x und $y.
Erzeugen Sie ein Formular, in dem zwei Zahlen in zwei Eingabefeldern eingetragen werden können. Diese beiden Zahlen sollen wahlweise addiert, voneinander subtrahiert, miteinander multipliziert oder dividiert werden. Mit Hilfe von vier Optionsfeldern soll der Benutzer auswählen, welche dieser vier Grundrechenarten ausgeführt werden soll (Datei ud11.htm).
Nach Absenden des Formulares soll das Ergebnis von einem PHP-Programm (Datei ud11.php) berechnet und ausgegeben werden. Innerhalb des Programmes sollen vier verschiedene Funktionen die vier möglichen Rechen-Operationen ausführen. Diese Funktionen werden bei Bedarf vom Hauptprogramm aufgerufen, erhalten als Parameter die beiden Eingabewerte und liefern als Rückgabewert das Ergebnis der Rechen-Operation. Dieses Ergebnis soll im Hauptprogramm ausgegeben werden.
Bisher werden Formular und PHP-Programm in getrennten Dateien gespeichert. Zunächst wird dem Benutzer das Formular präsentiert. Er füllt es aus, sendet es ab und es wird ihm durch ein PHP-Programm in einer anderen Datei eine Antwort geliefert.
In vielen Fällen erweist es sich als günstiger, sowohl das Formular als auch das bearbeitende PHP-Programm innerhalb der gleichen Datei unterzubringen. Ein Programm kann sich auf diese Weise selber Daten zusenden.
Dieses Verfahren kommt z. B. bei einer Eingabemaske für eine Datenbank zum Einsatz. Der Benutzer trägt einen Datensatz ein, sendet ihn an die Datenbank, erhält als Antwort eine Bestätigung des Eintrages und das gleiche Formular zurück. Er kann sofort den nächsten Datensatz eingeben. Falls er mit der Eingabe der Datensätze fertig ist, kann er zu einer anderen Datei wechseln.
Dazu muss nur als Ziel des Formulares der Name der gleichen Datei eingetragen werden. Im nachfolgenden Beispiel soll diese nützliche Technik demonstriert werden:
Listing D.14 Datei ud12.php<html> <head> <?php if ($gesendet) { echo "Sie haben folgenden Namen"; echo " eingegeben: $vn $nn<p>"; } ?> </head> <body> Bitte geben Sie einen Namen ein und senden Sie das Formular ab: <form action = "ud12.php" method = "post"> <input name = "nn"> Nachname<p> <input name = "vn"> Vorname<p> <input type = "submit" name = "gesendet"> <input type = "reset"> </form> </body> </html>
Innerhalb des Programmes wird zunächst festgestellt, ob es sich um den ersten Aufruf handelt oder um eine weitere Eingabe. Dazu wird dem Absende-Button ein Name gegeben (hier: gesendet). Als Folge dieser Namensgebung existiert ab dem zweiten Aufruf des Programmes die Variable $gesendet.
Zu Beginn des Programmes wird mit Hilfe der Abfrage if ($gesendet) festgestellt, ob die Variable $gesendet existiert.
| Beim ersten Aufruf der Datei trifft dies noch nicht zu, da das zugehörige Formular-Element erst weiter unten auftaucht. Daher bekommt der Benutzer nicht die Meldung: Sie haben folgenden Namen eingegeben ... |
| Bei einem späteren Aufruf der Datei existiert die Variable, daher bekommt der Benutzer die genannte Meldung als Bestätigung der Eingabe |
Anmerkung: Während der Testphase möchte der Entwickler deutlich sehen, wie sich erster Aufruf und weitere Aufrufe voneinander unterscheiden. Ein Aktualisieren der Datei im Browser führt nicht zu einem neuen ersten Aufruf. Nur die Bestätigung der Adresse in der Adresszeile mit (¢) erzeugt einen ersten Aufruf ohne die Meldung »Sie haben folgenden Namen eingegeben: ....«
Beim ersten Aufruf ergibt sich die folgende Ausgabe:
|
Bei einem weiteren Aufruf ergibt sich die folgende Ausgabe:
|
Ein nützliches Hilfsmittel ist in diesem Zusammenhang die Variable $PHP_SELF. In dieser Variablen ist immer der Name der aktuellen Datei gespeichert. Das Formular kann somit geändert werden, statt der Zeile
<form action = "ud12.php" method = "post">
wird die folgende Zeile gesetzt:
<form action = "<?php $PHP_SELF ?>" method = "post">
Falls nun der Entwickler das Programm in eine andere Datei kopiert, muss der Name des Zieles nicht mehr geändert werden. Da es sich bei $PHP_SELF um eine PHP-Variable handelt, muss sie in den HTML-Code für das Formular mit Hilfe von <?php [PHP-Anweisungen] ?> eingebettet werden.
Formular und Programm aus Übung UD11 sollen nun in einer Datei vereinigt werden (Datei ud13.php). Beim Absenden des Formulares soll das Ergebnis berechnet und ausgegeben werden. Anschließend soll der Benutzer die Möglichkeit haben, unmittelbar die nächste Aufgabe einzugeben.
Dabei soll eine Variable verwendet werden, mit deren Hilfe man feststellen kann, ob das Formular zum ersten Mal oder zum wiederholten Male erscheint. Außerdem soll mit der Variablen $PHP_SELF als Ziel des Formulares gearbeitet werden.
In diesem Abschnitt soll die Berechnung einer umfangreichen Formel unter Einsatz eines Formulares und mehreren Funktionen durchgeführt werden. Es handelt sich um eine reine Zusatzübung, die kein weiteres theoretisches Wissen vermittelt. Sie kann also durchaus auch übergangen werden.
Ostern ist stets am ersten Sonntag nach dem ersten Vollmond des Frühlings. So hat es das erste Kirchenkonzil im Jahre 325 festgelegt, und dies gilt bis heute. Im Jahre 1800 entwickelte der große deutsche Mathematiker Carl Friedrich Gauß (1777 bis 1855) eine Formel zur Berechnung des Ostersonntags. Sie ist so genau, daß erst im Jahre 8202 ein Fehler auftritt. Die Formel lautet:
Ostern fällt im Jahre J auf den (e+D+1)sten Tag nach dem 21. März, wobei gilt:
e = (2 * (J mod 4) + 4 * (J mod 7) + 6 * D + (6 + J/100 – J/400 – 2) mod 7) mod 7 falls d = 29, dann ist D = 28 anderenfalls: falls d = 28 und J mod 17 >= 11, dann ist D = 27 in allen anderen Fällen: dann ist D = d d = ((15 + J/100 – J/400 – (8 * J/100 + 13) / 25) mod 30 + 19 * (J mod 19)) mod 30
Dabei entspricht mod dem modulo-Operator aus PHP. Dies ist also der Rest einer Division.
Alle vorkommenden Divisionen (z. B. J/100) sind Ganzzahl-Divisionen, die Stellen hinter dem Komma werden abgeschnitten. Zum Abschneiden kann man die mathematische Funktion floor() benutzen. Ein Beispiel:
| Der Ausdruck 1952/100 ergibt den Wert 19.52 (mit Nachkommastellen). |
| Der Ausdruck floor(1952/100) ergibt den Wert 19 (ohne Nachkommastellen, also Ganzzahl-Division). |
Erstellen Sie ein Formular mit einem Eingabefeld (Datei ud14.htm). Der Benutzer soll eine Jahreszahl eintragen. Nach Absenden des Formulares soll ihm durch ein PHP-Programm (Datei ud14.php) die folgende Antwort geliefert werden:
Im Jahre <Eingabewert> fällt der Ostersonntag auf den <Datumsangabe>
Zur Kontrolle: Im Jahre 1999 war dies der 4. April, die Antwort sollte also lauten:
Im Jahre 1999 fällt der Ostersonntag auf den 4. April
Zur Lösung der Aufgabe sollte eine Funktion eingesetzt werden, der die eingegebene Jahreszahl übergeben wird und die die ermittelten Werte für Tag und Monat per Referenz zurückliefert. Der Vorteil einer solchen Funktion liegt in ihrer Wiederverwendbarkeit.
Erstellen Sie ein Formular mit zwei Eingabefeldern (Datei ud15.htm). Der Benutzer soll zwei Jahreszahlen eintragen:
|
Nach Absenden des Formulares soll ihm durch ein PHP-Programm (Datei ud15.php) eine HTML-Tabelle mit den Datumsangaben für die Ostersonntage jedes Jahres im angegebenen Jahresbereich geliefert werden. Dabei soll die Funktion genutzt werden, die in der vorherigen Übung entwickelt wurde. Die Antwort könnte wie folgt aussehen:
|
| << zurück |
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
Copyright © Galileo Press GmbH 2001 - 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken und speichern. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Veröffentlichung der Inhalte oder Teilen davon bedarf der ausdrücklichen schriftlichen Genehmigung von Galileo Press. Falls Sie Interesse daran haben sollten, die Inhalte auf Ihrer Website oder einer CD anzubieten, melden Sie sich bitte bei: stefan.krumbiegel@galileo-press.de