srob: Wo sind die Post-Variablen?

Hi,

ich habe eine PHP-Seite, die ein Formular enthält:

<form id="frmArtIn" method="post" action="vincms_artin.php">
  <input type="hidden" name="nAction" value="1" /><br />
  <input type="text" name="cDatum" value="<?php print($gcDatum); ?>" maxlength="254" style="width:448px;" />
</form>

Per submit() ruft die Seite sich selbst wieder auf. Weiter unten im body versuche ich dann, auf die per POST übergebenen Variablen zuzugreifen - leider ohne Erfolg! Planloses Herumexperimentieren bringt folgende Ergebnisse:

print($cDatum)           -> nichts
print_r($_POST)          -> Array ( )
print_r($HTTP_POST_VARS) -> Array ( )

Ich weiß nicht, ob es von Bedeutung ist: das ganz läuft in einer Session.

Wo stehe ich auf dem Schlauch?

TIA Robert

  1. Hallo Robert.

    Ein Array auszugeben ist nicht ganz so einfach wie Du es versuchst. Die Werte stehen in jeweils an der Stelle in feldname. Die einzelnen Werte sind also als $_POST['feldname'] aufrufbar.

    Grüße aus Würzburg
    Julian

    1. Ein Array auszugeben ist nicht ganz so einfach wie Du es versuchst. Die Werte stehen in jeweils an der Stelle in feldname. Die einzelnen Werte sind also als $_POST['feldname'] aufrufbar.

      Hallo Julian,

      da mein Know How in dem Bereich auf wackeligen Beinen steht, habe ich in meinem Posting von "Herumexperimentieren" gesprochen. Die Weisheit, ein Array so auszugeben, habe ich aus der PHP-Doku; Zitat:

      $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
      print_r ($a);

      So kam ich auf print_r($_POST). Wenn ich auf einzelnen Felder des Arrays zugreife (was ich vorher bereits versucht hatte), so ist das Ergebnis immer noch unbefriedigend:

      print($_POST['cDatum']) -> nichts (genauer: Leerstring)

      Mein Problem liegt auch weniger in der Ausgabe von $_POST; das habe ich benötigt, um mir einen Überblick über die POST-transportierten Variablen zu verschaffen. Scheinbar kommen gar keine Variablen im PHP-Skript an. Prüfe ich mit isset(...), so ist das Ergebnis immer false.

      Robert

      1. Hallo

        Ups. Ok, da muss ich wohl zurückrudern. Habe meine Arrayausgaben immer etwas anders gebastelt und Testausgaben anders umgesetzt.

        Was macht denn phpinfo()? Funktioniert die ordentlich am Server?

        Wie sieht denn das Absenden des Formulars aus? Ist vielleicht da der Wurm drin?

        Grüße aus Würzburg
        Julian

        1. Hallo Julian,

          Was macht denn phpinfo()? Funktioniert die ordentlich am Server?

          da andere Seiten mit Formularen in der gleichen Session (z.B. eine Login-Seite, die auf die nichtfunktionierende Seite führt) arbeiten wie vorgesehen, schließe ich darauf, daß PHP ordentlich läuft.

          Wie sieht denn das Absenden des Formulars aus? Ist vielleicht da der Wurm drin?

          Ein Link auf der Seite ruft in seinem onclick-Event eine Javascript-Funktion auf, die so aussieht:

          function TNew()
            {
            with(document.getElementById('frmArtIn'))
              {
              nAction.value = 4711;
              submit();
              }
            }

          Gruß

          Robert

          1. Hi,

            das kann doch soooo viele Gründe haben:

            1. welches Betriebssystem auf dem Server? /Version?
            2. welcher Webserver? / Version?
            3. welche PHP-Version?
            4. PHP als Modul ?
            5. Welches Betriebssystem auf dem Client?
            6. Welcher Browser?

            7. Wird z.B. eine Firewall benutzt?
            8. Wird .htaccess mit z.B. LIMIT benutzt?

            9. Kommen denn GET-Variablen bei PHP an?

            ...

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
            1. Hallo Thomas,

              1. welches Betriebssystem auf dem Server? /Version?
              2. welcher Webserver? / Version?
              3. welche PHP-Version?
              4. PHP als Modul ?
              5. Welches Betriebssystem auf dem Client?
              6. Welcher Browser?
              7. Wird z.B. eine Firewall benutzt?
              8. Wird .htaccess mit z.B. LIMIT benutzt?

              sollten diese Fragen Relevanz besitzen, wenn innerhalb der Session, in der das Problem auftritt, andere Seiten (mit ähnlich konstruierten Formularen versehen) ordnungsgemäß arbeiten?

              1. Kommen denn GET-Variablen bei PHP an?

              Ja.

              Gruß

              Robert

              1. Hallo,

                1. welches Betriebssystem auf dem Server? /Version?
                2. welcher Webserver? / Version?
                3. welche PHP-Version?
                4. PHP als Modul ?
                5. Welches Betriebssystem auf dem Client?
                6. Welcher Browser?
                7. Wird z.B. eine Firewall benutzt?
                8. Wird .htaccess mit z.B. LIMIT benutzt?

                sollten diese Fragen Relevanz besitzen, wenn innerhalb der Session, in der das Problem auftritt, andere Seiten (mit ähnlich konstruierten Formularen versehen) ordnungsgemäß arbeiten?

                ggf. ja.

                Es ist unter Linux/Apache/... möglich, mittels .htaccess bestimmte Operationen (z.B. Post) zu filtern. Ob da nun immer eine Fehlermeldung produziert wird, oder man den Request (Post) einfach ins dev null umleiten kann, weiß ich nicht. Das wäre abe eine logische Erklärung für Deine Probleme:

                Falsch konfiguriertes .htaccess

                1. Kommen denn GET-Variablen bei PHP an?

                Ja.

                Das wäre für mich Grundgenug, mal die Logs genauer zu untersuchen oder mich wieder darüber aufzuregen, dass ich immer noch keinen vernünftigen Traffic-Sniffer (wenigstens für HTTP) habe. <zaunlatte>Nen Link auf ne gute Freeware wäre noch ein nettes Weihnachtsgeschenk</zaunlatte>

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Moin!

    Per submit() ruft die Seite sich selbst wieder auf. Weiter unten im body versuche ich dann, auf die per POST übergebenen Variablen zuzugreifen - leider ohne Erfolg! Planloses Herumexperimentieren bringt folgende Ergebnisse:

    print($cDatum)           -> nichts
    print_r($_POST)          -> Array ( )
    print_r($HTTP_POST_VARS) -> Array ( )

    Wenn du nicht weißt, was der Browser so sendet: Füge den Befehl
    phpinfo(INFO_VARIABLES);
    ein - er wird dir alle interessanten Variableninhalte von $_GET, $_POST, $_SERVER, $_COOKIES etc. anzeigen. Wenn da nichts kommt, sendet der Browser nichts. Wenn da was kommt, aber woanders auftaucht, also du dachtest, weißt du zumindest, wo du suchen mußt.

    - Sven Rautenberg

    --
    Diese Signatur gilt nur am Freitag.
    1. Hallo Sven,

      Wenn du nicht weißt, was der Browser so sendet: Füge den Befehl
      phpinfo(INFO_VARIABLES);
      ein - er wird dir alle interessanten Variableninhalte von $_GET, $_POST, $_SERVER, $_COOKIES etc. anzeigen. Wenn da nichts kommt, sendet der Browser nichts. Wenn da was kommt, aber woanders auftaucht, also du dachtest, weißt du zumindest, wo du suchen mußt.

      wahrscheinlich hat Julian das auch gemeint, als er auf phpinfo() verwies, ich war nur zu beratungsresistent...

      Ich habe phpinfo() eingefügt, und sehe, daß keine POST-Variablen übertragen werden. Die Session bleibt unverändert.

      Es sieht so aus, als sende der Browser nichts. Damit bin ich beim Formular (bin ich?):

      <form id="frmArtIn" method="post" action="vincms_artin.php">
        <input type="hidden" name="nAction" value="1" /><br />
        <input type="text" name="cDatum" value="<?php print($gcDatum); ?>" maxlength="254" style="width:448px;" />
      </form>

      Zumindest ist klar, daß der submit() ausgelöst und die korrekte action ausgeführt wird - nur ohne POST-Variablen. Wo könnte das Problem liegen?

      TIA Robert

      1. Moin!

        Es sieht so aus, als sende der Browser nichts. Damit bin ich beim Formular (bin ich?):

        <form id="frmArtIn" method="post" action="vincms_artin.php">
          <input type="hidden" name="nAction" value="1" /><br />
          <input type="text" name="cDatum" value="<?php print($gcDatum); ?>" maxlength="254" style="width:448px;" />
        </form>

        Zumindest ist klar, daß der submit() ausgelöst und die korrekte action ausgeführt wird - nur ohne POST-Variablen. Wo könnte das Problem liegen?

        Ich sehe da keinen submit(). Den solltest du vielleicht einfach noch mal zeigen. Oder mal einen billigen Submit-Button einfügen.

        - Sven Rautenberg

        --
        Diese Signatur gilt nur am Freitag.
        1. Hallo Sven,

          Ich sehe da keinen submit(). Den solltest du vielleicht einfach noch mal zeigen.

          Hatte ich irgendwo im Thread schon mal erwähnt. Außerhalb des Formulars ist ein Link, der in seinem onclick-Event eine Javascript-Funktion aufruft, die so aussieht:

          function TNew()
            {
            with(document.getElementById('frmArtIn'))
              {
              nAction.value = 4711;
              submit();
              }
            }

          Oder mal einen billigen Submit-Button einfügen.

          Interessant, wenn ich einen Submit-Button einfüge:

          <input type="submit" onclick="document.getElementById('frmArtIn').nAction.value = 4711;" name="test" />

          dann geht es! Welche Schlüsse ziehe ich daraus? Ist der von mir gewählte Weg ohne Submit-Button unzulässig? Der Submit-Button paßt nicht in mein Konzept, denn unterhalb des Formulars sollen mehrere Links verschiedene Aktionen ermöglichen (sieht etwa so aus: http://www.aperion.de/vinonet/test.htm).

          Robert

  3. Hallo Robert,

    Ich wage mal einen Schuß ins Blaue, denn ich kanns mir ehrlich gesagt nicht erklären... :-(

    Probier's doch mal mit einem zusätzlichen Attribut enctype="application/x-www-form-urlencoded" - das ist zwar eigentlich default, aber man weiß ja nie... Ich hatte einmal den Fall, dass der IE bei einem enctype="text/plain" das wirklich wörtlich genommen hat (ich hatte von mailto: auf einen Formmailer umgestellt und das vergessen rauszunehmen) und somit beim Server die Daten nicht angekommen sind... Dein Code zeigt zwar nichts von dem, aber man weiß ja nie, was sich einige Browser so ausdenken...

    HTH,

    Christian

    --
    Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                          -- Albert Einstein
    1. Probier's doch mal mit einem zusätzlichen Attribut enctype="application/x-www-form-urlencoded"

      Hallo Christian,

      die explizite Angabe des enctypes bringt keine Veränderung. Hingegen bin ich mit dem Hinweis von Sven, einen Submit-Button einzusetzen, einen Schritt weiter gekommen (oder auch nicht?). Scheinbar erfolgt die Variablenübergabe via POST mit einem Submit-Button fehlerlos, setze ich statt dessen einen Link ein, der im onclick-Ereignis eine den Submit auslösende Funktion aufruft, so tritt das Problem auf.

      Innerhalb der gleichen Session verfahre ich auf einer anderen Seite auf die gleiche Weise (Link außerhalb des Formulars löst per Javascript den Submit aus). Das Ziel dieses Submits ist die nicht funktionierende Seite. Da fällt mir ein, daß ich auf der fehlerhaften Seite etwas konstruiert habe, über dessen Konsequenzen ich mir nicht im Klaren bin. Ganz am Anfang des Quellcodes - noch vor dem Doctype - habe ich folgenden Code eingefügt:

      <?php
      @session_start();
      if($_SESSION['cReg'] != 'regd')
        {
        header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/noaccess.htm");
        @session_destroy();
        exit;
        }
      include("cms_lib.php");
      ?>

      Damit versuche ich Zugriffe ohne gültige Session-ID umzulenken. Könnte hierin die Ursache für das Problem der verlorenen POST-Variablen liegen?

      Ratlos, Robert

      1. Hallo Robert,

        Damit versuche ich Zugriffe ohne gültige Session-ID umzulenken. Könnte hierin die Ursache für das Problem der verlorenen POST-Variablen liegen?

        Nein. Denn wenn umgelenkt würde, dann wärst Du schon längst nicht mehr auf der Seite.

        http://www.aperion.de/vinonet/test.htm [aus anderem Posting]

        Fehler gefunden!

        onClick="TNew(); return false;"

        Sonst wird der Link aktiviert, der nun mal auf die Seite selbst zeigt.

        Grüße,

        Christian

        --
        Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                              -- Albert Einstein
        1. Hallo Christian,

          http://www.aperion.de/vinonet/test.htm [aus anderem Posting]

          Fehler gefunden!

          onClick="TNew(); return false;"

          Sonst wird der Link aktiviert, der nun mal auf die Seite selbst zeigt.

          Das war es! Ich schäme mich, mich _gedankenlos_ der Wunder der Wissenschaft und Technik bedient und nicht mehr davon erfasst zu haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.

          Nein. Denn wenn umgelenkt würde, dann wärst Du schon längst nicht mehr auf der Seite.

          Es leuchtet mir ein, daß keine Umlenkung stattfindet. Meine Frage zielte mehr in die Richtung, ob eine solches Vorgehen möglicherweise Seiteneffekte hat. Dahinter wiederum verbirgt sich die Frage, ob ich damit einen sinnvollen Ansatz zum Ausschleusen eines Seiteneinsteigers ohne gültige Session-ID getroffen habe - macht man das so? Gibt es einen Standard-Ansatz?

          Gruß

          Robert

          P.S.: Vielen Dank für die rührigen Bemühungen auch an Julian, Sven und Thomas!

          1. Hallo Robert,

            Das war es! Ich schäme mich, mich _gedankenlos_ der Wunder der Wissenschaft und Technik bedient und nicht mehr davon erfasst zu haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.

            Mein Zitat zielte eher auf die hier im Forum ab, die sofort Scripte und fertige Lösungen wollen, was bei Dir nicht der Fall ist. Dein Problem war zwar im Nachhinein betrachtet "simpel", aber auf dem Schlauch steht jeder mal...

            Meine Frage zielte mehr in die Richtung, ob eine solches Vorgehen möglicherweise Seiteneffekte hat.

            Warum? Wenn der Ausdruck bei der if-Anweisung wahr ist, dann wird umgeleitet, wenn er falsch ist, dann passiert gar nichts. Entweder/oder. Da kann es keine Seiteneffekte geben.

            Dahinter wiederum verbirgt sich die Frage, ob ich damit einen sinnvollen Ansatz zum Ausschleusen eines Seiteneinsteigers ohne gültige Session-ID getroffen habe - macht man das so?

            Was heißt "macht man das so"? Ich meine, Du *kannst* es so machen und es hat AFAIK auch keine Nachteile, es gibt aber auch andere Lösungen, die aber auch keine Vorteile Deiner Lösung gegenüber haben. Hier musst Du entscheiden, was für Dich und Dein Projekt am sinnvollsten ist.

            Gibt es einen Standard-Ansatz?

            Nicht, dass ich wüßte.

            Grüße,

            Christian

            --
            Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                                  -- Albert Einstein
            1. Hallo Christian,

              Mein Zitat zielte eher auf die hier im Forum ab, die sofort Scripte und fertige Lösungen wollen, was bei Dir nicht der Fall ist.

              das habe ich auch so gedeutet und ich fühle mich nicht zur Zielgruppe zugehörig. Meine Übertragung Deines Zitates besitzt keinen invektiven Charakter, ich sehe mich in diesem Fall als gedankenlos mit der Technik umgehend und so schien mir Einsteins Imperativ als ein passendes Vehikel für eine selbstironische Betrachtung. Möglicherweise neige ich gelegentlich zum Overstatement...

              Was heißt "macht man das so"? Ich meine, Du *kannst* es so machen und es hat AFAIK auch keine Nachteile, es gibt aber auch andere Lösungen, die aber auch keine Vorteile Deiner Lösung gegenüber haben. Hier musst Du entscheiden, was für Dich und Dein Projekt am sinnvollsten ist.

              Da ich mich erst seit ein paar Stunden mit Sessions beschäftige und das auch noch ganz unsystematisch per Trial & Error, bin ich bezüglich Richtigkeit und Verlässlichkeit meiner Ansätze unsicher. Ohne die nötige Zeit (und Lust) zur Recherche entsprechender Beispiele und Tutorials aus Skriptsammlungen fehlen mir Orientierungspunkte zur Einordnung meiner Lösung. Daher tragen Deine Aussagen zur Reduktion meiner Unsicherheit bei!

              Gruß

              Robert