Formulardaten per php an externe URL weitersenden

bluewaterpick

Mitglied
Hallo zusammen

Stellt euch Folgendes vor:
Ich hab ein ganz normales Formular mit folgendem form-Tag
Code:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

Nun, das ist ja nix besonderes. Mein Problem ist, dass ich die Daten in meinem php-File verarbeiten möchte (deshalb ja die obige action) und dann als POST-Variablen an eine externe URL weiterschicken möchte. Weiss jemand, wie ich diese Weiterleitung bewerkstelligen kann?

Konkret geht es darum, dass ich eine Bestellung entgegennehme, die Bestelldaten in eine Textdatei abspeichere und anschliessend an ein Zahlungsunternehmen (PayPal) oder ähnliches weiterschicke.

Vielen Dank für eure Hilfe
*bluewaterpick
 
Hallo zusammen

So richtig gelöst hab ich mein Problem noch nicht. fsockopen habe ich ausprobiert, aber irgendwie funktioniert das mit Paypal nicht:
Code:
$connection=fsockopen("https://www.paypal.com/cgi-bin/webscr", 80, &$err_num, &$err_msg, 3);
Ich habs auch mit ssl:// statt https:// versucht.

Vorübergehend hab ich nun eine Lösung mit einem versteckten Formular gebastelt, welches per Javascript abgeschickt wird, sobald die Daten intern verwertet sind.

Bin froh um weitere fsockopen-Tipps
 
Nun hab ich folgendes ausprobiert:

$connection=fsockopen("https://www.paypal.com/cgi-bin/webscr", 443, &$err_num, &$err_msg, 30);

und

$connection=fsockopen("ssl://www.paypal.com/cgi-bin/webscr", 443, &$err_num, &$err_msg, 30);

und

$connection=fsockopen("www.paypal.com/cgi-bin/webscr", 443, &$err_num, &$err_msg, 30);

und die Fehlermeldung lautet dann immer: php_network_getaddresses: getaddrinfo failed: Name or service not known
:confused:
 
Der erste Parameter fuer fsockopen() ist nur der Hostname.
Kein Protokoll, und keine Pfade.

Das Problem ist, dass Du mit HTTPS arbeiten willst. Dafuer willst Du wohl auch mit den OpenSSL-Funktionen von PHP arbeiten muessen.
Normales HTTP ist kein Problem, jedoch laeuft ja HTTPS SSL-verschluesselt ab. Du musst also erstmal irgendwie das Zertifikat vom Server erfragen, und da faengt's dann schon an.
Man kann ja HTTPS nicht einfach mit Ethereal mitloggen und dann gucken was abgeht.

Nachtrag:
Okay, ich hab grad mal was rumgeguckt, und es gibt nun im Grunde 3 Moeglichkeiten:
  1. Du kannst die CURL-Funktionen nutzen.
    Das duerfte wohl das einfachste sein.
  2. Du kannst die OpenSSL-Funktionen nutzen.
    Damit duerftest Du auch zum Ziel kommen.
    Folgende Dokumente duerften da fuer Dich interessant sein:
    RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
    RFC 2818 - HTTP Over TLS
    RFC 2246 - The TLS Protocol
  3. Du hast ein Problem.

So, ich hab mir grad mal OpenSSL in mein PHP gebacken und kann nun per HTTPS Daten abholen.
Das ist soweit kein grosses Problem.
Bei fsockopen() wird dann nur ssl:// vor den Hostnamen gesetzt und schon geht es.

Das Problem bei der Sache ist nur diese unschoene Warnung:
Warning: fread() [function.fread]: SSL: fatal protocol error in /usr/local/apache/htdocs/httpconnection.class.php on line 111

Ich hab vorhin mal etwas im Internet rumgeguckt und es scheint irgendwie ein Problem von PHP selbst zu sein, und nicht vom Script.
Man koennte daher mit einem @ vor fread() die Warnung unterdruecken.
Nicht ganz fein, aber was will man machen wenn PHP da ein Problem hat?
Ansonsten macht das Script aber was es soll. Ueber HTTPS die Daten abholen.

Dieses Problem besteht auch in den aktuellsten Versionen von PHP, also zur Zeit 4.4.0 und 5.0.5.
Mit PHP 4.4.0 konnte ich aber garnicht mit
PHP:
fsockopen("ssl://localhost",10000);
verbinden.

Der Grund duerfte wohl hier liegen:
phpinfo() PHP5 hat gesagt.:
Registered PHP Streams php, file, http, ftp, compress.bzip2, compress.zlib, https, ftps, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
phpinfo() PHP4 hat gesagt.:
Registered PHP Streams php, http, ftp, compress.bzip2, compress.zlib, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp

Denn prinzipiell ist OpenSSL in beiden Version vorhanden.
phpinfo() hat gesagt.:
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.7e 25 Oct 2004

CURL hab ich jetzt nicht getestet. Ich weiss nicht ob es dort evtl. auch zu diesem Fehler kommt und wie es da unter PHP4 aussieht.

Aber fuer Variante 2 (OpenSSL) gilt, dass Du wohl PHP5 mit OpenSSL-Support benoetigst und die Warnung von fread() unterdruecken musst.

Nachtrag 2:
Dennis Wronka hat gesagt.:
Ich hab vorhin mal etwas im Internet rumgeguckt und es scheint irgendwie ein Problem von PHP selbst zu sein, und nicht vom Script.
Das scheint wohl nur zum Teil zu stimmen.
Produziert wird der Fehler durch Webserver welche die Uebertragung nicht so ganz richtig hinbekommen. PHP scheint nur nicht ganz in der Lage zu sein dieses Problem zu handhaben.
Mir ist dieses Problem bei Webmin begegnet. Die Infos welche ich zum Thema im Internet gefunden hab bezogen sich auf IIS.

Aber weiterhin stimmt, dass es nicht am Script liegt. Sondern eher an nicht richtigem Zusammenspiel zwischen Webserver und PHP.
 
Zurück