2009-10-18 8 views
5

Ich habe ein Formular, das ich an mehrere Skripts senden muss. Wie kann ich das am einfachsten machen?Wie geht es? Formular an mehrere Standorte senden

Ich weiß, dass es mit Javascript, Curl oder Snoopy Klasse gemacht werden könnte, aber das ist der einfachste und beste Weg, dies zu tun.

Eines der Skripts sendet E-Mails und es ist eine PHP-Datei, das andere wird an anderer Stelle gehostet.

Müssen Daten in beiden Skripts sammeln.

Antwort

5

Der beste Weg, dies zu tun, wäre, das Formular zunächst an Ihr lokales Skript zu senden und dann CURL zu verwenden, um die (gefilterten) Daten an das Remote-Skript zu senden. Dann pass auf die Antwort auf.

Dann senden Sie einfach die E-Mail und verarbeiten Sie die Antwort aus dem Remote-Skript in Ihrem lokalen.

+0

Ich stimme damit überein, ich würde zuerst zu lokalen Skript senden, sanitize/etc. dann sende zu einem entfernten. – Chris

1

Dies war, was endete, um Formular an mehrere Hosts mit einer Aktion zu senden.

Ich veröffentlichte üblichen Mail-Skript dann Code enthalten, um auf zweiten Host mit Curl zu buchen.

Unten ist der eigentliche Code, der mit einigen kleineren Optimierungen funktioniert hat, wie zum Beispiel "nicht extrahieren".

Gefunden bei (http://php.dzone.com/news/execute-http-post-using-php-cu):

//extract data from the post 
extract($_POST); 

//set POST variables 
$url = 'http://domain.com/get-post.php'; 
$fields = array(
         'lname'=>urlencode($last_name), 
         'fname'=>urlencode($first_name), 
         'title'=>urlencode($title), 
         'company'=>urlencode($institution), 
         'age'=>urlencode($age), 
         'email'=>urlencode($email), 
         'phone'=>urlencode($phone) 
       ); 

//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
rtrim($fields_string,'&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 
3

Der einfachste Weg, dies zu tun ist jQuery zu verwenden, um ein $ Schnipsel (oder $ .post oder $ .get) zu jedem Skript zu schicken, um das Ergebnis Abrufen von jedem von ihnen und tun, was Sie mit den Ergebnissen tun werden.

$(document).ready(function(){ 
    $('#mySubmitButton').click(function(){ 
     //Send data to the email script 
     $.post('send-email.php', $('form').serialize(), function(data, textStatus) { 
      //data is the result from the script 
      alert(data); 
     }); 

     //Send data to the other script 
     $.post('my-other-script.php', $('form').serialize(), function(data, textStatus) { 
      //data is the result from the script 
      alert(data); 
     }); 
    }); 
}); 

Update: Das Serialisieren Befehl die Daten, die gesendet wird. Werfen Sie einen Blick auf die jQuery-Serialisierungsfunktion. Es dauert im Grunde nur die verschiedenen Eingänge, wählt Textfelder, Kontrollkästchen, etc. in Ihrer Form und legt sie in einen String wie folgt aus:

myNameInput = john & aktiv = auf & whateverSelected = 3

Es ist nur ein Zeichenfolge Ihrer Formularelementnamen und ihrer Werte. Dies wird über das Ajax-Kommando an das externe Skript gesendet.

Seite beachten, wenn serialize tun, stellen Sie sicher, dass alle Ihre Formularelemente haben einen Namen Attribut, nicht nur eine id. Die Serialisierung beachtet ihre ID nicht. Nur ihre Name.

+0

könnte eines der Nachschlagewerke ein https-Standort sein? Ich sehe nicht, wo deine Werte an das Skript übergeben werden. Ist es die Serialisierung? – Codex73

1

Ich musste dies nur mit ASP tun. Ich wollte ein Formular an ein E-Mail-Verarbeitungs- Skript in einer Domäne senden und die Aktion in einer MySQL-Datenbank in einer anderen Domäne mit einem Klick aufzeichnen. Dies könnte auch in vielen anderen Situationen nützlich sein.

Es gibt keine Möglichkeit, mehrere ACTIONS in einer HTML-Formulardefinition zu haben. Also, senden Sie es einfach an einen Ort, bearbeiten Sie das Formular und dann "repost" das Formular an einen anderen Ort. Sie können dies in einer Skript- "Kette" beliebiger Länge tun.

Fügen Sie zuerst diese ASP-Subroutine zu Ihrem Skript hinzu. Wenn Sie PHP oder eine andere Sprache verwenden, können Sie diesen Code einfach in Ihre eigene Sprache übersetzen und das Konzept wird funktionieren.

sub RePost(Destination) 
    RePostString = "<HTML><BODY>" & vbCRLF 
    if((Trim(Destination) <> "") and (Request.ServerVariables("REQUEST_METHOD") = "POST")) then 
     RePostString = RePostString & "<FORM METHOD=POST NAME=""RePostForm"" ACTION=""" & Destination & """>" & vbCRLF 
     for each Item in request.form 
      if(not len(item) <= 0) Then 
       RePostString = RePostString & "<INPUT TYPE=HIDDEN NAME=""" & item & """ VALUE=""" & Request.form(item) & """>" & vbCRLF 
      end if 
     next 
     RePostString = RePostString & "</FORM>" & vbCRLF & _ 
         "<script language=""JavaScript"" type=""text/javascript""> window.onLoad = document.RePostForm.submit(); </script>" 
    else 
     RePostString = "<CENTER><H1><BR><BR>Sorry! Internal Scripting Error Encountered!</H1></CENTER>" & vbCRLF 
    end if 
    RePostString = RePostString & "</BODY></HTML>" 
    Response.Write(RePostString) 
end sub 

Dann am Ende des Prozesses, nur mit einem Aufruf an die Unter wie folgt beenden:

RePost "http://www.SomeOtherDomain.com/SomeOtherScript.asp" 

Falls erforderlich, wiederholen Sie die Verkettungs Prozesse auf allen Skripten und dann in der Beenden Sie wahrscheinlich eine Weiterleitung zu einer Seite in Ihrer ursprünglichen Domäne (von der das Formular stammt), oder führen Sie eine Nachricht aus, um Ihren Benutzern eine Erfolgsmeldung anzuzeigen.

Verwandte Themen