POST & GET - Allgemein, HTML, PHP

  • 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

    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:

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

    PHP
    /*
    ** 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):

    PHP
    /*
    ** htmlspecialchars maskiert wichtige HTML Zeichen.
    ** < > " ' & werden so zu:
    ** &lt; &gt; &quot; ' &amp;
    */
    $username = htmlspecialchars($_GET['username']);
    echo 'Willkommen '. $username. '!';

    Ansonsten noch einen praktischen Codeschnippsel:

    PHP
    /*
    ** diese kleine foreach-Schleife maskiert automatisch alle GET-Parameter.
    ** $_GET kann gegen jeden anderen Array ersetzt werden.
    ** die maskierten Werte könnern über $pGET['key'] abgerufen werden.
    */
    
    
    foreach ($_GET as $getKey => $getValue){
    	$pGET[$getKey] = htmlspecialchars($getValue);
    }


    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.

    4 Mal editiert, zuletzt von Lars (24. August 2014 um 10:22)

  • Dieses Thema enthält 2 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!