Formulardaten an externen Server senden

con-f-use

Erfahrenes Mitglied
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
 
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:
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).
 
Zuletzt bearbeitet:
Die Zeile
PHP:
$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:
PHP:
define('others','a');
$a='Coke';
$b='Pepsi';
echo ${others};
Ausgabe:
PHP:
define('others','b');
$a='Coke';
$b='Pepsi';
echo ${others};
Ausgabe:
PHP:
$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.
 
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:
<?php

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

?>
 
Gumbo hat gesagt.:
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:
<?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.
 
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?
 
Zurück