Marcel: POST und GET funktioniert nicht

Hallo,

Ich hab ein Formular und ein Php-skript erstellt.
Das Formular sendet die Daten mit der POST-Methode an die Php-datei.

index.html

...
form action="test.php" method="POST">
    Name:  <input type="text" name="test" /><br />
    <input type="submit" value="senden"/>
</form>
...

test.php

<?php
 $test = $_POST['test'];
 echo $test;
?>

Wenn ich einen Text eingebe auf den Submit-Button klicke, öffnet
sich nur eine leere Seite!!!

Weiß jemand wieso das nicht funktioniert???

Die Version von PHP ist 5.2.5

  1. Hello,

    Ich hab ein Formular und ein Php-skript erstellt.
    Das Formular sendet die Daten mit der POST-Methode an die Php-datei.

    index.html

    ...

    <form action="test.php" method="POST">

    Name:  <input type="text" name="test" /><br />

    <input type="submit" value="senden" />

    </form>

    test.php

    <?php

    echo  htmlspecialchars($_POST['test']);

    ?>

    Wenn ich einen Text eingebe auf den Submit-Button klicke, öffnet
    sich nur eine leere Seite!!!

    Weiß jemand wieso das nicht funktioniert???

    Da fehlte eine öffnende spitze Klammer beim <form>
    Da fehlte ein Leerzeichen hinter "senden"
    Da fehlte die passende Kodierung für den HTML-Kontext
    Da war eine Variablenkope zuviel

    Eventuell fehlt noch eine Behandlung bezüglich Magic Quotes

    Hast Du denn als Document-Type auch XHTML gewählt?

    Harzliche Grüße aus
    Sankt Andreasberg
    und Guten Rutsch

    Tom

    --
    Nur selber lernen macht schlau

    1. Ich würde eher fragen ob sein Apache/PHP beim start Fehler ausgibt.

      ZWar fielen mir die Fehler mit der Spitzklammer auch auf, aber ohne die Klammer hätte er das ding sowieso nicht absenden können von daher ist es irrelevant für die Lösung und war wohl nur ein versehen.

      grüsse

      1. Hello,

        Ich würde eher fragen ob sein Apache/PHP beim start Fehler ausgibt.

        Da stimme ich Dir vollkommen zu.

        Wenn error_reporting nicht passt und display_errors auf sonstwas steht, dann kommt nur eine weiße Seite, wenn ein PHP-Fehler aufgetreten ist.

        Wir haben außerdem gar nicht gefragt, ob Marcel überhaupt den Quelltext der Response angeschaut hat, oder nur das vermeintlich gerenderte Bild im Browser...

        Harzliche Grüße aus
        Sankt Andreasberg
        und Guten Rutsch

        Tom

        --
        Nur selber lernen macht schlau

        1. »» »» Ich würde eher fragen ob sein Apache/PHP beim start Fehler
          ausgibt.

          PHP gibt bei mir keine Fehler aus.

          Im Quelltext steht nur der HTML Text und nicht der Text, den PHP
          ausgeben soll.

          1. Hello,

            »» »» Ich würde eher fragen ob sein Apache/PHP beim start Fehler
            ausgibt.

            PHP gibt bei mir keine Fehler aus.

            Im Quelltext steht nur der HTML Text und nicht der Text, den PHP
            ausgeben soll.

            Es ist doch schon mal ein Erfolg, wenn der PHP-Code nicht mehr im ausgelieferten Quellcode steht...

            Harzliche Grüße aus
            Sankt Andreasberg
            und Guten Rutsch

            Tom

            --
            Nur selber lernen macht schlau

            1. Es ist doch schon mal ein Erfolg, wenn der PHP-Code nicht mehr im ausgelieferten Quellcode steht...

              Nein, der Test der mit "echo  htmlspecialchars($_POST['test']);"
              ausgegeben werden soll steht nicht im Quelltext!!!!
              Das der PHP-Code nicht im Quelltext steht ist klar!!

              1. echo $begrüßung;

                Es ist doch schon mal ein Erfolg, wenn der PHP-Code nicht mehr im ausgelieferten Quellcode steht...

                Nein, der Test der mit "echo  htmlspecialchars($_POST['test']);"
                ausgegeben werden soll steht nicht im Quelltext!!!!
                Das der PHP-Code nicht im Quelltext steht ist klar!!

                Wenn das für dich klar ist, dann ist das ja schön und gut. Warum sollte es aber für andere klar sein, die keinen Einblick in deinen Server haben?

                Fang doch mal mit einfachen Dingen an. Gib einen Text aus, der fest im PHP-Code steht:

                echo "ein Text";

                Was auch immer klappen sollte, und was dir nebenbei noch wertvolle Informationen zur Konfiguration PHPs ausgibt, ist ein

                phpinfo();

                Dort siehst du (ziemlich weit unten) unter anderen die Werte, die dir durch ein Formular zur Verfügung stehen. Ansonsten gehört es zu den Grundlagen jeder Fehlersuche, sich Kontrollausgaben der beteiligten Werte zu machen. Ein echo reicht für einfache Fälle, doch genauer gibt dir die Funktion var_dump() einen Wert aus. Während ein echo manchmal gar keine Ausgabe erzeugt, was bei null, false oder einem Leerstring der Fall ist, siehst du mit var_dump() immer etwas, da es dir auch den Typ eines Wertes ausgibt. Und immer auch in die Quelltext-Ansicht schauen, denn manchmal unterdrückt der Browser eine Ausgabe, wenn diese wie ein HTML-Tag aussieht.

                Wenn du dir nun die Ausgabe von phpinfo() anschaust, so du eine bekommst, prüfe bitte die Werte für display_errors und error_reporting. Das error_reporting sollte beim Entwickeln immer auf E_ALL stehen, damit dir nicht die Hinweise auf Lesezugriffe auf nicht existierende Variablen verschwiegen werden. Durch diese Meldungen offenbaren sich neben Tippfehlern auch Hinweise auf mögliche Angriffsstellen unter Ausnutzung des Features register_globals.

                Das PHP-Handbuch hat in seinem Anhang eine Liste aller Konfigurationsdirektiven nebst Verweis auf einen Erläuterungstext. Dort kannst du die eben erwähnten Direktiven finden und dich über sie informieren.

                Es wurde ja schon erwähnt, dass ein

                $variable = $_POST['variable'];

                überflüssig ist. Solche Konstrukte sieht man leider zu Hauf in allerlei Scripten. Der gewünschte Wert steht bereits in $_POST['variable']. Er muss nicht "abgeholt" werden, das hat PHP schon vor dem Script-Start getan und ihn dort bereitgestellt. $variable lässt sich vielleicht im weiteren Verlauf einfacher tippen als $_POST['variable'], doch andererseits sieht ein $variable auch weniger gefährlich aus als ein $_POST['variable']. Wenn du das mit dem Formular zum Laufen bekommen hast, lass doch mal die Funktion htmlspecialchars() weg und gib in das Formular-Eingabefeld ein

                <script>alert(42)</script>

                ein. Schau dir auch den HTML-Quelltext an. Dann wiederhol den Versuch mit htmlspecialchars(), so wie es Tom notiert hat. Nun dürftest du gesehen haben, was diese Funktion macht, und hoffentlich auch erkannt haben, dass es wichtig ist, sie für alle Ausgaben von Werten in Richtung HTML zu verwenden, besonders jedoch für die Werte, die der Benutzer eingegeben hat, und dass man deswegen diese Benutzereingaben nicht durch Umkopieren in einfache Variablen verschleiern sollte.

                Das was für HTML und htmlspecialchars() im Speziellen gilt, lässt sich zu einem Lehrsatz verallgemeinern:

                Ausgaben müssen stets und ohne Ausnahme für den jeweiligen Ausgabekontext behandelt werden.

                Die häufigsten Kontexte im Webumfeld und darauf spezialisierte Funktionen sind:

                • mysql_real_escape_string() für MySQL-Statements
                • htmlspecialchars() für HTML
                • urlencode() für Werte, die in einer URL transportiert werden sollen. Hier ist zusätzlich noch zu beachten, dass die URL ihrerseits meist noch in einem HTML-Kontext ausgegeben wird, also auch für diesen behandelt werden muss.

                Außerdem ist es noch wichtig, das Feature Magic Quotes zu kennen. Auf der verlinkten Seite ist beschrieben, was es macht, wofür es gedacht ist, aber auch was es für Nachteile mit sich bringt, und wie man es deaktivieren kann. Nachdem du den Ausgabewerte-gemäß-Kontext-behandeln-Lehrsatz kennengelernt hast, und ihn hoffentlich überall berücksichtigst, brauchst du dieses Feature nicht mehr.

                So, das war das Äquivalent zum Stewardessenballett im Flugzeug. Und nun viel Erfolg bei deinem Einstieg in die PHP-Programmierung.

                echo "$verabschiedung $name";

                1. Danke

                  Der echo Befehl funktioniert, aber $_POST('test'); hat keinen Wert.
                  var_dump($_POST['test']); gibt NULL aus!!

                  1. Noch eine Frage:
                    Soll ich die php.ini-dist oder php.ini-recommended verwenden?

                    Im Internet steht, dass man php.ini-dist verwenden soll, aber
                    da bei mir die POST (und GET) Methode nicht funktioniert,
                    kann es vieleicht daran liegen, dass ich die php.ini-recommended
                    verwenden muss???

                    1. echo $begrüßung;

                      Soll ich die php.ini-dist oder php.ini-recommended verwenden?
                      Im Internet steht, dass man php.ini-dist verwenden soll,

                      Das glaube ich nicht, denn wenn sich bisher kein Hinweis darauf findet, dass die reccommended empfohlen ist, dann kommt er nun mit meinem Posting. Die dist hat teilweise noch veraltete Einstellungen, die aber für schlampig programmierte Anwendungen benötigt werden (wobei es besser wäre, auf deren Verwendung zu verzichten oder sie umzuprogrammieren). Die recommended ist auf alle Fälle die zukunftssichere. Wenn deine Anwendung mit der läuft, dann läuft sie im Prinzip auf jeder Konfiguration problemlos. Schau dir die Unterschiede am Anfang der recommended im Abschnitt "About this file" an.

                      da bei mir die POST (und GET) Methode nicht funktioniert,
                      kann es vieleicht daran liegen, dass ich die php.ini-recommended
                      verwenden muss???

                      Weder die eine noch die andere haben einen Einfluss auf deinen Fehler. Du greifst auf $_POST zu, das in jedem Fall funktionieren muss. Der Fehler ist garantiert an anderer Stelle zu finden.

                      echo "$verabschiedung $name";

                      1. echo $begrüßung;

                        Soll ich die php.ini-dist oder php.ini-recommended verwenden?
                        Im Internet steht, dass man php.ini-dist verwenden soll,

                        Das glaube ich nicht, denn wenn sich bisher kein Hinweis darauf findet, dass die reccommended empfohlen ist, dann kommt er nun mit meinem Posting. Die dist hat teilweise noch veraltete Einstellungen, die aber für schlampig programmierte Anwendungen benötigt werden (wobei es besser wäre, auf deren Verwendung zu verzichten oder sie umzuprogrammieren). Die recommended ist auf alle Fälle die zukunftssichere. Wenn deine Anwendung mit der läuft, dann läuft sie im Prinzip auf jeder Konfiguration problemlos. Schau dir die Unterschiede am Anfang der recommended im Abschnitt "About this file" an.

                        da bei mir die POST (und GET) Methode nicht funktioniert,
                        kann es vieleicht daran liegen, dass ich die php.ini-recommended
                        verwenden muss???

                        Weder die eine noch die andere haben einen Einfluss auf deinen Fehler. Du greifst auf $_POST zu, das in jedem Fall funktionieren muss. Der Fehler ist garantiert an anderer Stelle zu finden.

                        echo "$verabschiedung $name";

                        Mit PHP 4.4.7 funktioniert $_POST, $_GET und phpinfo() ;-)

                        1. Hello,

                          Weder die eine noch die andere haben einen Einfluss auf deinen Fehler. Du greifst auf $_POST zu, das in jedem Fall funktionieren muss. Der Fehler ist garantiert an anderer Stelle zu finden.

                          Vielleicht ist POST generell verboten? Soll es ja geben, dass jemand an der Einstellung manipuliert hat. Aber kann man das mit GET auch machen? Dann könnte doch gar keine Ressource mehr ausgeliefert werden.

                          Harzliche Grüße aus
                          Sankt Andreasberg
                          und Guten Rutsch

                          Tom

                          --
                          Nur selber lernen macht schlau

                  2. echo $begrüßung;

                    Der echo Befehl funktioniert, aber $_POST('test'); hat keinen Wert.

                    Bitte achte auf die richtigen Klammertypen. Für Zugriffe auf Array-Elemente verwendet man [], was du ja im folgenden Beispiel richtig machst.

                    var_dump($_POST['test']); gibt NULL aus!!

                    Verwende nicht so viele Satzzeichen (!!) sondern deinen Verstand. Versuche dann bitte sämtliche Hinweise in meinem vorigen Posting nachzuvollziehen, besonders den vom error_reporting, und den vom phpinfo(). Außerdem kann man nicht nur Array-Elemente sondern auch das komplette Array zur Kontrolle ausgeben lassen: var_dump($_POST). Für Arrays gibt es außerdem noch print_r(), das eine etwas übersichtlichere Ausgabe erzeugt, dafür jedoch nicht so präzise wie var_dump() ist. In beiden Fälle empfiehlt es sich, vorher ein <pre> auszugeben, oder in die HTML-Quelltext-Ansicht zu schauen.

                    Wenn du weder mit phpinfo() noch mit der Ausgabe von $_POST deine Eingabe findest, dann läuft etwas anderes verkehrt.

                    echo "$verabschiedung $name";

          2. Hi,

            »» »» Ich würde eher fragen ob sein Apache/PHP beim start Fehler
            ausgibt.

            PHP gibt bei mir keine Fehler aus.

            Es waere evtl. einfacher, dir weiterzuhelfen, wenn du explizit sagen wuerdest, dass du die Hinweise bzgl. error_reporting und display_errors auch zur Kenntnis genommen und deren Werte kontrolliert hast ...

            MfG ChrisB

  2. Hi Tom,
    sollte so auf jedenfall funktionieren :-)

    <html>
    <head>
    </head>
    <body>
    <form action="test.php" method="POST">
    <input type="text" name="test">
    <input type="submit" value="senden">
    </form>

    </body>
    </html>

    <?php
     $test = $_POST['test'];
     echo $test;
    ?>

    Gruß Patti