Stefan Lippmann: Mit Header("Location: ") Daten per Post übermitteln

Hi,

ich denke der Topic meines Thread sagt schon alles. Ist es möglich die Daten mit post zu übermitteln so das sie nicht sichtbar sind in dere Adresszeile.

Den normalen Header würde ich so schreiben:
  Header("Location: seite.php?variable=$Inhalt");

Bitte um Hilfe

CU Stefan

  1. Huhu Stefan

    das könnte Dir evtl. weiterhelfen

    http://www.php-faq.de/q-code-post.html

    Viele Grüße

    lulu

  2. Hi lulu,

    der link hilft mir´nicht viel. trotzdem danke.

    Brauche also immer noch hilfe?!^

    CU Stefan

    1. Hallo!

      der link hilft mir´nicht viel. trotzdem danke.

      Das ist aber die einzige Möglichkeit mit PHP per POST Daten zu übertragen!

      Brauche also immer noch hilfe?!^

      http://www.php.net/manual/de/function.fsockopen.php
      http://www.php.net/manual/de/function.fputs.php

      Da stehen noch einige Beispiele, mehr kann icch Dir auch nicht sagen. Jedenfalls geht es mit header() nicht. Du mußt Wie in den Beispielen beschrieben eine Socketverbindung aufbauen. Du kannst Den Beispiel-Code meist 1:1 kopieren und ausprobieren und dann für Deine Zwecke verändern.

      Grüße
      Andreas

  3. Hi,

    Ist es möglich die Daten mit post zu übermitteln so das sie nicht sichtbar sind in dere Adresszeile.

    nein.

    Header("Location: seite.php?variable=$Inhalt");

    Btw: Es existiert kein Weg, über eine URL (oder auch POST-Daten) Variablen zu übermitteln. Es handelt sich hier um Parameter.

    Cheatah

    1. Hallo!

      Header("Location: seite.php?variable=$Inhalt");

      Btw: Es existiert kein Weg, über eine URL (oder auch POST-Daten) Variablen zu übermitteln. Es handelt sich hier um Parameter.

      Die Variablen werden _als_ Paramter übermittelt!

      Grüße
      Andreas

      1. Hi,

        Btw: Es existiert kein Weg, über eine URL (oder auch POST-Daten) Variablen zu übermitteln. Es handelt sich hier um Parameter.

        Die Variablen werden _als_ Paramter übermittelt!

        falsch. Es werden Parameter übermittelt - und nichts sonst. Dass PHP hieraus automagisch Variablen macht, ist ein Sicherheitsrisiko[1] und sollte deaktiviert werden.

        Cheatah

        [1] Das wurde hier bereits multipel diskursiert.

  4. Ist es möglich die Daten mit post zu übermitteln so das sie nicht sichtbar sind in dere Adresszeile.

    Den normalen Header würde ich so schreiben:
      Header("Location: seite.php?variable=$Inhalt");

    Du bist da ein wenig auf dem falschen Dampfer. Was Du mit Location: machst, ist dem Browser auf _seine_ Anfrage an _Dich_ bzw. Dein Skript zu antworten, er möge doch bitte lieber die genannte Adresse benutzen.
    Im Kern ist das also eigentlich keine Datenübermittlungseinrichtung, sondern eine Weiterleitung oder Vermittlung. header() ist nur für die Antwortschiene Webserver -> Webbrowser gedacht.

    POST wird hingegen in einer ganz anderen Ecke genutzt. POST ist die Anfrage bzw. der Befehl, den der Webbrowser an einen Server richtet. POST ist gewissermaßen der Bruder von GET. GET wird ebenfalls als Befehl an einen Webserver gesendet, und zwar um Seiten abzuholen ohne Daten zu übermitteln.
    POST, GET und Co. gehen also in die Gegenrichtung, Browser -> Server.

    Wenn Du per POST Daten übermitteln willst, dann musst Du dementsprechend schon selber in Deinem Skript eine Anfrage an den betreffenden Zielserver machen; Dein Skript muß sich quasi in die Rolle eines Webbrowsers begeben. Wie das geht, wird auf der von Lulu angegebenen Seite demonstriert. Schau Dir das Skript nochmal an:

    $fp = fsockopen($host,80);

    Netzwerkverbindung zu $host öffnen, Port 80 (der Port, an dem Webserver normalerweise auf Anfragen warten).

    fputs($fp, "POST $path HTTP/1.1\n");

    Hier gibt das Skript den Befehl POST an den Webserver.

    fputs($fp, "$data_to_send\n");

    Hier werden die Daten an den Webserver gesendet.

    while(!feof($fp)) {
          $res .= fgets($fp, 128);
      }

    Und hier wird schließlich die Antwort des Webservers empfangen. Das wäre auch der Zeitpunkt, an dem auf Seite des anderen Webservers (also _nicht_ in _diesem_ Skript) zum Beispiel der header()-Befehl benutzt werden könnte, um diesem Skript zu antworten.

    Kurzum:
    Es ist nicht möglich, daß Dein Skript einem Webbrowser antwortet, "Sende diese Daten mittels POST an Server Y". Es kann nur mittels der von Dir oben schon genutzten Weiterleitung antworten "Versuche die Anfrage, die Du gerade an mich gestellt hast, statt an mich an Server Y zu stellen".

    Aber wenn Du mal genauer schilderst, was Du mit der Aktion vorhast, gibt es vielleicht eine andere Lösung.

    Gruß,
      soenk.e