Rechteck-Berechnung mit PHP


Version mit getrennten Sende- und Empfangs-Seiten

Mini-Webseite mit dem Ergebnis


Merkmale

Das Beispiel umfasst 2 Dokumente. Auftrag und Ergebnis werden auf eigenen Webseiten angezeigt. Bei der praktischen → Anwendung wechselt man zwischen beiden Seiten.
Die Auftrags-Webseite mit dem Formular ist ein einfaches (statisches) HTML-Dokument (rect_php_send.html)
Die Lösungs-Webseite ist ein (dynamisches) PHP-Dokument (rect_php_receive.php):
Das Programm empfängt die Vorgaben, berechnet die Ergebnisse und zeigt sie an.



Zum Absenden des Formulars dient eine Bildschirm-Taste (Button-Element). Sie wird außerhalb des <form>-Elements angebracht, damit ihre 'Daten' nicht zusammen mit den beiden Eingabe-Daten abgesendet werden:
<button onclick="document.f1.submit()">
Berechnen
</button>

Das Formular-Element wird in Objekt-Syntax angegeben. Der Name (hier: f1) muss genau mit dem name-Attribut des <form>-Elements übereinstimmen. Die Methode submit() sendet die Eingabe-Daten an das mit action angegebene Dokument.



Am eigenen Arbeits-(Client)-PC erhält man den fertigen HTML-Quelltext. Man kann nicht unterscheiden, welche seiner Teile von PHP erzeugt wurden.
Man hat keinerlei Zugriff auf das PHP-Programm und kann es weder lesen noch ändern. Nur auf dieser Demo-Seite kann man ausnahmsweise (!) auch den → PHP-Quelltext anzeigen.

Man kann den Quelltext der beiden Mini-Webseiten herunterladen. Am eigenen Arbeits-PC funktioniert jedoch nur die Auftrags-Webseite, nicht jedoch die Lösungs-Webseite: Am Arbeits-PC ist die Programmiersprache → PHP normalerweise nicht installiert. Umgekehrt ist PHP an jedem Standard Webserver-PC installert und dient dort zur Erzeugung dynamischer Webseiten - wie in diesem Beispiel.

Details und Beispiele: → Funktion eines einfachen PHP-Dokuments, → Diagramm des HTTP-(Internet)-Protokolls mit und ohne PHP, → HTTP-GET-Methode (Senden und Empfangen von Daten).


Ausgabe der Ergebnisse mit PHP

In der oben geiegten Mini-Webseite werden zunächst die beiden GET-Argumente a und b gelesen, so wie im vereinfachten Beispiel links gezeigt.

Wenn eine Berechnung möglich ist, dann werden sowohl die Eingabe-Daten als auch die damit berechneten Daten in eine → Tabelle (HTML <table>-Element) eingetragen.

Ausgabe der Seite a:
<?php
print '<tr>';
print '<td> Seite a </td>';
print '<td>'.$a.'</td>';
print "</tr>\t";
?>
Wenn $a den Wert $a=100 enthält, dann wird vom PHP-Programm dieser HTML-Quelltext erzeugt:
<tr>
<td> Seite a </td>
<td> 100 </td>
</tr>
Daraus erzeugt der Browser 1 Zeile der Werte-Tabelle.

Berechnung, z.B. der Diaonale:
$d = sqrt($a*$a + $b*$b);
Die Rechnungen erfolgen nach den Regeln der Geometrie: Hier wird die Diagonale mit der Funktion sqrt() (Quadratwurzel) berechnet und an eine PHP-Variable ($d) zugewiesen. Alle berechneten Daten werden in je eine Tabellen-Zeile eingetragen, so wie oben für die Seite a gezeigt.


Nachteile

Die Trennung von Auftrag und Ergebnis ist bei oftmaliger Wiederholung unangenehm.
In dieser einfachen Version werden die Eingabe-Daten weder kontrolliert noch ausgebessert. Eingabe-Fehler können daher Verwirrung auslösen. Man muss z.B. als Dezimal-Trennzeichen einen Punkt verwenden (keinen Beistrich !).



• In dieses Kapitel sind zur Demonstration beide Mini-Webseiten (Auftrag und Ergebnis) eingebettet.
• Die Auftrags-Seite soll daher nicht durch die Ergebnis-Seite ersetzt werden, sondern lediglich die Formular-Daten absenden. Dazu wurde in der eingebetteten Version ein zusätzliches target-Attribut eingefügt.
• In der eingebetteten Version der Empfangs-Seite fehlt der Link zu einem weiteren Auftrag: Diese Seite wird ohnehin laufend angezeigt.
Die beiden kleinen Unterschiede sind nur für fortgeschrittene EntwicklerInnen interessant.

Kombinierte Sende- und Empfangs-Seite

◀   Links ist eine Mini-Webseite mit einem kombinierten Programm eingebettet.

Mit Klick auf diesen Link wird die Mini-Webseite des ↑ Auftrags in einem eigenen Browser-Tab geladen.
Mit Klick auf diesen Link wird der HTML Quelltext der ↑ Auftrags-Seite angezeigt.

Das Beispiel ist eine typische PHP-Lösung für mehrmals wiederholte Aufgaben (Rechnungen).

Besondere Merkmale:
Das Beispiel enthält sowohl ein Formular für den Auftrag als auch eine Tabelle für die Ergebnis-Daten.

Wenn das Programm (beim 1.Mal) ohne Argumente geladen wird, dann wird nur das Auftrags-Formular angezeigt.
Als Ziel des Formulars ist im action-Attribut der eigene Datei-Name angegeben.

Mit jedem Absende-(submit)-Vorgang ruft sich das Dokument selbst erneut auf: In diesem Fall sind die Eingabe-Daten als HTTP-GET-Argumente verfügbar: Sie werden gelesen, in Zahlen umgewandelt, das Rechteck wird berechnet und seine Daten in der Tabelle angezeigt.

Danach wird das Eingabe-Formular für einen weiteren Auftrag angezeigt.



Wenn ein Wert (z.B. der Umfang) berechnet wurde, dann wird er in eine Zeile der Ergebnis-Tabelle eingetragen.
Die Tabelle ist nicht im 'statischen' Quelltext der PHP-Datei enthalten, weil sie nur dann sinnvoll ist, wenn ein Ergebnis berechnet wurde.
Daher wird der HTML-Quelltext der Tabelle nur bei Bedarf vom PHP-Programm erzeugt:
print '<tr>';
print '<td>Umfang</td>';
$u = 2*$a + 2*$b; // Umfang
print '<td>'.sprintf('%0.5f',$u).'</td>';
print "</tr>\n";

Mit Funktion print() werden die angegebenen Text-Daten in den Ausgabe-Text geschrieben.
Funktion sprintf() erzeugt aus einem Zahlenwert einen formatierten Text (hier mit 5 Nachkomma-Stellen).

Wenn der Umfang mit u=100 berechnet wurde, dann erzeugt das PHP-Programm diesen HTML-Quelltext:
<tr><td>Umfang</td><td>100</td></tr>

Der Browser erzeugt aus dem HTML-Quelltext 1 Zeile der Ergebnis-Tabelle.



Beim erstmaligen Laden muss das Programm warten, bis beide Eingabe-Felder ausgefüllt sind.
Daher wird (nur) in diesem Fall ein <button>-Element zum Absenden in den HTML-Quelltext ausgegeben.

Bei Wiederholungen werden die verwendeten Werte der Seiten a und b mit PHP in die value-Attribute der Eingabefelder eingetragen.
In diesem Fall genügt die Änderung eines Eingabe-Feldes zur neuen Berechnung. Daher wird in das <form>-Element ein onchange-Attribut eingetragen, welches das Formular bei Änderung absendet.

Als Ziel des Formulars wird der 'eigene' Datei-Name als Wert des action-Attributs angegeben. Der Name wird jedoch nicht als Text-Konstante eingetragen sondern mit PHP berechnet:
action="<?php print basename(__FILE__); ?>"
Daher funktioniert das Programm auch dann korrekt, wenn der Datei-Name geändert wurde.