stefan d: Post Befehl für PHP

Für einen Versand wertet mein Script Forumulardaten aus und sollte sie dann, anstatt sie per E-Mail zu versenden, an ein anderes Script posten.
Mit Perl funktioniert das über
use HTTP::Request::Common qw(POST);

weis jemand wie das in PHP funktioniert?

  1. alle variablen, die von eiem formular versendet werden stecken in der globalen variable $_POST bzw $_GET je nach dem, welche methode dein form benutzt.

    du kannst dann mit zB. $_POST[var] auf die einzelnen variablen zugreifen.

    tipp:
    mit echo implode('<br>', $_POST)."<br>";
    kannst du dir ausgeben lassen welche variablen übergeben wurden.

    mfg
    phase

    Für einen Versand wertet mein Script Forumulardaten aus und sollte sie dann, anstatt sie per E-Mail zu versenden, an ein anderes Script posten.
    Mit Perl funktioniert das über
    use HTTP::Request::Common qw(POST);

    weis jemand wie das in PHP funktioniert?

    1. achso:

      mit
      header("Location: dein_script.php?post=$_POST");

      kannst du die daten an dein script "posten"

      in diesem beispiel musst du dann natürlich mit $post[var] auf deine variablen zugreifen.

      mfg
      phase

      alle variablen, die von eiem formular versendet werden stecken in der globalen variable $_POST bzw $_GET je nach dem, welche methode dein form benutzt.

      du kannst dann mit zB. $_POST[var] auf die einzelnen variablen zugreifen.

      tipp:
      mit echo implode('<br>', $_POST)."<br>";
      kannst du dir ausgeben lassen welche variablen übergeben wurden.

      mfg
      phase

      1. Ok, vielen Dank,
        ich werde das mal so versuchen.

        1. hallo noch mal,

          also so wie ich das geschrieben hab geht es leider nicht.

          du kannst ein array nicht an eine url anhängen.
          vorher musst du es in eine zeichenkette umwandeln.

          so müsste es gehen:

          $string = implode("-", $_POST);//alle mit POST übergebenen variablen in zeichenkette umwandeln.

          header("Location: auswerten.php?post=$string");//zeichenkette an script weiterleiten

          $post = explode("-",$_GET['post']);//zeichenkette in Array zerlegen

          echo $post[0]." ".$post[1]." ".$post[2];//Array ausgeben

          wenn es nicht ganz so viele formulardaten sind kann man es so machen, ansonsten hab ich noch nen link für dich:

          24.2. Wie kann ich einen HTTP POST-Request absenden?
          http://www.dclp-faq.de/q/q-code-post.html

          mfg
          phase

          1. und noch was:

            wenn du es so machst dann solltest du den string mir urlencode() umwandeln:

            $string = implode("-", $_POST);//alle mit POST übergebenen variablen in zeichenkette umwandeln.

            $string= urlencode($string);//Zeichenkette so um, dass sie in einer URL verwendet werden kann

            header("Location: auswerten.php?post=$string");//zeichenkette an script weiterleiten

            und dann wieder mit urldecode:
            $post = urldecode($_GET[post]);//Zeichenkette wieder entschlüsseln

            $post = explode("-",$_GET['post']);//zeichenkette in Array zerlegen

            echo $post[0]." ".$post[1]." ".$post[2];//Array ausgeben

            mfg
            phase

            1. $string = implode("-", $_POST);//alle mit POST übergebenen variablen in zeichenkette umwandeln.

              $string= urlencode($string);//Zeichenkette so um, dass sie in einer URL verwendet werden kann

              ok, diesen Befehl kannte ich bisher nicht, das könnte einiges Vereinfachen, danke

              1. eleganter ist das ganze natürlich wenn du sessions benutzt.

                das könnte dann so aussehen:

                formular:

                <body>
                <?php
                    @session_start();

                if (isset($_POST['submit']))
                        {
                $string = implode("-", $_POST);
                            $_SESSION['POST'] = $string;

                // HTTP-Redirect zu der Ausgabeseite
                            header("Location: http://" . $_SERVER['SERVER_NAME']
                                                       . "auswerten.php");
                            exit;
                        }
                ?>
                    <FORM action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
                     <!--
                            Hier ganz viele Radiobuttons, Checkboxen und Inputfelder
                        -->
                    <INPUT type="submit" name="submit">
                    </FORM>
                </form>
                </body>

                und das auswerte sript dann so:

                <?php
                    @session_start();
                $post = explode("-",$_SESSION['POST']);

                echo  implode("<br>", $post)."<br>";

                ?>

                mfg
                phase

          2. also so wie ich das geschrieben hab geht es leider nicht.

            das habe ich dann auch gemerkt und versucht die Felder einzeln zu übergeben. Viele waren es nicht, aber das Problem ist, dass zwischenräume enthalten sind. Hinzu kommt dass dann kein '&' oder '+' enthalten sein darf weil PHP diese auswertet.

            Ausserdem hatte ich Probleme mit den Zeilen umbrüchen

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

            das sieht interessant aus, ich werde diese Methode ausprobieren.

    2. Ich glaube du hast mich falsch verstanden, das auslesen der Daten ist nicht das Problem. Sie sollen dann aber an ein anderes Script weitergepostet werden. Und das weis ich nicht wie es funktioniert.

      Das Script soll einfach die Daten an ein anderes Script weiterposten, so eine Art Zwischenstufe zwischen dem Forumlar und dem Script das die Daten dann benötigt.

      alle variablen, die von eiem formular versendet werden stecken in der globalen variable $_POST bzw $_GET je nach dem, welche methode dein form benutzt.

      du kannst dann mit zB. $_POST[var] auf die einzelnen variablen zugreifen.

      tipp:
      mit echo implode('<br>', $_POST)."<br>";
      kannst du dir ausgeben lassen welche variablen übergeben wurden.

      mfg
      phase

  2. Hallo!

    Für einen Versand wertet mein Script Forumulardaten aus und sollte sie dann, anstatt sie per E-Mail zu versenden, an ein anderes Script posten.
    Mit Perl funktioniert das über
    use HTTP::Request::Common qw(POST);

    weis jemand wie das in PHP funktioniert?

    Da giht es mehrer Möglichkeiten, richtet sich auch danach wie Du den Request weiterleiten willst, ob GET oder POST.

    fsockopen(), urlencode() und urldecode() kennst Du ja bereits. Ich würde es entweder machen indem ich den gesamten $_POST-Array serializiere mit serialize() (http://php3.de/manual/de/function.serialize.php), also sowas der Art

    header("Location: http://www.server.tld/script.php?data=".urlencode(serialize($_POST)));

    und dann im endgültigen Script dann mit

    $myPOST = unserialize(urldecode($_GET["data"]));

    Wobei ich mir nicht sicher bin ob die Weitergabe von parametern mit dem Location-Header erlaubt ist, daher würde ich eher die fsockopen-Variante in Betracht ziehen, und hier einen kompletten POST oder GET Header abschicken.

    Unter http://php3.de/manual/de/function.fsockopen.php findest Du auch einige gute Beispiele(vor allem in den Kommentaren!)

    Also POST-Daten könntest Du auch wie oben den serializierten Array schicken, oder besser die einzelnen Parameter wieder mit reinschreiben, so dass man am Ende nicht wirklich merkt(bzw. nicht beachten muß!) das die Daten schon durch ein weiteres Script gelaufen sind, das würde ich dann in etwa so anhgehen:

    // den Post-Header wie in den Manuals erzeugen, und dann wie folgt den urspünglichen Dsaten-String erzeugen:

    foreach($_POST as $key=>$value) {
        $post_data .= urlencode($key)."=".urlencode($value)."&";
    }

    Und Suche mal im Archiv hier nach fsockopen und POST, da findest Du ne Menge zu dem Thema!

    Grüße
    Andreas