HTTP-GET-Methode mit PHP

Anwendung der HTTP-GET-Methode mit PHP

Zielgruppe sind StudentInnen und ambitionierte Informatik-Amateure
Für das Live-Beispiel sind keine Vorkenntnisse notwendig, zum Absenden von Formularen genügen Grundkenntnisse von HTML, zum Empfang sind Kenntnisse von PHP erforderlich.


◀   Zum interaktiven Senden von User-Daten wird ein HTML Formular-Element in einer einfachen statischen Mini-Webseite verwendet, die zur Demonstration links eingebettet ist.

Das Formular des Beispiels enthält ein Feld zur Text-Eingabe und ein Auswahl-Element (Radio-Buttons).

Das Formular wird mit einem HTML Button-Element abgesendet. Als Empfänger dient jene dynamische Webseite (PHP-Programm), die direkt unterhalb eingebettet ist.

HTML-Quelltext ↓ des Sender-Dokuments


◀   Die links eingebettete Mini-Webseite dient zum Empfang der interaktiv eingegebenen Daten:

Als Nachweis des jeweiligen Lade-Vorgangs wird die aktuelle Zeit (des Server-PC) angezeigt.

Danach wird jener Text angezeigt, den das Empfangs-Programm als QUERY_STRING erhalten hat. Der Text wurde beim Absenden codiert und an den Namen der angeforderten Empfanger-Seite angehängt.

Es folgt eine Liste der decodierten GET-Daten. Jede moderne Programmiersprache kann einen erhaltenen QUERY_STRING in einzelne Argumente aufspalten und dem Programm zur Verfügung stellen.

 Mit diesem Link wird die Empfänger-Seite in einem eigenen Browser-Tab geöffnet: Man kann dann die in der Adresszeile (URL) enthaltenen GET-Daten manuell ändern.

PHP-Quelltext ↓ des Empfänger-Dokuments


Wikipedia: HTTP-GET, W3Schools: GET vs POST, SelfHTML: Werteübergabe mit Javascript

URL-Codierung des QUERY_STRINGs


Fortgeschrittene EntwicklerInnen sollten die URL-Codierung jedoch kennen: Manchmal ist es notwendig, in Teile der Codierung oder Decodierung mit eigenen Programmen einzugreifen.



Es ist möglich, an das Ende der GET-Anforderung Text-Daten anzuhängen. Beispiel:
GET http://_server_adresse_/get_receive.html?txt=Hallo&rb1=red
Der Teil in roter Schrift enthält die GET-Daten und wird QUERY_STRNG genannt. Im Beispiel sind diese beiden GET-Argumente mit Name und Wert enthalten:
txt=Hallo
rb1=red



Beispiele für die URL-Codierung von Zeichen:
TextUTF-8 BytesURL-Code
2 Worte32 20 57 6F 72 74 852+Worte
a + b61 20 2B 20 62a+%2B+b
Grün47 72 C3 BC 6EGr%C3%BCn
αCE B1%CE%B1
E2 82 AC%E2%82%AC

Das erste und zweite Beispiel enthält Leerzeichen, die mit je 1 Plus-Zeichen codiert werden.
Das zweite Beispiel enthält sowohl Leerzeichen als auch ein 'echtes' + Zeichen, welches mit seinem Unicode %2B codiert wird.
Das dritte und vierte Beispiel enthält je 1 Sonderzeichen (Umlaut ü und das griechische α), die mit je 2 Byte codiert werden.
Das letzte Beispiel (€-Zeichen) wird mit 3 Byte codiert.



Fertige Paare von Name=Wert werden voneinander durch & Zeichen getrennt, z.B.
txt=Hallo&rb1=red

Der gesamte QUERY_STRING ist nun fertig. Er sollte kein Leerzeichen enthalten und wird nach einem ? Fragezeichen an die Web-Adresse angehängt, z.B.
http://_server_adresse_/get_receive.html?txt=Hallo&rb1=red

HTML-Quelltext des Absenders

◀   Links wird der Quellext der einfachen statischen → HTML‑5 Datei get_send.html angezeigt.

Das wesentliche Element ist ein HTML <form> Formular mit diesen Attributen:
  • name="f1" ist der Name des Formulars. Er wird zum Absenden verwendet.
  • method="get" bezeichnet die zu verwendende Methode (GET oder POST).
  • action gibt die Web-Adresse (URL) des Empfangs-Programms an.
  • target ist nur für diese Demonstration erforderlich. Ohne dieses Attribut wird die Absender-Seite durch die Empfänger-Seite ersetzt - Hier wird die Empfänger-Seite in einen anderen Rahmen dieser Demo-Seite geladen.

Das Formular enthält mehrere Eingabe <input>‑Elemente:
  • Ein Element mit dem Attribut type="text" dient zur Text_Eingabe.
  • Die Elemente mit dem Attribut type="radio" erzeugen Options-Schalter (Radio-Buttons). Zusammengehörende Elemente erhalten das gleiche name‑Attribut und lösen einander gegenseitig aus.

Das Formular wird mit einem HTML <button>‑Element abgesendet.
Es soll beim Anklicken reagieren und erhält dazu das Attribut onclick
Als Wert wird der Objekt-Pfad zum Formular angegeben, zuletzt die Methode submit()


Man kann Formular-Daten mit Javascript → Lesen und/oder → Schreiben und Formulare programm-gesteuert absenden.

Eine besondere Anwendung ist die Angabe einer Javascript-Funktion mit dem action‑Attribut: In diesem Fall wird beim Absenden (submit()‑Ereignis) die angegebene Javascript-Funktion ausgeführt.

PHP-Quelltext des Empfängers

◀   Links wird der Quellext der dynamischen → PHP Datei get_receive.php angezeigt.
Das eingebettete PHP-Programm enthält mehr Code als unbedingt nötig, um Empfang und Decodierung der GET-Daten verständlich darzustellen.

Zuerst wird mit Funktion isset() geprüft,ob das globale Array $_GET definiert ist und mit count(), ob es überhaupt Elemente enthält. Die Auswertung wird nur dann durchgeführt, wenn diese Bedingungen zutreffen.

Der QUERY_STRING ist jener Text, der bei der GET-Methode an die Web-Adresse (URL) angehängt wurde. Der Text ist im Array-Element $_SERVER['QUERY_STRING'] verfügbar. Er wird selten direkt verwendet und dient hier zur Demonstration: Man kann erkennen, wie der Text aufgebaut und codiert ist.

Danach wird die Liste aller Elemente des Array $_GET angezeigt: Sie enthält die Namen und Werte aller erhaltenen GET-Daten in decodierter Form. Die Namen wurden aus den name‑Attributen der <input>-Elemente bezogen.

Zuletzt wird ein Anwendungs-Beispiel vorgestellt: Der interaktiv eingegebene Text wird in der gewählten Farbe angezeigt.
Diese 'Anwendung' ist nicht gerade sensationell, sie demonstriert lediglich die typischen Schritte der Verarbeitung von GET-Daten.



Zusätzlich werden die beiden Trennzeichen = und & in roter Farbe angezeigt.
Dazu wird die PHP-Funktion preg_replace() verwendet:
Sie ersetzt z.B. jedes vorkommende = Zeichen durch den String
<span class="r">=</span>



Wenn im Absender- und im Empfänger-Dokument der gleiche → Zeichensatz (vorzugsweise → UTF-8) vereinbart ist, dann sind normalerweise keine weiteren Maßnahmen notwendig: Alle in das Formular eingetragenen Zeichen werden korrekt angezeigt.

Eine Ausnahme bilden die beiden Zeichen < und >
Sie werden vom Browser wie Steuerzeichen für HTML-Elemente behandelt.
Um das zu unterbinden, werden diese Zeichen mit der PHP-Funktion preg_replace() in die HTML-Codes < bzw. > umgewandelt: Sie werden dann in der Ausgabe genauso angezeigt wie in der Formular-Eingabe.

Vergleich Javascript ⇔ PHP


PHP

PHP ist derzeit die meist verwendete Programmiersprache. Daran haben vor allem Content Management Systeme (CMS) einen großen Anteil.

Man verwendet folgerichtig auch für Empfang und Decodierung von GET-Variablen meistens PHP.
Diese Technologie ist bekannt und etabliert und daher auch kostengünstig und vergleichsweise sicher (Man kennt die häufigsten Fehler bereits).

Wenn man allerdings die dazu geeigneten Programm-Teile auf Javascript überträgt, kann man die gesamte Performance deutlich steigern.
Wer die Möglichkeiten kennt und beherrscht, kann die Vorteile nutzen.


PHP wird am Server-PC ausgeführt.
Dort steht zwar meistens viel Leistung zur Verfügung, diese wird jedoch auf alle Anforderungen aller Clients aufgeteilt.


Bei jeder einzelnen Anforderung jedes Clients muss am Server ein Programm ausgeführt werden.


Wenn man die gleiche dynamische Webseite mehrmals mit verschiedenen Vorgaben anfordert, dann reagiert PHP wesentlich langsamer und belastet den Server mit jeder einzelnen Anforderung jedes Clients.

Begründung: Bei wiederholter interaktiver Anforderung muss der Server jedesmal ein Programm ausführen. Das belastet und verlangsamt den Server erheblich.
Aus Client-Sicht wird die meiste Zeit allerdings durch die jedesmal anfallende Transport-Zeit verbraucht, die meist um mehrere Größenordnungen (!) über der Rechenzeit liegt.
Ein Proxy-Server bringt keine Vorteile. Man muss oft sogar zusätzliche Tricks aufwenden um zu verhindern, dass ein Proxy die Dateien speichert.


Ein Server-Programm hat einfachen Zugriff auf alle Resourcen des Servers, z.B. auf eine zentrale Datenbank.
Reale PHP-Programme gehen jedoch meist weit darüber hinaus und erstellen umfangreiche Teile von Webseiten (z.B. Tabellen) oder Grafik. Diese Arbeiten sollte man vom Server auf den Client übertragen.


PHP-Programme sind für Clients nicht zugänglich:
Das geistige Eigentum der Programmierung ist damit gut geschützt.
Damit werden jedoch stümperhafte Fehler häufiger verborgen als geniale Programme.


PHP-Programme sind für Clients nicht manipulierbar.
Das ist ein wesentlicher Gewinn an Sicherheit, z.B. gegenüber einem leicht manipulierbaren Tabellen-Kalkulations-Programm.


PHP-Entwicklung ist vergleichsweise billig.
Es gibt viele EntwicklerInnen mit fortgeschrittenen PHP-Kenntnissen.
Das hat allerdings auch Grenzen: Es gibt nur wenige EntwicklerInnen, die moderne Objekt-orientierte Methoden mit PHP programmieren können.


PHP steht hier stellvertretend für alle anderen am Server ausgeführten Programme, z.B. auch mit den Programmiersprachen C/C++, Java, Perl, Python, ...

Einzig C/C++ unterscheidet sich in einigen Punkten: Die Entwicklung ist teurer, die Sicherheit jedoch größer, weil sich am Server überhaupt kein Quelltext befindet. Die größere Geschwindigkeit ist kaum nutzbar, weil der Transport der dynamischen Produkte weit mehr Zeit kostet als die Erzeugung.