Comunidad de diseño web y desarrollo en internet online

¡¡por qué no me valida!!

Citar            
MensajeEscrito el 01 Dic 2013 05:44 pm
Buenas,

Me estoy desesperando un poco con este tema, a ver si me podéis ayudar.

He construido un formulario: se valida con JS y después da paso a una página para que conecte con la base de datos y se inserte la información.

Me ha atascado con la parte de la validación.

Cuando se presiona sobre el botón enviar no sucede nada, salvo que en la barra de direcciones a la URL se le añade un ? Lo curioso es que sobre un editor de html sí que funciona. Valida correctamente y salen los errores en caso de que los haya....¿¿qué estoy haciendo mal??

Mil gracias por adelantado

Adjunto el código

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Página de registro</title>
<link href="estilos.css" rel="stylesheet" type="text/css" media="screen" />
<script>
function enviar()
{
<!--recogida de variables-->
var name = document.getElementById("nombre").value;
var user = document.getElementById("usuario").value;
var correo = document.getElementById ("email").value;
var posarroba = correo.indexOf("@"); <!--Asignamos a una variable la posicion del carácter-->
var pospunto = correo.lastIndexOf(".");
var contra1 = document.getElementById("pass1").value;
var contra2 = document.getElementById("pass2").value;
var year = document.getElementById("año").selectedIndex;
var day = document.getElementById("dia").selectedIndex;
var month = document.getElementById("mes").selectedIndex;



<!--Validación de los campos del forumalario-->
if (name==null || name == "")
{
document.getElementById("error").innerHTML = "Este campo no puede estar vacio";
}
if (user==null || user == "")
{
document.getElementById("error2").innerHTML = "Este campo no puede estar vacio";
}

if (posarroba<1 || pospunto<posarroba+2 || pospunto+2>=correo.length)
{
document.getElementById("error3").innerHTML = "El correo esta mál escrito";
}

if (contra1.length <= 6)
{
document.getElementById("error4").innerHTML = "Escribe como mínimo seis letras";
}

if (contra1 != contra2)
{
document.getElementById("error5").innerHTML = "Las claves no son iguales";
}

if (year==null || year==0 || month==null || month==0 || day==null || day==0)
{
document.getElementById("error6").innerHTML = "Tienes que escoger una fecha de nacimiento";
return 0;
}
else
 {
  window.location.assign("registro_aceptado.php")
  }
  }
</script>

</head>
<body>
<h1 class="titular"> Crea tu usuario </h1>
<form class="formulario" id="registro">
<fieldset>
<legend> *Campos obligatorios </legend>
<div>
Tu nombre:
<input type="text" id="nombre"><p class="fallos" id="error"></p><br />
</div>
<div>
Tu usuario:
<input type="text" id="usuario"><p class="fallos" id="error2"></p><br />
</div>
<div>
Tu email:
<input type="text" id="email"><p class="fallos" id="error3"></p><br /><br />
</div>
<div>
<label for="contraseña">Tu contraseña:</label>
<input type="password" id="pass1"><p class="fallos" id="error4"></p><br />
</div>
<div>
<label for="contraseña2">Vuelve a escribir tu contraseña:</label>
<input type="password" id="pass2"><p class="fallos" id="error5"></p><br />
</div>
<div>
<label for="fecha">Fecha de nacimiento:</label>
<select id="dia">
<option value="">-Día-</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select id="mes">
<option value="">-Mes-</option>
<option value="enero">enero</option>
<option value="febrero">febrero</option>
<option value="marzo">marzo</option>
<option value="abril">abril</option>
<option value="mayo">mayo</option>
<option value="junio">junio</option>
<option value="1">julio</option>
<option value="1">agosto</option>
<option value="1">sepiembre</option>
<option value="1">octubre</option>
<option value="1">noviembre</option>
<option value="1">diciembre</option>
</select>
<select id="año">
<option value="">-Año-</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
</select><p class="fallos" id="error6"></p><br />
</div>
<div>
<label for="sexo">¿Cuál es tu sexo?</label><br />
Mujer <input type="radio" id="sexo" value="mujer" checked>
Hombre <input type="radio" id="sexo" value="hombre"><br />
</div>
<input type="reset" value="Borrar">
<button onclick="enviar()">¡Registrarme!</button>
</form>

</fieldset>
<br />
</body>
</html> :shock:

Por vmlcano

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Dic 2013 06:18 pm
Entiendo lo que quieres lograr pero lamentablemente tienes varios problemas con la lógica y el código.

El primero y principal es que no tienes ningún mecanismo que detenga el envío del formulario al hacer click en el botón cuando el código JS detecta un error de validación. Simplemente el formulario se envía independientemente de si hubo un error o no.

Esto es así porque el botón dispara el evento onSubmit del <form> y éste no está establecido por tanto el formulario se envía.

Entonces lo que debes hacer es mover la función enviar() del onClick del botón al evento onSubmit del <form>, eliminar el evento onClick del botón y a ese botón ponerle type="submit".

Pero esto no es suficiente. La función enviar() debe regresar un valor de tipo booleano siempre. Deforma tal que si regresa true el evento onSubmit se terminará de ejecutar y por tanto el formulario se enviará. En cambio si regresa false el envío se cancela y por lo tanto el visitante del sitio puede ver los mensajes de error y corregirlos.

Por otro lado tienes un problema con la lógica de la validación. Tal como has mostrado el código, lo único que realmente haría que el formulario no se envíe es si no falla la validación de la fecha (día, mes, año).

La solución, según lo veo yo, consiste en recoger en una variable booleana el estado de la validación de cada uno de los casos contemplados, y usar esa variable como retorno de la función.

Ahora, ¿por qué no valida?, es tu pregunta, pues en realidad sí sucede la validación, es que simplemente no haces nada con los resultados de la misma.

Esta es mi versión del código.

Código HTML :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>Página de registro</title>
 <link href="estilos.css" rel="stylesheet" type="text/css" media="screen" />
 <script>
 function enviar()
 {
 var ok = true;
 <!--recogida de variables-->
 var name = document.getElementById("nombre").value;
 var user = document.getElementById("usuario").value;
 var correo = document.getElementById ("email").value;
 var posarroba = correo.indexOf("@"); <!--Asignamos a una variable la posicion del carácter-->
 var pospunto = correo.lastIndexOf(".");
 var contra1 = document.getElementById("pass1").value;
 var contra2 = document.getElementById("pass2").value;
 var year = document.getElementById("año").selectedIndex;
 var day = document.getElementById("dia").selectedIndex;
 var month = document.getElementById("mes").selectedIndex;



 <!--Validación de los campos del forumalario-->
 if (name==null || name == "")
 {
 document.getElementById("error").innerHTML = "Este campo no puede estar vacio";
 ok=false;
 }
 if (user==null || user == "")
 {
 document.getElementById("error2").innerHTML = "Este campo no puede estar vacio";
 ok=false;
 }

 if (posarroba<1 || pospunto<posarroba+2 || pospunto+2>=correo.length)
 {
 document.getElementById("error3").innerHTML = "El correo esta mál escrito";
 ok=false;
 }

 if (contra1.length <= 6)
 {
 document.getElementById("error4").innerHTML = "Escribe como mínimo seis letras";
 ok=false;
 }

 if (contra1 != contra2)
 {
 document.getElementById("error5").innerHTML = "Las claves no son iguales";
 ok=false;
 }

 if (year==null || year==0 || month==null || month==0 || day==null || day==0)
 {
 document.getElementById("error6").innerHTML = "Tienes que escoger una fecha de nacimiento";
 ok=false;
 }
 else
 {
  window.location.assign("registro_aceptado.php")
  }
 return ok;
   }
 </script>

</head>
<body>
<h1 class="titular"> Crea tu usuario </h1>
 <form class="formulario" id="registro" onSubmit="return enviar();">
 <fieldset>
 <legend> *Campos obligatorios </legend>
 <div>
 Tu nombre:
 <input type="text" id="nombre"><p class="fallos" id="error"></p><br />
 </div>
 <div>
 Tu usuario:
 <input type="text" id="usuario"><p class="fallos" id="error2"></p><br />
 </div>
 <div>
 Tu email:
 <input type="text" id="email"><p class="fallos" id="error3"></p><br /><br />
 </div>
 <div>
 <label for="contraseña">Tu contraseña:</label>
 <input type="password" id="pass1"><p class="fallos" id="error4"></p><br />
 </div>
 <div>
 <label for="contraseña2">Vuelve a escribir tu contraseña:</label>
 <input type="password" id="pass2"><p class="fallos" id="error5"></p><br />
 </div>
 <div>
 <label for="fecha">Fecha de nacimiento:</label>
 <select id="dia">
 <option value="">-Día-</option>
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
 <option value="4">4</option>
 <option value="5">5</option>
 <option value="6">6</option>
 <option value="7">7</option>
 <option value="8">8</option>
 <option value="9">9</option>
 <option value="10">10</option>
 <option value="11">11</option>
 <option value="12">12</option>
 <option value="13">13</option>
 <option value="14">14</option>
 <option value="15">15</option>
 <option value="16">16</option>
 <option value="17">17</option>
 <option value="18">18</option>
 <option value="19">19</option>
 <option value="20">20</option>
 <option value="21">21</option>
 <option value="22">22</option>
 <option value="23">23</option>
 <option value="24">24</option>
 <option value="25">25</option>
 <option value="26">26</option>
 <option value="27">27</option>
 <option value="28">28</option>
 <option value="29">29</option>
 <option value="30">30</option>
 <option value="31">31</option>
 </select>
 <select id="mes">
 <option value="">-Mes-</option>
 <option value="enero">enero</option>
 <option value="febrero">febrero</option>
 <option value="marzo">marzo</option>
 <option value="abril">abril</option>
 <option value="mayo">mayo</option>
 <option value="junio">junio</option>
 <option value="1">julio</option>
 <option value="1">agosto</option>
 <option value="1">sepiembre</option>
 <option value="1">octubre</option>
 <option value="1">noviembre</option>
 <option value="1">diciembre</option>
 </select>
 <select id="año">
 <option value="">-Año-</option>
 <option value="2000">2000</option>
 <option value="1999">1999</option>
 <option value="1998">1998</option>
 <option value="1997">1997</option>
 <option value="1996">1996</option>
 <option value="1995">1995</option>
 <option value="1994">1994</option>
 <option value="1993">1993</option>
 <option value="1992">1992</option>
 <option value="1991">1991</option>
 </select><p class="fallos" id="error6"></p><br />
 </div>
 <div>
 <label for="sexo">¿Cuál es tu sexo?</label><br />
 Mujer <input type="radio" id="sexo" value="mujer" checked>
 Hombre <input type="radio" id="sexo" value="hombre"><br />
 </div>
 <input type="reset" value="Borrar">
<button type="submit">¡Registrarme!</button>
 </form>

 </fieldset>
 <br />
 </body>
</html>


Finalmente, los problemas no acaban ahí. Lo primero que verás cuando pruebes este código es que si la validación no pasa, el visitante seguirá teniendo en su pantalla el mensaje de error aunque haya corregido lo que está mal. Dejo que te diviertas corrigiendo esto :).

Además la validación que haces de la dirección de correo electrónico es muy débil. Te invito a que leas esto: Validar un correo electrónico

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 01 Dic 2013 07:16 pm
Mil gracias.

Voy a solucionar lo último que me comentas.
Y te cuento...

Gracias otra vez por tu ayuda

Por vmlcano

3 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.