Einleitung
Das HTTP (Hypertext Transfer Protocol) bietet generell zwei Möglichkeiten um sog. Argumente/ Parameter zu übertragen.
Beide Möglichkeiten bezeichnet man als sog. HTTP-Request-Methode.
Die Übertragung von Argumenten bzw. Parametern ist sehr wichtig, da so z. B. Optionen oder andere Daten von einem Skript zum anderem übertragen werden können.
Beide Möglichkeiten werde ich euch mit PHP (PHP: Hypertext Preprocessor ehemals PersonalHome Page Tools) näher bringen.
GET und POST - Zwei Varianten
GET
GET ist die wohl bekannteste Methode für eine Übertragung von Argumenten.
Bei GET werden die Werte (Argumente) über die Webadresse übertragen.
Beim kopieren von Webadressen sind diese Parameter in der Webadresse natürlich enthalten.
Das erste Wertepaare wird stets mit einem ? eingeleitet. (index.php?name=lars)
Darauf folgende Wertepaare beginnen stets mit einem &. (index.php?name=lars&pageNo=1&test=2)
Verwendungsbeispiele für GET:
- Seitenzahlen bei mehrseitigen Websites
- Ein Suchbegriff (Query) für eine Websuche
- etc
Vorteile:
- Die Parameter sind sichtbar und können beim kopieren direkt weitergegeben werden.
- Der Nutzer kann diese Parameter direkt über die Webadresse verändern.
Nachteile
- Die Parameter sind sichtbar und werden schnell beim kopieren weitergegeben (ungeeignet für sensible Daten, o.ä.)
- Größere Daten können nicht übertragen werden. (Bilder, o.ä)
Beispiel
- http://example.com/index.php?category=1&pageNo=3
Hier sehen wir zwei Argumente bzw. Wertepaare (category und pageNo)
Der Server würde nun zwei Argumente und deren Werte erhalten.
POST
POST ist eine Möglichkeit, die für den Benutzer eher unsichtbar im Hintergrund abläuft.
Bei POST werden die Argumente über den sog. HTTP-Body übertragen.
So können auch größere Daten übertragen werden ohne die Webadresse zu 'sprengen'. (bspw. Bilder, lange Zeichenketten, etc.)
Verwendungsbeispiele für POST
- Gästebuch (Übertragung des Eintrags)
- Forum (Übertragung des Textes eines Beitrags, o.ä.)
- Fileupload
- etc
Vorteile
- Übertragung im Hintergrund
- Größere Datenmengen möglich
Nachteile
- Seite lässt sich nicht verlinken (wenn die Daten benötigt werden)
Spoiler anzeigen
Hinweis
Auch Argumente die per POST übertragen sind lassen sich auslesen / verändern.
Tools dafür: Firebug, Tamper Data
Die Anwendung - HTML
Beide Varianten können über HTML Formulare (sog. Forms) genutzt werden.
Natürlich gibt es auch andere Verfahren. (z. B. bei GET: Einfach die Webadresse verändern).
Der Grundaufbau:
Unser Formular hat die Eigenschaften action und method.
Unter action wird das Ziel eingetragen und unter method die Übertragungsmethode (GET oder POST).
Ist action = "", wird die aktuelle Seite gewählt.
Im Formular ist ein Eingabefeld und eine Absenden Schaltfläche vorhanden.
Wir wählen den Namen "Argument1" um den Inhalt später zu empfangen.
Die Anwendung - PHP
Nun da wir die Daten versendet haben müssen wir sie noch empfangen und auswerten.
Dazu nutzen wir PHP.
PHP liest alle GET / POST Argumente aus und erstellt einen Array.
$_POST und $_GET
Für den Aufruf:
// Genereller Aufruf von Werten aus einem Assoziativ-Array
$var = $array['key']
// GET
$pageNo = $_GET['pageNo'];
// POST
$text = $_POST['text'];
// Unser Beispiel
// Groß / Kleinschreibung wird beachtet (!)
$argument1 = $_GET['Argument1'];
Alles anzeigen
Spoiler anzeigen
Hinweis
Bitte beachtet, dass bei GET und POST die Argumente vom Benutzer manipuliert werden können.
Solltet ihr also einen Wert ausgeben solltet ihr darauf achten, dass dieser maskiert wird bzw. auf seinen Typ überprüft wird.
Ansonsten kann es schnell zu einem XSS (Cross-Site-Scripting) Angriff kommen.
Beispiel mit einer Ganzzahl (Integer):
/*
** intval überprüft einen Wert auf seinen Typ.
** ggf. wird der Wert konvertiert.
** 'ab1cd' wird so zu 1.
*/
$pageNo = intval($_GET['pageNo']);
echo 'Du bist auf Seite Nr. '. $pageNo. '.';
Beispiel mit einer Zeichenfolge (String):
/*
** htmlspecialchars maskiert wichtige HTML Zeichen.
** < > " ' & werden so zu:
** < > " ' &
*/
$username = htmlspecialchars($_GET['username']);
echo 'Willkommen '. $username. '!';
Ansonsten noch einen praktischen Codeschnippsel:
Ende
Ich hoffe ich konnte euch ein wenig helfen.
Für Nachfragen stehe ich natürlich bereit, solltet ihr Fehler entdecken könnt ihr diese natürlich melden.