Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Enviar un formulario después de otro

Estas en el tema de Enviar un formulario después de otro en el foro de Javascript en Foros del Web. Hola. Tengo un formulario dentro de otro para el envío de datos de operación de una tienda virtual. Se trata de que el formulario ("formulario") ...
  #1 (permalink)  
Antiguo 22/01/2014, 11:52
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Enviar un formulario después de otro

Hola.

Tengo un formulario dentro de otro para el envío de datos de operación de una tienda virtual.

Se trata de que el formulario ("formulario") contiene los datos personales y dentro de sí un segundo formulario llamado "formulariotpv" que contiene datos de la operación.

He establecido este sistema de envío


document.formulario.submit();
document.formulariotpv.submit();

Que envía primero uno y luego el otro.

Los campos obligatorios están en "formulario".

El problema es que procesa los dos. Así que se envía el segundo formulario estén rellenados o no los campos obligatorios.

Es decir, salen dos ventanas de respuesta; una para el formulario general y otra para el secundario. Si no has rellenado los campos obligatorios, envía el formulariotpv igualmente, aunque salga la otra ventana diciendo que no se han rellenado los campos y que no se ha podido enviar el formulario.

Se me ha ocurrido establecer alguna condición o función para que formulariotpv sólo pueda ser procesado si "formulario" ha sido enviado con éxito.

¿Me podéis orientar?

Un saludo.
  #2 (permalink)  
Antiguo 22/01/2014, 12:01
 
Fecha de Ingreso: diciembre-2011
Ubicación: Temuco
Mensajes: 15
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Enviar un formulario después de otro

Yo una vez implemento algo parecido y los solucione con esto

http://tympanus.net/codrops/2010/06/07/fancy-sliding-form-with-jquery/

creo que deberias validar la info en tiempo real con ajax y usar las transacciones (commit, rollback) de tu BD en el servidor con el lenguaje que estas trabajando.

Saludos
  #3 (permalink)  
Antiguo 22/01/2014, 12:09
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Enviar un formulario después de otro

Hola ososo86.

No hay base de datos, sino que formulariotpv recoge los datos y los envía una página interna que los procesa y redirecciona al banco.

Para que lo veas:

Código:
      <form name="formulariotpv" action="control.php" method=post target=_blank">
El formulario principal es por cgi:

Código:
     <form name="formulario" action="http://cgi.el -sitio- web.com/FormMail.pl" method="post">
Antes estaba con una especie de redirección:

Código:
	
document.formulario.redirect.value = c;

//	alert(document.formulario.redirect.value);
	document.formulario.submit();
Donde "c" estaba definido como la url en .asp dispuesta en el formulariotpv.

¿Algún tipo de redirección quizás?

La recogida de datos está hecha y no se puede cambiar. Lo que hace falta es que una vez se procese el formulario con los datos identificativos se procese el segundo.

Sólo si se han rellenado los campos del formulario principal.
  #4 (permalink)  
Antiguo 22/01/2014, 15:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Enviar un formulario después de otro

¿Y si en lugar de utilizar dos formularios usas uno para enviar toda la información?, sería más fácil de controlar por el tema de las validaciones. Si de todos modos quieres usar dos formularios, puedes usar una variable comodín para decidir si se enviará o no el segundo formulario, por ejemplo:

Código Javascript:
Ver original
  1. var form1 = document.getElementById("form1"),
  2.     form2 = document.getElementById("form2"),
  3.     comodin = true;
  4.  
  5. for (i = 0, limite = form1.elements.length, i < limite; i++){
  6.     if (form1.elements[i].value.length == 0){
  7.         alert("Debe ingresar datos en el campo " + form1.elements[i].name);
  8.         comodin = false;
  9.         form1.elements[i].focus();
  10.         break;
  11.     }
  12. }
  13.  
  14. if (comodin){
  15.     form1.submit();
  16.     form2.submit();
  17. }

Recorro todos los elementos del primer formulario, si alguno de ellos está vacío, lanzo una alerta indicándole al usuario que debe ingresar datos en el campo vacío, el valor del comodín cambia a false, le doy el enfoque al campo vacío y salgo del bucle con el que estoy recorriendo los elementos del primer formulario. Luego, si y sólo si el valor del comodin es true, envío los datos de ambos formularios.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 23/01/2014, 01:40
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Enviar un formulario después de otro

Hola Alexis88.

Gracias por responder así.

Hay que usar los dos formularios.

El primer formulario, además del número de operación (Num_operacion) y del importe (Importe), recoge datos personales para enviarlos a una dirección de email.

El segundo, recoge sólo esos dos datos y los reenvía a un archivo php que es el que procesa los datos

La página que los contiene incluye esta función de envío:

Código:
function aceptar(){
// var a,b,c;
// a = document.formulario.Num_operacion.value;
// b = document.formulario.Importe.value;
// c = "control.php?Num_operacion=";
// c = c + a + "&Importe=" + b;
// alert(c);
document.formulariotpv.Num_operacion.value=document.formulario.Num_operacion.value;
document.formulariotpv.Importe.value=document.formulario.Importe.value;
document.formulariotpv.submit();
}
Como véis, se definen lo que debe ser el número de operación y el importe en el segundo formulario (formulariotpv) para luego establecer el envío mediante document.formulariotpv.submit();

Aquí el problema, ya que sólo procesa este segundo formulario.

No me acaba de resultar el incluir la función que me indicas dentro de esta otra o como complemento a la misma.

Última edición por JUMASOL; 23/01/2014 a las 03:21
  #6 (permalink)  
Antiguo 23/01/2014, 03:57
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Enviar un formulario después de otro

Se ha me ocurrido otra solución, que no sé si es posible.

El primer formulario tiene un campo oculto con una redirección para dar respuesta al envío del formulario.

<input type="hidden" name="redirect"/>

¿Es posible utilizarlo o utilizar otro adecuado para después vincularlo al envío automático del segundo formulario?

Sé que existen funciones de envío automático del formulario.

Se trataría de, tras el submit del primer formulario, porque se han rellenado todos los campos requiridos, el campo oculto "redirect" o el que fuese sería tratado por una función para enviar el segundo formulario.

Creo que es la opción más limpia.

Última edición por JUMASOL; 23/01/2014 a las 04:07
  #7 (permalink)  
Antiguo 23/01/2014, 09:51
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Enviar un formulario después de otro

Dices que un formulario envía los datos que recoge a un e-mail y el otro a un archivo que los procesa, ¿y si el mismo archivo procesa los datos y envía el e-mail?, por eso te decía que sería más factible hacerlo todo en un formulario. A propósito, ¿intentaste hacerlo con el modo que te expliqué en la respuesta anterior?.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 23/01/2014, 09:57
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Enviar un formulario después de otro

Sí. Lo intenté. Pero no funcionó.

Me ha surgido otra solución para poderlo hacer todo a través del segundo formulario. Pero ahora necesito "concatenar" tres campos de texto definidos por una clase y un mismo nombre para que luego su información sea procesada de forma unitaria por una función del archivo php.

He preguntado que si es posible derivar la información de tres campos a una misma función, y me han dicho eso, que concatenando.

Creo que sería algo como esto: http://jsfiddle.net/Tyriar/5ERRG/

No estoy seguro.

Se trata de que todos los inputs confluyan en uno, cuyo contenido sería remitido al php. ¿Creéis que es posible conseguirlo integrando la solución que dan en Jsfiddel en un formulario? En lugar de pulsar "Test" se trataría de pulsar el botón de envío.

Última edición por JUMASOL; 23/01/2014 a las 10:24
  #9 (permalink)  
Antiguo 23/01/2014, 10:25
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Enviar un formulario después de otro

Es muy extraño que no te haya funcionado lo que te propuse, pero como decía antes, en un solo formulario, sería más factible:

Así lo tienes:
Código HTML:
Ver original
  1. <form name = "uno" action = "destino1.php" method = "post">
  2.     Campo 1: <input type = "text" name = "form1_campo1" />
  3.     Campo 2: <input type = "text" name = "form1_campo2" />
  4.     Campo 3: <input type = "text" name = "form1_campo3" />
  5. </form>
  6.  
  7. <form name = "dos" action = "destino2.php" method = "post">
  8.     Campo 1: <input type = "text" name = "form2_campo1" />
  9.     Campo 2: <input type = "text" name = "form2_campo2" />
  10.     Campo 3: <input type = "text" name = "form2_campo3" />
  11. </form>

Así lo propongo:
Código HTML:
Ver original
  1. <form name = "formulario" action = "destino.php" method = "post">
  2.     Campo 1: <input type = "text" name = "campo1" />
  3.     Campo 2: <input type = "text" name = "campo2" />
  4.     Campo 3: <input type = "text" name = "campo3" />
  5.     Campo 4: <input type = "text" name = "campo4" />
  6.     Campo 5: <input type = "text" name = "campo5" />
  7.     Campo 6: <input type = "text" name = "campo6" />
  8. </form>

Y en el archivo PHP:
Código PHP:
Ver original
  1. //Procesas los valores de los campos que eran del primer formulario
  2. $destino = $_POST["campo1"];
  3. $asunto = $_POST["campo2"];
  4. $mensaje = $_POST["campo3"];
  5. echo mail ($destino, $asunto, $mensaje) ? "Mensaje enviado" : "No se envió el mensaje";
  6.  
  7. //Procesas los valores de los campos que eran del segundo formulario
  8. $valor1 = $_POST["campo4"];
  9. $valor2 = $_POST["campo5"];
  10. $valor3 = $_POST["campo6"];

Haciéndolo de este modo, el ejemplo de validación que te indiqué, encajaría perfecto.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 23/01/2014, 10:32
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Enviar un formulario después de otro

Ya te he dicho que no son formularios iguales sino totalmente distintos.

Uno es un formulario para envío de un email por cgi.

Otro con un direccionamiento a un archivo php.

Pero lo que me interesa ahora es lo que he propuesto de la concatenación. Así que voy a abrir otro hilo.
  #11 (permalink)  
Antiguo 23/01/2014, 10:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Enviar un formulario después de otro

No había leído lo del CGI, pero puedes concatenar los valores de la forma en como lo viste en el ejemplo que tú mismo pusiste. Inténtalo antes de abrir nuevos hilos innecesariamente.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:06.