2009-10-18 24 views
5

Ho un modulo che ho bisogno di pubblicare su più script. Come posso farlo nel modo più semplice?Come? Modulo Invia a più posizioni

So che potrebbe essere fatto con la classe Javascript, Curl o Snoopy, ma in realtà è il modo più semplice e migliore per farlo.

Uno degli script invia email ed è un file php, l'altro è ospitato altrove.

Necessità di raccogliere dati su entrambi gli script.

risposta

5

Il modo migliore per farlo sarebbe inviare prima il modulo al proprio script locale, quindi utilizzare CURL per POST i dati (filtrati) ricevuti nello script remoto. Quindi guarda la risposta.

Quindi inviare semplicemente l'e-mail ed elaborare la risposta dallo script remoto in quello locale.

+0

Sono d'accordo, manderei prima lo script locale, disinfettare/etc. quindi inviare a uno remoto. – Chris

1

Questo è ciò che ha funzionato per inviare il modulo a più host utilizzando una sola azione.

Ho inserito lo script di posta abituale quindi incluso il codice da inviare al secondo host utilizzando Curl.

Di seguito è riportato il codice effettivo che ha funzionato con alcune modifiche minori, come non dover utilizzare "estrai".

Trovato a (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

Il modo più semplice per farlo è quello di utilizzare jQuery per inviare un $ .ajax (o $ o $ .post .get) per ogni script, recuperando il risultato da ognuno di loro e facendo quello che vuoi con i risultati.

$(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); 
     }); 
    }); 
}); 

aggiornamento: Il comando serializzazione sono i dati che vengono inviati. Dai un'occhiata alla funzione jQuery serialize. E 'fondamentalmente solo prende i vari input, seleziona, textarea, caselle di controllo, ecc nel modulo, e li mette in una stringa come questa:

myNameInput = john & attivo = il & whateverSelected = 3

E' solo un stringa dei nomi degli elementi del modulo e dei loro valori. Questo è ciò che viene inviato allo script esterno tramite il comando ajax.

Una nota a margine, quando si fa serialize, assicurarsi che tutti gli elementi del modulo hanno un nome di attributo, non solo un id. Il serialize non presta attenzione ai loro ID . Solo il nome .

+0

uno script del post potrebbe essere una posizione https? Non vedo dove i tuoi valori di passaggio alla sceneggiatura. È il serialize? – Codex73

1

Ho dovuto solo farlo con ASP. Volevo pubblicare un modulo per uno script di elaborazione della posta elettronica su un dominio e registrare l'azione su un database MySQL su un dominio diverso con un solo clic del mouse. Questo potrebbe anche essere utile in qualsiasi numero di altre situazioni.

Non c'è modo di avere più AZIONI su una definizione di modulo HTML. Quindi, è sufficiente inviarlo in un'unica posizione, elaborare il modulo e quindi "ripubblicare" il modulo in un'altra posizione. Puoi farlo in una "catena" di script di qualsiasi lunghezza.

Per prima cosa aggiungi questo sottotitolo ASP al tuo script. Se stai usando PHP o qualche altra lingua puoi tradurre questo codice nella tua lingua e il concetto funzionerà.

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 

Poi, alla fine del processo, appena finito con una chiamata al sub in questo modo:

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

Se necessario, ripetere i processi di concatenamento su tutti i vostri script, e poi in alla fine probabilmente vorrai reindirizzare a una pagina del tuo dominio originale (da cui proviene il modulo) o fare qualcosa per mostrare un messaggio di successo ai tuoi utenti.