Programación Web y Scripting > JavaScript

 Validacion De Formulario En Jscript Y Envio En Php

(1/1)

Kyrylys:
Hola a todos, posteo esto aqui porque creo que es el Jscript el que falla, pero si es es el php muevelo por favor...

Tengo un pequeño problema, es el que sigue.

Estoy haciendo un formulario que envie los campos a una direccion de correo definida, mediante php.

Lo que hago es verificar con un javascript que los campos no estén vacios, que el mail contenga la arroba (me queda quitar el codigo malicioso < y > entre otros...)... y que si todo está ok lo mande al correo.

El problema es que si dejo algún campo vacio el js me informa mediante un alert -tal y como tiene qeu hacer- pero en vez de parar el proceso, manda el correo.

Tengo 3 documentos:

el formulario va en contacto.php

--- Código: Text ---&#60;form method=&#34;post&#34; action=&#34;envio.php&#34; id=&#34;contacto&#34; name=&#34;contacto&#34;&#62;           &#60;table width=&#34;258&#34; height=&#34;290&#34; align=&#34;center&#34;&#62;        &#60;tr&#62;          &#60;td width=&#34;124&#34;&#62;Nombre:&#60;/td&#62;        &#60;td width=&#34;122&#34;&#62;&#60;input  type=&#34;text&#34; name=&#34;nombre&#34; id=&#34;nombre&#34; size=&#34;10&#34; /&#62;&#60;/td&#62;      &#60;/tr&#62;      &#60;tr&#62;        &#60;td&#62;Apellido:&#60;/td&#62;        &#60;td&#62;&#60;input type=&#34;text&#34; name=&#34;apellido&#34; id=&#34;apellido&#34; size=&#34;10&#34; /&#62;&#60;/td&#62;      &#60;/tr&#62;      &#60;tr&#62;              &#60;td&#62;E-Mail:&#60;/td&#62;        &#60;td&#62;&#60;input  type=&#34;text&#34; name=&#34;email&#34; id=&#34;email&#34; size=&#34;10&#34; /&#62;&#60;/td&#62;      &#60;/tr&#62;        &#60;tr&#62;        &#60;td colspan=&#34;2&#34;&#62;&#60;textarea  name=&#34;mensaje&#34; cols=&#34;30&#34; rows=&#34;5&#34; wrap=&#34;OFF&#34;&#62;&#60;/textarea&#62;&#60;/td&#62;      &#60;/tr&#62;        &#60;tr&#62;        &#60;td colspan=&#34;2&#34; align=&#34;center&#34;&#62;&#60;input type=&#34;submit&#34; name=&#34;Submit&#34; value=&#34;Enviar&#34;onClick=&#34;javacript:check_form();&#34;&#62;&#60;/td&#62;      &#60;/tr&#62;    &#60;/table&#62;&#60;/form&#62;    
como veis es muy sencillo.

el jscript que valida es este:


--- Código: Text ---function check_form(){var cont=0;var err='Para poder atenderle mejor nos es necesario que rellene los siguientes campos:&#092;n&#092;n&#092;n';   if (contacto.nombre.value=='')          {err=err+&#34;    Nombre&#092;n&#34;;cont=1;}   if (contacto.apellido.value=='')       {err=err+&#34;    Apellido&#092;n&#34;;cont=1;}   if (contacto.email.value=='')       {err=err+&#34;    Correo electrónico&#092;n&#34;;cont=1;}     //implementacion: mirar la arroba sólo si el campo mail ha sido rellenado  if ((contacto.email.value!='')&&(contacto.email.value.indexOf(&#34;@&#34;)==-1))    {err=&#34; su dirección de e-mail no es válida&#092;n&#34;; cont=1;}    //fin verificacion @   if (contacto.mensaje.value=='')       {err=err+&#34;    Mensaje&#092;n&#34;; cont=1;}             err=err+&#34;&#092;n&#092;n... disculpe las molestias.&#34;;   if (cont==1) alert(err);         else {contacto.submit();}  } como veis le digo que si hay un error saque un alert -cosa que hace-
y si no (else) que envie el formulario. pero es como si ignorase el else.

por ultimo el documento que procesa el envio del formulario via e-mail.


--- Código: Text ---&#60;?phpsession_start();  &#036;mensaje='';  &#036;to=&#34;MAIL PERSONAL QUE NO SE VISUALIZA EN LA WEB Y A LA QUE LLEGA EL FORMULARIO&#34;;  &#036;subject=&#34;Consulta Web&#34;; &#036;mensaje=&#036;mensaje.&#34;Nombre: &#34;.&#036;_REQUEST[&#34;nombre&#34;].&#34;&#092;n&#34;;&#036;mensaje=&#036;mensaje.&#34;Apellido: &#34;.&#036;_REQUEST[&#34;apellido&#34;].&#34;&#092;n&#34;;&#036;mensaje=&#036;mensaje.&#34;E-mail: &#34;.&#036;_REQUEST[&#34;email&#34;].&#34;&#092;n&#34;;&#036;mensaje=&#036;mensaje.&#34;&#092;n&#34;.&#036;_REQUEST[&#34;mensaje&#34;].&#34;&#092;n&#34;; &#036;env=@mail(&#036;to,&#036;subject,&#036;mensaje,&#34;From:&#34;.&#036;_REQUEST[&#34;email&#34;]); ?&#62;&#60;html&#62;  &#60;head&#62;&#60;title&#62;&#60;/title&#62;&#60;?phprequire(&#34;icono.php&#34;);require(&#34;metatags.php&#34;);require(&#34;estilo.php&#34;);require(&#34;scripts.php&#34;);?&#62; &#60;/head&#62; &#60;body marginwidth=&#34;0&#34; leftmargin=&#34;0&#34; marginheight=&#34;0&#34; topmargin=&#34;0&#34;&#62; &#60;?phpecho(&#34;&#60;!---------------MAIN---------------------------&#62;&#34;);require(&#34;top.php&#34;);require(&#34;menu.php&#34;);require(&#34;barras.php&#34;);?&#62; &#60;?php if (!&#036;env) {echo(&#34;  &#60;div style='position:absolute; left:250; top:400;'&#62;  &#60;table&#62;    &#60;tr height='19px'&#62;      &#60;td&#62;&#60;p align='center'&#62;Lamentamos anunciar que su consulta no ha sido enviada&#60;/p&#62;&#60;/td&#62;         &#60;!--td background='../IMG/buttons/ini.jpg' width='3' align='left'&#62;&#60;/td--&#62;      &#60;td background='../IMG/buttons/med.jpg' width='70' align='center'&#62;&#60;a href='main.php?link=contacto'&#62;&#60;i&#62;volver atras&#60;/i&#62;&#60;/a&#62;&#60;/td&#62;      &#60;!--td background='../IMG/buttons/fin.jpg' width='3' align='right'&#62;&#60;/td--&#62;      &#60;/tr&#62;&#60;/table&#62;&#60;/div&#62;&#34;); }else{echo(&#34;&#60;div style='position:absolute; left:250; top:400;'&#62;  &#60;table aling='center'&#62;    &#60;tr height='19px'&#62;      &#60;td&#62;&#60;p align='center'&#62;En unos días recibirá respuesta a su consulta. Muchas gracias.&#60;/p&#62;&#60;/td&#62;         &#60;td background='../IMG/buttons/ini.jpg' width='3' align='left'&#62;&#60;/td&#62;      &#60;td background='../IMG/buttons/med.jpg' width='100' align='center'&#62;&#60;a href='main.php?link=inicio'&#62;&#60;i&#62;Inicio&#60;/i&#62;&#60;/a&#62;&#60;/td&#62;      &#60;td background='../IMG/buttons/fin.jpg' width='3' align='right'&#62;&#60;/td&#62;      &#60;/tr&#62;  &#60;/table&#62;&#60;/div&#62;  &#34;);}?&#62; &#60;?phprequire(&#34;footer.php&#34;);echo(&#34;&#60;!-------------END MAIN-----------------------------&#62;&#34;);require(&#34;disconnect.php&#34;);?&#62;&#60;/body&#62; &#60;/html&#62;   
Bueno gracias por adelantado por las molestias que os estoy causando :losiento:  y gracias.

Altareum:
Hola Kyrylys:

El problema que tenés es que agregaste al formulario un boton del tipo Submit, esto hace que el formulario se envíe una vez que terminó de ejecutar el script.
Tienes dos opciones:


1- Cambiar el tipo del boton de submit a button:


--- Citar ---<input type="button" name="Submit" value="Enviar"onClick="javacript:check_form();">
--- Fin de la cita ---

2- O sacar el evento onclick del boton, y en el formulario llamar al script con el evento onsubmit:


--- Citar ---<form method="post" action="envio.php" id="contacto" name="contacto" onSubmit="return check_form();">
--- Fin de la cita ---

Ojo, con esta última opción, si la función devuelve true el formulario se enviará, si devuelve false no. Si quieres que el formulario lo envíe el script, haz que devuelva siempre false.
En caso de que no devuelva nada, probablemente lo interprete como true (al menos el IE hace eso)..



Espero que te sirva.
Altareum.

Kyrylys:
gracias probare de las dos formas que dices para ver como funcionan empiricamente.

Navegación

[0] Índice de Mensajes

Ir a la versión completa