2009-10-18 12 views
5

Tengo un formulario que debo ENVIAR a varias secuencias de comandos. ¿Cómo puedo hacer esto de la manera más simple?¿Cómo? Publicación de formulario en varias ubicaciones

Sé que se podría hacer con Javascript, Curl o clase Snoopy, pero realmente cuál es la forma más simple y mejor para hacer esto.

Uno de los scripts envía un correo electrónico y es un archivo php, el otro está alojado en otro lugar.

Necesita recopilar datos en ambos scripts.

Respuesta

5

La mejor manera de hacerlo sería enviar primero el formulario a su secuencia de comandos local, luego usar CURL para PUBLICAR los datos (filtrados) que se recibieron en la secuencia de comandos remota. Luego solo observa la respuesta.

Luego, simplemente envíe el correo electrónico y procese la respuesta del script remoto en su directorio local.

+0

Estoy de acuerdo con esto, enviaría primero a la secuencia de comandos local, desinfectar/etc. luego envíe a una remota. – Chris

1

Esto es lo que terminó trabajando para enviar formulario a múltiples hosts con una sola acción.

Publiqué el script de correo habitual y luego incluí el código para publicarlo en el segundo host usando Curl.

A continuación se muestra el código real que funcionaba con algunos ajustes menores, como no tener que usar 'extraer'.

encontrado al (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

La forma más sencilla de hacerlo es utilizar jQuery para enviar un .ajax $ (o $ .post o $ .get) para cada secuencia de comandos, recuperando el resultado de cada uno de ellos y haciendo lo que quieras con los resultados.

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

actualización: El comando es serializar los datos que se están enviando. Eche un vistazo a la función de serialización jQuery. Es, básicamente, sólo toma los diversos insumos, selecciona, áreas de texto, casillas de verificación, etc. en su forma, y ​​los pone en una cadena como esta:

myNameInput = John & activa = en & whateverSelected = 3

Es sólo una cadena de los nombres de sus elementos de formulario y sus valores. Eso es lo que se envía a la secuencia de comandos externa a través del comando ajax.

Una nota al margen, al hacer serializar, asegúrese de que todos los elementos de formulario tienen un nombre de atributo, no sólo un Identificación. El serialize no presta atención a su id. Solo su nombre .

+0

¿podría uno de los guiones publicar ser una ubicación https? No veo a dónde le pasan los valores al guión. ¿Es la serialización? – Codex73

1

Solo tuve que hacer esto con ASP. Quería publicar un formulario en un script de procesamiento de correo electrónico en un dominio y registrar la acción en una base de datos MySQL en un dominio diferente con un solo clic. Esto también podría ser útil en muchas otras situaciones.

No hay forma de tener múltiples ACCIONES en una definición de formulario HTML. Entonces, simplemente envíelo a una ubicación, procese el formulario y luego "vuelva a publicar" el formulario en otra ubicación. Puedes hacer esto en una "cadena" de scripts de cualquier longitud.

Primero agregue este ASP sub rountine a su secuencia de comandos. Si está utilizando PHP o algún otro idioma, puede traducir este código a su propio idioma y el concepto funcionará.

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 

Luego, al final de su proceso, simplemente terminar con una llamada a la sub así:

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

Si es necesario, repetir los procesos de encadenamiento en todas las secuencias de comandos, y luego en el Es probable que desee redireccionar a una página en su dominio original (de donde vino el formulario) o hacer algo para mostrar un mensaje de éxito a sus usuarios.

Cuestiones relacionadas