Galileo Computing <openbook>
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


PHP 4 von Thomas Theis
Webserver-Programmierung für Einsteiger
Zum Katalog
gp Kapitel D Bearbeitung von Formularen
  gp D.1 Variablen aus Formularen
  gp D.2 Verzweigungen und Formulare
  gp D.3 Auswahl von Formularinhalten
  gp D.4 Formularelement Textarea
  gp D.5 Funktionen und Formulare
  gp D.6 Formular und Programm in einer Datei
  gp D.7 Die Oster-Formel nach C. F. Gauß

Kapitel D Bearbeitung von Formularen

In diesem Abschnitt wird dargestellt, auf welche Weise der Entwickler einer dynamischen Internet-Seite es dem Betrachter ermöglichen kann, Informationen an den Webserver zu übermitteln und wie diese Informationen ausgewertet werden.


Galileo Computing

D.1 Variablen aus Formularen  downtop

Zum Webserver

Eine besondere Stärke von PHP ist die einfache Auswertung von Formular-Inhalten. Durch eine solche Auswertung wird die Informations-Übermittlung vom Betrachter zum Webserver ermöglicht.

Einträge

Dem Betrachter wird zunächst ein Formular vorgelegt, in dem er eigene Einträge vornehmen kann bzw. unter vorgefertigten Einträgen auswählen kann. Er füllt das Formular aus, sendet es ab und erhält eine Antwort vom Webserver. Dies soll anhand des folgenden Beispieles gezeigt werden.

Zunächst die Seite mit dem Benutzer-Formular:

Abbildung D.1   Eingabe-Formular für zwei Zahlenwerte
Abbildung

Der HTML-Programmcode:

Listing D.1   Datei ud01.htm
<html>
<body>
Bitte tragen Sie zwei Zahlen ein und senden Sie das Formular ab.<br>
<form action = "ud01.php" method = "post">
    Wert 1: <input name = "w1"><p>
    Wert 2: <input name = "w2"><p>
    <input type = "submit">
    <input type = "reset">
</form>
</body>
</html>

action

Der allgemeine Aufbau von Formularen wurde bereits im Abschnitt HTML für PHP erläutert. Das Attribut action des Formulares verweist auf die Datei mit dem antwortenden PHP-Programm. Die beiden Input-Felder mit den Namen w1 und w2 dienen zur Eingabe von Daten.

submit, reset

Das Input-Element vom Typ submit erzeugt eine Schaltfläche, dient zum Absenden der eingetragenen Daten an den Server und zur Anforderung der genannten Antwortdatei. Das Input-Element vom Typ reset erzeugt eine Schaltfläche und dient zum Zurücksetzen der eingetragenen Daten auf den Anfangszustand wie es z. B. bei einer Fehleingabe notwendig wird.

Das antwortende PHP-Programm sieht wie folgt aus:

Listing D.2   Datei ud01.php
<html>
<body>
<?php
   $erg = $w1 + $w2;
   echo "Die Summe von $w1 und $w2 ist $erg";
?>
</body>
</html>

Innerhalb der Antwort-Datei wird der Variablen $erg der Wert der Summe von $w1 und $w2 zugewiesen. Anschließend wird das Ergebnis der Addition ausgegeben.

Variablen aus dem Formular

Zunächst fällt auf, dass beide Variablen $w1 und $w2 in diesem PHP-Programm noch gar keinen Wert erhalten haben. Diese Werte wurden gemeinsam mit den Namen der beiden Eingabefelder vom aufrufenden Formular aus übermittelt. Aus dem Namen der Eingabefelder werden dabei PHP-Variablen, indem jeweils ein Dollarzeichen davor gesetzt wird. Die Eintragung im Feld w1 wird also zum Wert der Variablen $w1 im Programm.

Umwandlung

Die beiden Eingabefelder des Formulares nehmen Zeichenketten auf, und es werden auch Zeichenketten übermittelt. Im Programm werden sie jedoch als Zahlen interpretiert. Dabei finden die Regeln aus dem Abschnitt »Strukturierte Programmierung mit PHP / Umwandlung von Zeichenketten in Zahlen« Anwendung.

Eingabefehler

In den vorliegenden kleinen Programmen zur Einführung werden Eingabefehler des Benutzers nicht abgefangen. Die Programme würde ansonsten unnötig umfangreich und unverständlich. Später wird man in den Programmen Routinen einbauen, die möglichst alle Eingabefehler abfangen, aber es gilt immer der Grundsatz: Kein Programm ist vollständig gegen Fehler gesichert.

Übung UD01

Speichern Sie beide Dateien im Hauptverzeichnis Ihres Webservers, und testen Sie sie, indem Sie einen Browser aufrufen und die Adresse http://localhost/ud01.htm eingeben. Sie sollten nicht die Adresse http://localhost/ud01.php eingeben, denn diese Datei wird vom Formular aus aufgerufen.

Übung UD02

Schreiben Sie eine Benutzer-Schnittstelle, bestehend aus einem Formular und einem antwortenden PHP-Programm.

Die HTML-Datei (ud02.htm) soll ein Formular mit insgesamt fünf Eingabefeldern und einer Absende-Schaltfläche beinhalten. Darin soll der Benutzer seine Adresse mit den folgenden Angaben eintragen: Nachname, Vorname, Strasse, Postleitzahl und Ort. Das Formular könnte z. B. folgendes Aussehen haben:

Abbildung D.2   Eingabe-Formular für Adresse
Abbildung

Achten Sie bei der Namensgebung für die Eingabe-Felder darauf, dass der Name einer PHP-Variablen keine deutschen Umlaute und kein scharfes ß beinhalten darf. Der Variablenname $straße ist also nicht gestattet.

Falls der Benutzer (z. B. Hans Maier, Holzweg 57, 89664 Obertupfingen) das Formular absendet, soll ihm von einem PHP-Programm (Datei ud02.php) eine Antwort vom Webserver mit folgendem Inhalt zugesandt werden:

Abbildung D.3   Antwort des Webservers
Abbildung

Speichern Sie beide Dateien im Hauptverzeichnis Ihres Webservers, und testen Sie sie, indem Sie einen Browser aufrufen und die Adresse http://localhost/ud02.htm eingeben.


Galileo Computing

D.2 Verzweigungen und Formulare  downtop

Variablen aus Formularen können natürlich auch innerhalb von Verzweigungen eingesetzt werden. In Abhängigkeit der vom Benutzer eingegebenen Werte verzweigt das Programm in unterschiedliche Programmteile.

Verzweigungen, logische Operatoren

Im nachfolgenden Beispiel finden sich in einer HTML-Datei (Datei ud03.htm) innerhalb eines Formulares drei Eingabefelder. Der Benutzer wird aufgefordert, drei unterschiedlich große Zahlen einzugeben. Diese Zahlen werden beim Absenden des Formulares einem PHP-Programm (Datei ud03.php) übermittelt.

Innerhalb dieses PHP-Programmes wird herausgefunden, welche der drei Zahlen die größte Zahl ist. Diese Zahl wird dem Benutzer zurückgeliefert. Dabei werden logische Operatoren verwendet.

Die Datei mit dem Formular:

Listing D.3   Datei ud03.htm
<html>
<body>
Bitte tragen Sie drei unterschiedlich große Zahlen ein,
 und senden Sie das Formular ab:
<form action = "ud03.php" method = "post">
    <input name = "w1"> Wert 1<p>
    <input name = "w2"> Wert 2<p>
    <input name = "w3"> Wert 3<p>
    <input type = "submit">
    <input type = "reset">
</form>
</body>
</html>

Das PHP-Programm:

Listing D.4   Datei ud03.php
<html>
<body>
<?php

   if ($w1 > $w2 && $w1 > $w3)
      echo "$w1 ist die größte Zahl";

   if ($w2 > $w1 && $w2 > $w3)
      echo "$w2 ist die größte Zahl";

   if ($w3 > $w1 && $w3 > $w2)
      echo "$w3 ist die größte Zahl";

?>
</body>
</html>

Übung UD04

Schreiben Sie das o. a. Programm um. Es soll nun mit geschachtelten Verzweigungen ohne logische Operatoren herausgefunden werden, welche von drei gegebenen, unterschiedlich großen Zahlen-Variablen die größte ist (Datei ud04.php).


Galileo Computing

D.3 Auswahl von Formularinhalten  downtop

Es gibt eine Reihe von Elementen, die innerhalb von Formularen eingesetzt werden können und dem Benutzer die Auswahl erleichtern. Zur Ermittlung der Werte, die der Benutzer ausgewählt hat, werden meist Verzweigungen benötigt.


Galileo Computing

D.3.1 Optionsgruppen  downtop

Radio-Buttons

Zunächst ein Beispiel mit Gruppen von Options-Schaltfeldern (Radio-Buttons):

Listing D.5   Datei ud05.htm
<html>
<body>
Bitte treffen Sie jeweils eine Auswahl und senden Sie das Formular 
ab:
<form action = "ud05.php" method = "post">

    <input type="radio" name="rziel" value="Gomera" checked>
       Wandern auf Gomera<p>
    <input type="radio" name="rziel" value="Lanzarote">
       Sonnen auf Lanzarote <p>
    <input type="radio" name="rziel" value="Fuerteventura">
       Surfen auf Fuerteventura<p>

    <hr>
    <input type="radio" name="htyp" value="Drei" checked>
       Drei-Sterne Hotel<p>
    <input type="radio" name="htyp" value="Vier">
       Vier-Sterne Hotel<p>

    <input type = "submit">
    <input type = "reset">
</form>
</body>
</html>

Gruppen von Radio-Buttons

Ein Radio-Button wird erzeugt mit <input type="radio">. Einer der Radio-Buttons einer Gruppe sollte schon markiert sein, wenn die Seite aufgerufen wird, daher das Attribut checked.

In diesem Formular erscheinen zwei Gruppen von Radio-Buttons. Diese Gruppen sind durch eine horizontale Linie (<hr>) optisch voneinander getrennt. Innerhalb der ersten Gruppe kann der Betrachter ein Reiseziel auswählen, innerhalb der zweiten Gruppe einen Hoteltyp. Nach Absenden des Formulares bekommt er eine Antwort vom Webserver mit der Anzahl der Angebote für die von ihm gewählten Kriterien.

Das Formular hat folgendes Aussehen:

Die Antwort wird durch das folgende Programm geliefert:

Listing D.6   Datei ud05.php
<html>
<body>
<?php
   echo "Sie möchten also nach $rziel in ";
   echo " ein $htyp Sterne Hotel<p>";

   if ($rziel == "Gomera")
   {
      if ($htyp == "Drei") $ang = 7;
      else $ang = 1;
   }

   else if ($rziel == "Lanzarote")
   {
      if ($htyp == "Drei") $ang = 12;
      else $ang = 2;
   }

   else
   {
      if ($htyp == "Drei") $ang = 5;
      else $ang = 4;
   }

   echo "Dazu haben wir $ang Angebote";
?>
</body>
</html>
Abbildung D.4   Formular mit Radio-Buttons
Abbildung

name, value

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.

checked

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.

Geschachtelte Verzweigung

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:

Abbildung D.5   Antwort des Webservers
Abbildung


Galileo Computing

D.3.2 Menüdowntop

Select-Menüs

Auswahl-Menüs (Select-Menüs) erfüllen den gleichen Zweck wie Gruppen von Radio-Buttons. Besonders bei zahlreichen Auswahl-Möglichkeiten zeichnen sie sich durch ihren geringeren Platzbedarf innerhalb des Formulares aus. Zum Vergleich soll das o. g. Beispiel mit Hilfe von Auswahl-Menüs dargestellt werden. Es wird in beiden Fällen das gleiche PHP-Programm angefordert.

Listing D.7   Datei ud06.htm
<html>
<body>
Bitte treffen Sie jeweils eine Auswahl und senden Sie das Formular ab:
<form action = "ud05.php" method = "post">

    <select name="rziel">
       <option value="Gomera"> Wandern auf Gomera
       <option value="Lanzarote" selected>
          Sonnen auf Lanzarote
       <option value="Fuerteventura">
          Surfen auf Fuerteventura
    </select><p>

    <select name="htyp">
       <option value="Drei" selected> Drei-Sterne Hotel
       <option value="Vier"> Vier-Sterne Hotel
    </select><p>

    <input type = "submit">
    <input type = "reset">
</form>
</body>
</html>

selected

Zu den Unterschieden: Im Dokument erscheinen zwei aufklappbare Menüs, in denen jeweils schon eine Auswahlmöglichkeit voreingestellt ist (Attribut selected). Die Namen der beiden Auswahl-Menüs sind rziel und htyp, der Wert (Attribut value) wird über die jeweils vom Benutzer ausgewählte Option eingestellt. Das PHP-Programm verarbeitet diese Informationen genau so wie bei den Radio-Buttons.

Das Formular hat folgendes Aussehen:

Abbildung D.6   Formular mit Auswahl-Menü
Abbildung


Galileo Computing

D.3.3 Kontrollkästchen  downtop

Checkboxen

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:

Abbildung D.7   Formular mit Kontrollkästchen
Abbildung

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:

Existenz einer Variablen

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

value

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

Abbildung D.8   Antwort des Webservers
Abbildung

Übung UD08

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.

gp  Mit Hilfe der beiden Radio-Buttons soll er die Auswahl zwischen den Anreden »Herr« oder »Frau« haben.
gp  Das Menü soll ihm die Auswahl zwischen fünf verschiedenen Sorten Pizza (mit unterschiedlichen Preisen) ermöglichen.
gp  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:

Abbildung D.9   Pizza-Bestellung
Abbildung

Nach Absenden des Formulares soll ihm durch ein PHP-Programm (Datei ud08.php) folgende Antwort geliefert werden:

Abbildung D.10   Auftrags-Bestätigung für die Pizza
Abbildung


Galileo Computing

D.4 Formularelement Textarea  downtop

Textarea

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>

cols, rows

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:

Abbildung D.11   Formular mit Textarea
Abbildung

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>

Galileo Computing

D.5 Funktionen und Formulare  downtop

global

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>

Das PHP-Programm:

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.

Übung UD11

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.


Galileo Computing

D.6 Formular und Programm in einer Datei  downtop

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.

Datei ruft sich selbst auf

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.

Existenz einer Variablen

Zu Beginn des Programmes wird mit Hilfe der Abfrage if ($gesendet) festgestellt, ob die Variable $gesendet existiert.

gp  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 ...
gp  Bei einem späteren Aufruf der Datei existiert die Variable, daher bekommt der Benutzer die genannte Meldung als Bestätigung der Eingabe

Erster Aufruf

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:

Abbildung D.12   Erster Aufruf, noch nicht gesendet
Abbildung

Bei einem weiteren Aufruf ergibt sich die folgende Ausgabe:

Abbildung D.13   Weiterer Aufruf, bereits gesendet
Abbildung


Galileo Computing

D.6.1 Variable $PHP_SELF  downtop

$PHP_SELF

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.

Übung UD13

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.


Galileo Computing

D.7 Die Oster-Formel nach C. F. Gauß  toptop

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.

Wann ist Ostern?

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:

gp  Der Ausdruck 1952/100 ergibt den Wert 19.52 (mit Nachkommastellen).
gp  Der Ausdruck floor(1952/100) ergibt den Wert 19 (ohne Nachkommastellen, also Ganzzahl-Division).

Übung UD14

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.

Übung UD15

Die Oster-Tabelle

Erstellen Sie ein Formular mit zwei Eingabefeldern (Datei ud15.htm). Der Benutzer soll zwei Jahreszahlen eintragen:

Abbildung D.14   Eingabe-Formular für zwei Jahreszahlen
Abbildung

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:

Abbildung D.15   Tabelle mit Berechnung der Oster-Formel
Abbildung

  

Perl – Der Einstieg




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


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, fon: 0228.42150.0, fax 0228.42150.77, info@galileo-press.de