Tutorial -Variabeln übergeben mit POST und GET

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tutorial -Variabeln übergeben mit POST und GET

    Variablen übergeben POST und GET

    Willkommen zu einem kleinen Tutorial zum Thema Übergaben von Variablen mit GET und POST in php.
    Dieses Tutorial ist quasi als php Erweiterung des Kapitel 11 vom HTML Grundkurs/ Tutorial (11. Formulare) zu sehen,
    wie bereits im HTML Tutorial versprochen.
    Hier werde ich schildern, wie man die GET-Methode und die POST-Methode einsetzt und damit arbeitet.
    Wer schon mal ein Tutorial von mir gelesen hat bzw. Viedotutorial gesehen hat,
    wird wissen, dass ich gerne etwas ausführlicher erkläre und meine Tutorials auch schnell mal größer werden.
    Ich werde versuchen, auch dieses Tutorial möglichst einfach und leicht verständlich zu erklären,
    weshalb man auch nicht immer direkt auf ein Fachwort sondern auf für Anfänger verständliche Sprache treffen wird.

    Was ist eigentlich GET und POST?
    GET und POST sind Methoden, mit der man Variablen sowohl an andere Dateien (z.B. Datei 1 hat ein Formular und übergibt Daten an Datei 2) senden sowie an die eigene Datei zurück senden kann.
    Während GET direkt sichtbar für jeden User in der URL der Webseite definiert und gesendet wird, sieht man die Übergabe mit POST im Browser so nicht direkt(Natürlich gibt es Möglichkeiten auch POST sichtbar zu machen, bzw. ab zu fangen, womit ich mich aber nun nicht näher beschäftigen will).
    POST wird meist für Formulare (Usereingaben) verwendet, während man GET mehr für z.B. übergaben der Seitenanzahl, auf der man sich auf einer Webseite gerade befindet genutzt wird.

    POST:
    Als Beispiel werden wir ein Formularfeld betrachten,
    welches z.B. als Gästebuch verwendet werden kann.
    Hierbei will ich darauf ausdrücklich hinweisen, das wir uns erstmal nicht mit dem Speichern der Daten befassen werden,
    sondern lediglich damit, wie die Daten übermittelt und ausgegeben werden.
    Wir arbeiten hier mit einem Formular, das im HTML Grundkurs/ Tutorial besprochen und erstellt wurde.
    Es handelt sich um das in einer tabelle formatierte Gästebuchformular.
    Wer dies noch genau erklärt haben will kann sich dieses HTML Kapitel durchlesen: 11. Formulare

    So sieht also unser Formular aus:

    HTML-Quellcode

    1. <form action="eintrag.php" method="post">
    2. <table border="0" cellpadding="10">
    3. <tr>
    4. <td>Name:</td>
    5. <td><input type="Text" name="name"></td>
    6. </tr>
    7. <tr>
    8. <td>Eintrag:</td>
    9. <td><textarea name="eintrag"></textarea></td>
    10. </tr>
    11. <tr>
    12. <td>Email:</td>
    13. <td><input type="email" name="email"></td>
    14. </tr>
    15. <tr>
    16. <td colspan="2"><input type="Submit" name="send" value="G&auml;stebucheintrag absenden"></td>
    17. </tr>
    18. </table>
    19. </form>
    Alles anzeigen


    In diesem Formular (Form) haben wir nun folgende Elemente, die in einer Tabellenstruktur formatiert sind:
    [table='HTML,Erklärung']
    [*]<input type="Text" name="name">
    [*]Ein einfaches Inputfeld mit dem Namen "name" des Types Text zur Eingabe des Namens vom Autor des Gästebucheintrags

    [*]<textarea name="eintrag"></textarea>
    [*]Ein Textfeld (Scrollbar, mehrzeilig) mit dem Namen "eintrag" zur Eingabe des Gästebucheintrags

    [*]<input type="email" name="email">
    [*]Ein Inputfeld mit dem Namen "email" des Types "email" uzr Eingabe der EMailadresse des Autors vom Gästebucheintrag.

    [*]<input type="Submit" name="send" value="G&auml;stebucheintrag absenden">
    [*]Ein Button (Input des Types "Submit") dem wir zusätzlich noch den Namen "send" gegeben haben mit dem Text Gästebucheintrag absenden.
    [/table]

    nun gibt es 2 Möglichkeiten:
    1. Das Formular ist in einer Seite und soll in einer anderen Seite (in einer anderen Datei) ausgelesen und verarbeitet werden.
    2. Das Formular soll in der selben Datei verarbeitet und ausgelesen werden.
    Wir werden uns beide Varianten anschauen.

    1. Das Formular soll in einer neuen Datei verarbeitet werden:
    Wir haben 2 Dateien, die sich im selben Ordner (Gleichen Dateipfad) befinden:
    gaestebuch.htm und eintrag.php

    Den Inhalt der HTML Datei gaestebuch.htm kennen wir bereits:

    HTML-Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2. "http://www.w3.org/TR/html4/loose.dtd">
    3. <html>
    4. <head>
    5. <title>G&auml;stebuch</title>
    6. </head>
    7. <body>
    8. <h1>Danke f&uuml;r deinen G&auml;stebucheintrag</h1>
    9. <form action="eintrag.php" method="post">
    10. <table border="0" cellpadding="10">
    11. <tr>
    12. <td>Name:</td>
    13. <td><input type="Text" name="name"></td>
    14. </tr>
    15. <tr>
    16. <td>Eintrag:</td>
    17. <td><textarea name="eintrag"></textarea></td>
    18. </tr>
    19. <tr>
    20. <td>Email:</td>
    21. <td><input type="email" name="email"></td>
    22. </tr>
    23. <tr>
    24. <td colspan="2"><input type="Submit" name="send" value="G&auml;stebucheintrag absenden"></td>
    25. </tr>
    26. </table>
    27. </form>
    28. </body>
    29. </html>
    Alles anzeigen


    Nun brauchen wir noch die Datei eintrag.php,
    in der die Eingaben des Formulars weiter verarbeitet werden.
    Dazu müssen wir als erstes wissen, dass mit dem Klick auf den Button in der gaestebuch.htm das gesamte Formular an eintrag.php gesendet wird.
    Bevor wir nun überhaupt die Eingabefelder auslesen,
    wollen wir zuerst, dass überprüft wird, ob das Formular überhaupt abgesendet wurde, also ob man über den Klick auf den Absenden Button auf eintrag.php kam oder z.B. durch das direkte Aufrufen der eintrag.php.
    Dazu benutzen wir in php isset(), was überprüft, ob eine Variable gesetzt wurde.
    Dazu müssen wir nun wissen, was wir überhaupt prüfen sollen, in unserem Fall der Button, ob er angeklickt wurde.
    Wir haben ihm nun einen festen Namen gegeben, der Button heißt "send". Mit $_POST[send] rufen wir den nun ab.
    $_POST[] ruft gesendete Name die alte Variante war "$HTTP_POST_VARS", was man nun nicht mehr nutzen sollte.
    Wenn unser Button gedrückt wurde $_POST[send] gesetzt. Das ganze kommt in eine if Anweisung.

    Nun wollen wir unser gesammeltes Wissen mal umsetzen.
    den php Code schreibt man in <?php /* HIER DER PHP CODE */ ?>. /* */ ist übrigens ein Kommentar (innerhalb der Zeichen).

    In der if Abfrage fragen wir nun mit isset() auf, ob $_POST[send] gesetzt wurde.
    Dies sieht so aus:

    PHP-Quellcode

    1. if(isset($_POST[send]))
    2. {
    3. /* Das hier wird ausgeführt, wenn $_POST[send] gesetzt wurde */
    4. }
    5. else
    6. {
    7. /* Wenn $_POST[send] nicht gesetzt wurde, wird dies hier ausgeführt */
    8. }


    Zuerst beschäftigen wir uns damit, was passieren soll, wenn $_POST[send] gesetzt wurde.
    Nun müssen wir die Formulardaten abrufen.
    Dies geht ebenfalls mit $_POST[], welche wir nun einfachhalber in Variablen speichern.

    zuerst müssen wir hier wissen, dass Variabeln in php so aussehen: "$variablename".
    Wir brauchen nun für jedes Eingabefeld eine Variable.
    Um in die Variable die jeweilige Eingabe aus dem Formular einzutragen weisen wir der Variable mit einem Gleichheitszeichen (=) $_POST[] zu.
    Dies sieht dann für alle Formularfelder zusammen so aus:

    PHP-Quellcode

    1. $name = $_POST["name"]; // Daten aus dem Formularfeld "name" in der Variable $name
    2. $gbtext = $_POST["eintrag"]; // Daten aus dem Formularfeld "eintrag" in der Variable $gbtext
    3. $email = $_POST["email"]; // Daten aus dem Formularfeld "email" in der Variable $email

    Was hinter dem "//" steht ist ebenfalls ein Kommentar und wird im Browser nicth berücksichtigt.

    Zusammen sieht unser php Code nun so aus:

    PHP-Quellcode

    1. if(isset($_POST[send]))
    2. {
    3. $name = $_POST["name"]; // Daten aus dem Formularfeld "name" in der Variable $name
    4. $gbtext = $_POST["eintrag"]; // Daten aus dem Formularfeld "eintrag" in der Variable $gbtext
    5. $email = $_POST["email"]; // Daten aus dem Formularfeld "email" in der Variable $email
    6. }
    7. else
    8. {
    9. /* Wenn $_POST[send] nicht gesetzt wurde, wird dies hier ausgeführt */
    10. }


    Nun wollen wir mit den Variablen noch etwas machen.
    Da ich hier erstmal nicht auf die Speicherung der Daten eingehen will sondern nur die Übergabe,
    werden wir die jetzt einfach nur einmal im Browser anzeigen lassen, also ausgeben.
    Wie man dies in einer SQL Tabelle speichert werde ich zur gegebenen Zeit in einem weiterem Tutorial erklären.

    zur einfachen Ausgabe von Texten in php verwendet man echo"";.
    Das in den Anführungszeichen stehende (String) wird im Browser ausgegeben.
    Man kann nun also einfach die Sachen ausgeben, dazu kann man nun die Variablen so direkt im echo schreiben und ausgeben oder seperat dazu ausgeben.
    Welche Methode man nimmt ist nun erstmal relativ egal, hier ein Beispiel für beide:

    1. Direkt im echo: echo "Hallo $name";
    2. Nicht direkt in echo: echo "Hallo".$name;

    Wir werden nun erstmal das obere verwenden.
    Nun geben wir also den Gästebucheintrag aus.
    Dies machen wir im echo mit den Variavblen und einem eigenen Text, der immer gleich sein wird:

    PHP-Quellcode

    1. echo "G&auml;stebucheintrag von <b>$name</b><br /><i>$gbtext</i><br />Deine EMail: $email";

    Die EMail würde man so natürlich nicht ausgeben, zumindest dann nicht später für alle sichtbar, da ads hier aber erstmal nur dem Absender angezeigt wird, können wir ihm zur Kontrolle die EMail noch einmal anzeigen lassen. Wie man sieht, haben wir in der Formatierung direkt HTML Tags mit rein genommen, was möglich ist. Somit wird der Name z.B. fett gedruckt angezeigt und der Gästebucheintrag kursiv.
    Da wir nun echo ""; kennen, können wir direkt einen Fehler damit ausgeben, falls man die Seite nicht über den Button aufruft: echo "Fehler beim aufrufen der Seite.";

    Unser gesamte php Code sieht nun so aus:

    PHP-Quellcode

    1. if(isset($_POST[send]))
    2. {
    3. $name = $_POST["name"]; // Daten aus dem Formularfeld "name" in der Variable $name
    4. $gbtext = $_POST["eintrag"]; // Daten aus dem Formularfeld "eintrag" in der Variable $gbtext
    5. $email = $_POST["email"]; // Daten aus dem Formularfeld "email" in der Variable $email
    6. echo "G&auml;stebucheintrag von <b>$name</b><br /><i>$gbtext</i><br />Deine EMail: $email";
    7. }
    8. else
    9. {
    10. echo "Fehler beim aufrufen der Seite.";
    11. }
    Alles anzeigen

    Wichtig ist darauf zu achten, ein Semikolon immer richtig zu setzen (;).
    2. Das Formular soll in derselben Datei verarbeitet werden:
    Nun wollen wir uns noch mal ganz kurz der Möglichkeit widmen,
    alles in einer Datei zu verarbeiten, also sowohl das Formular in einer Datei zu haben, als auch die Verarbeitung.

    PHP-Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2. "http://www.w3.org/TR/html4/loose.dtd">
    3. <html>
    4. <head>
    5. <title>G&auml;stebuch</title>
    6. </head>
    7. <body>
    8. <?php
    9. if(isset($_POST[send]))
    10. {
    11. $name = $_POST["name"]; // Daten aus dem Formularfeld "name" in der Variable $name
    12. $gbtext = $_POST["eintrag"]; // Daten aus dem Formularfeld "eintrag" in der Variable $gbtext
    13. $email = $_POST["email"]; // Daten aus dem Formularfeld "email" in der Variable $email
    14. echo "G&auml;stebucheintrag von <b>$name</b><br /><i>$gbtext</i><br />Deine EMail: $email";
    15. }
    16. ?>
    17. <h1>Danke f&uuml;r deinen G&auml;stebucheintrag</h1>
    18. <form action="gastebuch.php" method="post">
    19. <table border="0" cellpadding="10">
    20. <tr>
    21. <td>Name:</td>
    22. <td><input type="Text" name="name"></td>
    23. </tr>
    24. <tr>
    25. <td>Eintrag:</td>
    26. <td><textarea name="eintrag"></textarea></td>
    27. </tr>
    28. <tr>
    29. <td>Email:</td>
    30. <td><input type="email" name="email"></td>
    31. </tr>
    32. <tr>
    33. <td colspan="2"><input type="Submit" name="send" value="G&auml;stebucheintrag absenden"></td>
    34. </tr>
    35. </table>
    36. </form>
    37. </body>
    38. </html>
    Alles anzeigen

    Diese Datei muss nun eine .php Datei sein.
    wir nennen sie z.B. gastebuch.php,
    das Formular wird zu der selben Datei zurück gesendet und wenn der Button gedrückt wurde, wird dies verarbeitet.
    Das Formular wird hier nun übrigens immer angezeigt.

    GET:
    Nun wollen wir uns mit der GET Methode beschäftigen.
    Mit dieser Methode kann man eine Variable quasi direkt an die URL setzen.

    Um dies nun einmal etwas ab zu kürzen schauen wir uns folgenden Link an:

    HTML-Quellcode

    1. <a href="index.php?zahl=3">Zahl 3 mitgeben</a>

    Mal angenommen, dieser Link befindet sich so auf der index.php.

    Hierzu finden wir in der index.php folgenden PHP Code:

    PHP-Quellcode

    1. if(isset($_GET[zahl]))
    2. {
    3. $zahl = $_GET[zahl];
    4. echo "Du hast die Zahl $zahl mit der GET Methode übertragen";
    5. }


    Rufen wir nun die index.php auf, sehen wir die Startseite und was sich sonst so drauf befindet.
    Wir haben noch nicht auf den oben genannten Link geklickt, somit wurde die GET Methoed nicht übergeben und dieser php Code wird nicht ausgeführt, heißt das echo""; wird nicht angezeigt.
    Klicken wir nun auf den Link, kommen wir wieder auf die selbe index.php Seite, mit dem feinen Unterschied, das wir nun mit der URL etwas mit gesendet haben.
    Um genau zu sein haben wir dies mit gesendet:

    HTML-Quellcode

    1. ?zahl=3

    Dies ist einfach an der URL angehangen und enthält quasi die Variable zahl mit dem Inhalt 3.
    das "zahl" können wir nun mit $_GET[zahl]; aufrufen, wie im php Code.
    Wie bereits in der POST Methode werden wir auch hier den Wert erstmal in eine Variable laden, in dem Fall $zahl.
    Diese Zahl wird nun einfach mit ausgegeben.
    Hinter der Seite, in unserem fall index.php setzt man hier ein Fragezeichen, was angibt, das da noch etwas folgt.
    Nun setzen wir hier einfach unser zahl=3 ein. Man kann auch mehrere Sachen in einer URL mitgeben.
    Ein Beispiel:
    Link:

    HTML-Quellcode

    1. <a href="index.php?zah1l=3&zahl2=12&zahl3=0">3 Werte mitgeben</a>

    Ausschnitt aus der index.php

    PHP-Quellcode

    1. if(isset($_GET[zahl]))
    2. {
    3. $zahl1 = $_GET[zahl1];
    4. $zahl2 = $_GET[zahl2];
    5. $zahl3 = $_GET[zahl3];
    6. echo "Du hast die folgenden Zahlen mit übergeben: $zahl1, $zahl2, $zahl3";
    7. }

    Hier werden einfach 3 Werte mit übergeben, was durch ein Und-Zeichen (&) getrennt wird.

    Das wars im Grunde mit GET und POST,
    ich werde dies hier bei Gelegenheit noch erweitern.
    Wie oben schon angedeutet, habe ich es versucht sehr simpel und einfach zu halten,
    daher ist der Code auch dementsprechend etwas einfacher aufgebaut.

    Übergabe von der GET-Methode und der POST-Methode mit $_REQUEST
    Da zimlich schnell der Vorschlag aufkam, die $_REQUEST Abfrage Methode hinzu uz fügen,
    werde ich dies in diesem kleinen Nachtrag nun direkt mal erledigen.

    Dazu wollen wir erstmal wieder wissen:
    Was ist $_REQUEST überhaupt?
    $_REQUEST kann dazu verwendet werden,
    Werte auszulesen, die sowohl mit der POST-Methode, als auch mit der GET-Methode übergeben wurden.
    Des weiteren kann man auch Cookies mit $_REQUEST auslesen.

    Nehmen wir uns wieder die Abfrage vor, die wir bereits in der GET Methode oben hatten.

    PHP-Quellcode

    1. if(isset($_REQUEST[zahl]))
    2. {
    3. $zahl1 = $_REQUEST[zahl1];
    4. $zahl2 = $_REQUEST[zahl2];
    5. $zahl3 = $_REQUEST[zahl3];
    6. echo "Du hast die folgenden Zahlen mit übergeben: $zahl1, $zahl2, $zahl3";
    7. }


    Dieser Code ist an sich der selbe, wie wir ihn schon für die GET-Abfrage benutzt haben,
    nur mit dem Unterschied, dass wir dieses mal statt "$_GET" die Abfrage "$_REQUEST" benutzen.

    Nur was unterscheidet diesen Code von der $_GET Methode?
    Die Antwort darauf ist relativ simpel und der Grund, warum dieser Tutorialzusatz relativ kurz wird:
    Diesen Code mit $_REQUEST kann nun genutzt werden sowohl für eine Übergabe mit POST, als auch GET.
    Die 3 Zahlen können in diesem Fall also sowohl in einem Formular, das mit POST übergeben wurde stehen, als auch z.B. in einem Link, der mit GET übergeben wird.
    Wir wissen also hier an dieser Stelle nicht, ob die Übergabe mit POST oder GET (oder vielleicht Cookies worauf ich hier nicht eingehen werde) stattfindet.

    Da dies nun schon fast am Thema Cookies grenzt (Wo ich direkt in Session gehen könnte) werde ich evt.
    bald ein Tutorial über Sessions und Cookies veröffentlichen, was seid einiger Zeit schon halbfertig auf meinem Computer liegt.
    Über eine Rückmeldung, ob das Tutorial hier erwünscht ist wäre ich dankbar, sowie für Rückmeldungen auf dieses Tutorial.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Dennis321 ()

  • Vielen Dank Vincent,
    freue mich immer sehr über so positive Rückmeldungen.

    @Bubelbub,
    Das ist so denke mal ehe Geschmackssache,
    was man nimmt, da ich bis jetzt immer mit den einzelnen Methoden -Abfragen gearbeitet habe habe ich diese genommen.
    Werde $_REQUEST dennoch mal rein nehmen, ist ja jetzt nicht so schwer und kompliziert ^^ (Danke für den Vorschlag).


    //EDIT: Ich habe das einfach mal aols Tutorialzusatz eingefügt, danke für den Vorschlag ^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Dennis321 ()