tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
668
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von con-f-use
    con-f-use con-f-use ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Ort
    München / Innsbruck
    Beiträge
    2.263
    Hallo zusammen,

    Szenario: User machen Einträge in ein Formular auf meiner Seite. Die gleichen Einträge sollen jetzt auch auf einem anderen Server mit fast identischem Formular gemacht werden (allerdings noch um ein bis zwei Einträge aus meiner Datenbank erweitert).

    Problem: Wie sende ich dem anderen Server diese Daten so, als wäre das Formular auf dem anderen Server ausgefüllt worden? Wenn es ein GET-Formular wäre, hätte ich keine Probleme, ist aber POST.

    Hoffe ihr könnt mir da Tipps und vielleicht ein Beispiel geben. Ich schätze mal es läuft auf header und fsockopen() heraus, aber mit beidem habe ich mich leider bisher sehr wenig beschäftigt. Habe auch schon Gegoogle, bin aber nicht sehr weit gekommen und das php-Manual hat auch wenig geholfen.

    Dürfte aber trotzdem doch nicht allzu schwer sein, wenn man weiß wie's geht.

    Schonmal besten Dank im Voraus,
    G-r-uß von
    - con-f-use
     
    Wäre der Satz "Ich möchte auf meinem Fisch-und-Chips-Schild einen Bindestrich zwischen die Wörter Fisch und und und und und Chips machen" nicht deutlicher, wenn Anführungszeichen vor Fisch und zwischen Fisch und und und und und und und und und und und und und und und und und und und und und Chips und auch nach Chips wären?

    | Meine Homepage: Forschung, unethische | Meine Seite mit viel verlangten Javascrits |

    -----------

    Zufriedenstellende Beiträge bitte als erledigt markieren!


  2. #2
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Hi,

    Ja es ist etwas mit fsockopen(). Weis jetzt auch nicht genau, wie das geht. Aber ich habe folgenden Code auf php.net gefunden. Vielleichjt hilft er dir ja
    PHP-Code:
    The documentation example is of a GET request. I have found POST documentation to be lacking, and here's a function to easily simulate submitting form data:

    <?php
    # $host includes host and path and filename
       # ex: "myserver.com/this/is/path/to/file.php"
    # $query is the POST query data
       # ex: "a=thisstring&number=46&string=thatstring
    # $others is any extra headers you want to send
       # ex: "Accept-Encoding: compress, gzip\r\n"
    function post($host,$query,$others=''){
       
    $path=explode('/',$host);
       
    $host=$path[0];
       unset(
    $path[0]);
       
    $path='/'.(implode('/',$path));
       
    $post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n$query";
       
    $h=fsockopen($host,80);
       
    fwrite($h,$post);
       for(
    $a=0,$r='';!$a;){
           
    $b=fread($h,8192);
           
    $r.=$b;
           
    $a=(($b=='')?1:0);
       }
       
    fclose($h);
       return 
    $r;
    }
    ?>
    Relevant ist denke ich mal alles, was vor der for-Schleife steht.

    Du musst hier die Daten, die du per POST von deinem Formular bekommst zu einem GET Query zusammenschreiben. (s. Kommentar zu $query).
    Geändert von fanste (26.03.06 um 18:50 Uhr)
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  3. #3
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Die Zeile
    PHP-Code:
    $post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n$query"
    gefaellt mir nicht so ganz.
    Der Grund ist ganz einfach folgender Teil: ${others}
    Dort wird also eine Variable angesprochen deren Name in der Konstante others definiert ist.
    Dummerweise wird in dem Script keine Konstante others deklariert sodass ${others} immer nichts entspricht.
    Mal ein Beispiel:
    Code php:
    1
    2
    3
    4
    
    define('others','a');
    $a='Coke';
    $b='Pepsi';
    echo ${others};
    Ausgabe:
    Coke
    Code php:
    1
    2
    3
    4
    
    define('others','b');
    $a='Coke';
    $b='Pepsi';
    echo ${others};
    Ausgabe:
    Pepsi
    Code php:
    1
    2
    3
    
    $a='Coke';
    $b='Pepsi';
    echo ${others};
    Keine Ausgabe.
    Bei vollem Error-Reporting bekommt man eine Info dass die Konstante others nicht deklariert ist.

    Nachtrag: Oben genanntes Beispiel funktion wohl doch, dank der unglaublichen Kulanz die PHP in Sachen undeklarierte Konstanten zeigt. ${others} wird, da die Konstante others nicht existiert als ${'others'} behandelt, was wiederum $others entspricht.
    Ich mag den Code aber immer noch nicht da ich mich frag wie das ueberhaupt auf diese Weise entstehen konnte.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Ich denke, Fanste wollte eigentlich {$others} schreiben.
     
    Markus Wulftange

  5. #5
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Aber auch das wuerde nicht wirklich viel Sinn machen.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Die Schreibweise der eingebetteten Variablen finde ich zwar auch nicht gerade empfehlenswert, doch die Syntax {$foobar} hat in einem gewissen Sinne schon seine Berechtigung:
    PHP-Code:
    <?php

        $foo 
    'foo';
        
    $foobar 'xxx';
        echo 
    "{$foo}bar ${foo}bar $foobar";

    ?>
     
    Markus Wulftange

  7. #7
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Wie gesagt, es ist nicht mein Code . Habe ihn von http://de.php.net/fsockopen (irgendwo in der Mitte der Seite) übernommen
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  8. #8
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Zitat Zitat von Gumbo
    Die Schreibweise der eingebetteten Variablen finde ich zwar auch nicht gerade empfehlenswert, doch die Syntax {$foobar} hat in einem gewissen Sinne schon seine Berechtigung:
    PHP-Code:
    <?php

        $foo 
    'foo';
        
    $foobar 'xxx';
        echo 
    "{$foo}bar ${foo}bar $foobar";

    ?>
    Schon richtig, aber der Sinn der Sache wie es eben oben gezeigt wird bleibt mir schlicht und ergreifend verborgen.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  9. #9
    Avatar von con-f-use
    con-f-use con-f-use ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Ort
    München / Innsbruck
    Beiträge
    2.263
    Wie auch immer, das Script funktioniert leider nicht so richtig und es ist bei sowas leider sehr schwer nachzuvollziehen warum. Hat vielleicht jemand ein Funktionierendes Beispiel?
     
    Wäre der Satz "Ich möchte auf meinem Fisch-und-Chips-Schild einen Bindestrich zwischen die Wörter Fisch und und und und und Chips machen" nicht deutlicher, wenn Anführungszeichen vor Fisch und zwischen Fisch und und und und und und und und und und und und und und und und und und und und und Chips und auch nach Chips wären?

    | Meine Homepage: Forschung, unethische | Meine Seite mit viel verlangten Javascrits |

    -----------

    Zufriedenstellende Beiträge bitte als erledigt markieren!


  10. #10
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Rein zufaellig hab ich da eine "kleine" Klasse zu anzubieten.
    Beispiele zur Nutzung finden sich im letzten Post.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  11. #11
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Probier mal Folgendes:
    PHP-Code:
    function post($url$query)
    {
        
    $parts parse_url($url);
        
    $requestURL $parts['path'];
        if( !empty(
    $parts['query']) ) {
            
    $requestURL .= '?'.$parts['query'];
        }
        
    $request 'POST '.$requestURL.' HTTP/1.1' "\r\n";
        
    $headerFields = array(
            
    'Host'         => $parts['host'],
            
    'Content-Type' => 'application/x-www-form-urlencoded',
            
    'Connection'   => 'close'
        
    );
        foreach( 
    $headerFields as $fieldName => $fieldValue ) {
            
    $request .= $fieldName.': '.$fieldValue "\r\n";
        }
        
    $request .= "\r\n" $query;

        
    $fp fsockopen($host, empty($parts['port']) ? $parts['port'] : 80);
        
    fwrite($fp$request);
        while( !
    feof($fp) ) {
            
    $response .= fgets($fp128);
        }
        
    fclose($fp);
        return 
    $response;

     
    Markus Wulftange

  12. #12
    Avatar von con-f-use
    con-f-use con-f-use ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Ort
    München / Innsbruck
    Beiträge
    2.263
    Okay, danke schön, aber das ist ein bisschen zuviel des Guten, außerdem will ich ja selber verstehen, wie es geht ohne mich durch meterlange Scripts zu wälzen.

    Ich hab jetzt mal selber ein Script auf der Basis meines zugegebenermaßen geringen verständisses von headern geschrieben, dass aber leider nicht funktioniert. Vielleicht kann mir jemand sagen, was daran falsch ist:
    PHP-Code:
    $arr['var1'] = 'blubb';
    $arr['var2'] = 'bla';
    $arr['var3'] = 'flo';
    post('beispiel.de/formulare/form1.php?n=4',$arr);

    function 
    post($host,$data){
        
    $path=explode('/',$host);
        
    $host=$path[0];
        unset(
    $path[0]);
        
    $path='/'.(implode('/',$path)); 
        
        
    #Boundary ermitteln
            
    srand((double)microtime()*1000000);
            
    $boundary "---------------------".substr(md5(rand(0,32000)),0,10);
        
        
    #Post-Vars formatieren
            
    foreach($data as $key => $val){
                
    $dat .=
                    
    '--'.$boundary."\r\n".
                    
    'Content-Disposition: form-data; name="'.$key."\"\r\n".
                    
    "\r\n".$val."\r\n".
                    
    '--'.$boundary."\r\n";
            }
        
        
    #Header schreiben
            
    $header 
                
    'POST '.$path." HTTP/1.0\r\n".
                
    'Host: '.$host."\r\n".
                
    "Content-type: multipart/form-data, boundary=$boundary\r\n".
                
    'Content-length: '.strlen($dat)."\r\n\r\n";

        
    $h fsockopen($host,80);
        
    fwrite($h,$header.$dat);
        
    fclose($h);

    der Header sähe dann so aus
    POST /formulare/form1.php?n=4 HTTP/1.0
    Host: beispiel.de
    Content-type: multipart/form-data, boundary=---------------------e58cc5ca94
    Content-length: 368

    -----------------------e58cc5ca94
    Content-Disposition: form-data; name="var1"

    blubb
    -----------------------e58cc5ca94
    -----------------------e58cc5ca94
    Content-Disposition: form-data; name="var2"

    bla
    -----------------------e58cc5ca94
    -----------------------e58cc5ca94
    Content-Disposition: form-data; name="var3"

    flo
    -----------------------e58cc5ca94
    Ich hoffe ich falle auch noch nicht auf die Nerven damit, aber irgentwie verzeifle ich so langsam daran.

    P.S.
    Habe den letzten Post von Gumbu übersehen. Werde das mal versuchen. Danke!
     
    Wäre der Satz "Ich möchte auf meinem Fisch-und-Chips-Schild einen Bindestrich zwischen die Wörter Fisch und und und und und Chips machen" nicht deutlicher, wenn Anführungszeichen vor Fisch und zwischen Fisch und und und und und und und und und und und und und und und und und und und und und Chips und auch nach Chips wären?

    | Meine Homepage: Forschung, unethische | Meine Seite mit viel verlangten Javascrits |

    -----------

    Zufriedenstellende Beiträge bitte als erledigt markieren!


  13. #13
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    An die letzte Boundary wird noch -- angehaengt, um zu kennzeichnen, dass nun Schluss ist.
    Aber die Boundary benoetigst Du eh nur wenn Du mit Dateien arbeiten willst.
    Ansonsten werden die Parameter einfach im folgenden Format angehaengt:
    Code :
    1
    
    param1name=param1value&param2name=param2value
    Also im Grunde wie wenn man sie per GET am URL anhaengt.
    Der aus meiner Klasse relevante Code ist
    PHP-Code:
    fwrite($connection,"POST ".$uri." HTTP/1.1\r\nHost: ".$host."\r\n".$cookiestring."Connection: close\r\n");
    fwrite($connection,"Content-Type: application/x-www-form-urlencoded\r\nContent-Length: ".$contentlength."\r\n\r\n".$parameters); 
    $contentlength entspricht dabei strlen($parameters)
    $uri ist die aufzurufenden Datei
    $host ist der lokale Hostname
    $cookiestring kannst Du rausschmeissen, ausser Du willst Cookies uebergeben
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  14. #14
    Avatar von con-f-use
    con-f-use con-f-use ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Ort
    München / Innsbruck
    Beiträge
    2.263
    Also Gumbo, bei deinem Script fällt mir als erstes auf, dass hier was nicht stimmt:
    PHP-Code:
    foreach( $headerFields as $fieldName => $fieldValue ) {
            
    $request .= $headerName.': '.$fieldValue "\r\n";
        } 
    "$headerName" müsste hier "$fieldName" heißen.

    Aber selbst dann kommt der mir Header etwas komisch vor
    POST /formulare/forml.php HTTP/1.1
    Host: www.beispie.de
    Content-Type: application/x-www-form-urlencoded
    Connection: close

    var1=blubb&var2=bla&var3=muh
     
    Wäre der Satz "Ich möchte auf meinem Fisch-und-Chips-Schild einen Bindestrich zwischen die Wörter Fisch und und und und und Chips machen" nicht deutlicher, wenn Anführungszeichen vor Fisch und zwischen Fisch und und und und und und und und und und und und und und und und und und und und und Chips und auch nach Chips wären?

    | Meine Homepage: Forschung, unethische | Meine Seite mit viel verlangten Javascrits |

    -----------

    Zufriedenstellende Beiträge bitte als erledigt markieren!


  15. #15
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Wiso, der stimmt doch. Sieht in meinen Augen zumindest richtig aus. Wenn es nicht klappt, muss evt noch die Länge der zu sendenden Daten dazu
    Code :
    1
    
    Content-length: ".strlen($query)."\r\n
    $query ist hierbei der erzeugte String aus den POST Daten. Das muss noch vor das "Connection: close"
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

Ähnliche Themen

  1. Formulardaten bei onchange an PHP senden
    Von Frank73 im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 10.12.10, 08:15
  2. Formulardaten via Email senden
    Von fruitcake im Forum PHP
    Antworten: 4
    Letzter Beitrag: 14.03.05, 21:53
  3. Formulardaten automatisch senden
    Von budking im Forum PHP
    Antworten: 3
    Letzter Beitrag: 22.07.04, 09:55
  4. Antworten: 3
    Letzter Beitrag: 06.08.03, 17:52
  5. Formulardaten an mehrere Leute senden
    Von Thanatos im Forum PHP
    Antworten: 4
    Letzter Beitrag: 18.03.02, 21:30