ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
668
668
EMPFEHLEN
-
26.03.06 18:08 #1
- 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-useWä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!
-
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
Relevant ist denke ich mal alles, was vor der for-Schleife steht.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;
}
?>
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.
-
Die Zeile
gefaellt mir nicht so ganz.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";
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:
Ausgabe:Code php:1 2 3 4
define('others','a'); $a='Coke'; $b='Pepsi'; echo ${others};
CokeAusgabe:Code php:1 2 3 4
define('others','b'); $a='Coke'; $b='Pepsi'; echo ${others};
PepsiKeine Ausgabe.Code php:1 2 3
$a='Coke'; $b='Pepsi'; echo ${others};
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 von Friedrich Nietzsche
-
Ich denke, Fanste wollte eigentlich {$others} schreiben.
Markus Wulftange
-
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 von Friedrich Nietzsche
-
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
-
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.
-
Schon richtig, aber der Sinn der Sache wie es eben oben gezeigt wird bleibt mir schlicht und ergreifend verborgen.
Zitat von Gumbo
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 von Friedrich Nietzsche
-
27.03.06 15:51 #9
- 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!
-
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 von Friedrich Nietzsche
-
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($fp, 128);
}
fclose($fp);
return $response;
}
Markus Wulftange
-
27.03.06 16:36 #12
- 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:der Header sähe dann so ausPHP-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);
}
Ich hoffe ich falle auch noch nicht auf die Nerven damit, aber irgentwie verzeifle ich so langsam daran.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
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!
-
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:
Also im Grunde wie wenn man sie per GET am URL anhaengt.Code :1
param1name=param1value¶m2name=param2value
Der aus meiner Klasse relevante Code ist
$contentlength entspricht dabei strlen($parameters)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);
$uri ist die aufzurufenden Datei
$host ist der lokale Hostname
$cookiestring kannst Du rausschmeissen, ausser Du willst Cookies uebergebenPHP 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 von Friedrich Nietzsche
-
27.03.06 16:48 #14
- 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:
"$headerName" müsste hier "$fieldName" heißen.PHP-Code:foreach( $headerFields as $fieldName => $fieldValue ) {
$request .= $headerName.': '.$fieldValue . "\r\n";
}
Aber selbst dann kommt der mir Header etwas komisch vorPOST /formulare/forml.php HTTP/1.1
Host: www.beispie.de
Content-Type: application/x-www-form-urlencoded
Connection: close
var1=blubb&var2=bla&var3=muhWä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!
-
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
$query ist hierbei der erzeugte String aus den POST Daten. Das muss noch vor das "Connection: close"Code :1
Content-length: ".strlen($query)."\r\n
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
-
Formulardaten bei onchange an PHP senden
Von Frank73 im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 10.12.10, 08:15 -
Formulardaten via Email senden
Von fruitcake im Forum PHPAntworten: 4Letzter Beitrag: 14.03.05, 21:53 -
Formulardaten automatisch senden
Von budking im Forum PHPAntworten: 3Letzter Beitrag: 22.07.04, 09:55 -
Probs mit dem Senden von Formulardaten
Von avaj im Forum PHPAntworten: 3Letzter Beitrag: 06.08.03, 17:52 -
Formulardaten an mehrere Leute senden
Von Thanatos im Forum PHPAntworten: 4Letzter Beitrag: 18.03.02, 21:30






Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren