Foros del Web » Programando para Internet » Jquery »

Problema al validar nick con jquery.validate()

Estas en el tema de Problema al validar nick con jquery.validate() en el foro de Jquery en Foros del Web. Buenos días, Estoy usando la librería jquery.validate y la verdad es que va muy bien. Sin embargo, me gustaría comprobar si el nick que está ...
  #1 (permalink)  
Antiguo 24/09/2010, 05:07
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Problema al validar nick con jquery.validate()

Buenos días,

Estoy usando la librería jquery.validate y la verdad es que va muy bien.
Sin embargo, me gustaría comprobar si el nick que está escribiendo el usuario está en la base de datos o no.

Esta parte la tengo, pero solo me muestra el mensaje de excepción "El usuario ya existe" cuando el usuario ya existe. Me gustaría mostrar también un mensaje diciendo "Usuario disponible" cuando este no exista.

Se le puede decir al jquery que muestre ese mensaje?

Ahora mismo tengo lo siguiente:

index.php
Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2.     <head>
  3.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4.         <title>Formulario Validation</title>
  5.         <link type="text/css" href="css/estilo.css" rel="stylesheet" />
  6.         <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
  7.         <script type="text/javascript" src="js/jquery.validate.js"></script>
  8.         <script type="text/javascript">
  9.             $(document).ready(function(){
  10.                 $.validator.addMethod("regex",function(value,element,regexp){
  11.                     var re= new RegExp(regexp);
  12.                     return this.optional(element) || re.test(value);
  13.                 },"Solo caracteres alfanumericos");
  14.                 $("#registro").validate({
  15.                     rules:{
  16.                             usuario:{
  17.                                 required:true,
  18.                                 regex:"^[a-zA-Z0-9_]+$",
  19.                                 remote:"comprobar.php"
  20.                             },
  21.                             pass:{
  22.                                 required:true
  23.                             },
  24.                             pass2:{
  25.                                 equalTo:"#pass"
  26.                             },
  27.                             email:{
  28.                                 email:true,
  29.                                 required:true
  30.                             },
  31.                             sitioweb:{
  32.                                 url:true
  33.                             },
  34.                             lenguaje:{
  35.                                 required:true
  36.                             }
  37.                     },
  38.                     messages:{
  39.                         usuario:{
  40.                             required:"Campo obligatorio",
  41.                             remote:"El usuario ya existe"
  42.                         },
  43.                         pass:{
  44.                             required:"Campo obligatorio"
  45.                         },
  46.                         pass2:{
  47.                             equalTo:"La contraseña no es igual"
  48.                         },
  49.                         email:{
  50.                             email:"El email no es valido",
  51.                             required:"Campo es obligatorio"
  52.                         },
  53.                         sitioweb:{
  54.                             url:"La url no es valida"
  55.                         },
  56.                         lenguaje:{
  57.                             required:"Campo obligatorio"
  58.                         }
  59.                     },
  60.                     submitHandler:function(){
  61.                         alert("Los datos han sido enviados");
  62.                     }
  63.                 })
  64.             })
  65.         </script>
  66.     </head>
  67.     <body>
  68.         <fieldset>
  69.             <legend>Ingreso de usuario</legend>
  70.             <form id="registro" name="registro" action="">
  71.                 <div>
  72.                     <label class="campo">Usuario:</label>
  73.                     <input type="text" id="usuario" name="usuario" />
  74.                 </div>
  75.                 <div>
  76.                     <label class="campo">Contraseña:</label>
  77.                     <input type="text" id="pass" name="pass" />
  78.                 </div>
  79.                 <div>
  80.                     <label class="campo">Repetir:</label>
  81.                     <input type="text" id="pass2" name="pass2" />
  82.                 </div>
  83.                 <div>
  84.                     <label class="campo">Email:</label>
  85.                     <input type="text" id="email" name="email" />
  86.                 </div>
  87.                 <div>
  88.                     <label class="campo">Sitio web:</label>
  89.                     <input type="text" id="sitioweb" name="sitioweb" />
  90.                 </div>
  91.                 <div>
  92.                     <label class="campo">Lenguaje:</label>
  93.                     <select id="lenguaje" name="lenguaje">
  94.                         <option selected="selected" value="">Selecione un lenguaje</option>
  95.                         <option value="1">PHP</option>
  96.                         <option value="2">JAVA</option>
  97.                         <option value="3">ASP.NET</option>
  98.                     </select>
  99.                 </div>
  100.                 <input type="submit" value="Registrar" />
  101.             </form>
  102.         </fieldset>
  103.     </body>
  104. </html>

comprobar.php
Código PHP:
Ver original
  1. <?php
  2. $formUsuario=$_GET['usuario'];
  3. $conexion = mysql_connect("localhost", "root", "xxxx");
  4. mysql_select_db("usuarios");
  5. $sql = "SELECT id from users where username='$formUsuario'";
  6. $resultado = mysql_query($sql, $conexion);
  7. if(mysql_fetch_assoc($resultado)){
  8.     echo "false";
  9. }else{
  10.     echo "true";
  11. }
  12. ?>

Si el usuario no existe en la base de datos devuelvo un TRUE a la función jquery

usuario:{
required:true,
regex:"^[a-zA-Z0-9_]+$",
remote:"comprobar.php"
},


Pero los mensajes solo he conseguido que salgan cuando recibo un false

¿Se os ocurre alguna forma de lograrlo?

Mil gracias de antemano!
  #2 (permalink)  
Antiguo 24/09/2010, 07:38
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

yo tengo algo así

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>Formulario Validation</title>
  4.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  5.         <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
  6.         <script type="text/javascript">
  7.             $(document).ready(function(){
  8.                 $.validator.addMethod("regex",function(value,element,regexp){
  9.                     var re= new RegExp(regexp);
  10.                     return this.optional(element) || re.test(value);
  11.                 },"Solo caracteres alfanumericos");
  12.  
  13.                 $.validator.addMethod("comprobarUsuario",function(value,element){
  14.                     //Simulo petición, una respuesta (pero comparo con el valor del input)
  15.                     if (value == 'asd'){
  16.                         usuarioValido = true;
  17.                         return true;
  18.                      } else {
  19.                         usuarioValido = false;
  20.                         return false;
  21.                      }                    
  22.                 },"Usuario ocupado");
  23.  
  24.                 $("#registro").validate({
  25.                     rules:{
  26.                             usuario:{
  27.                                 required:true,
  28.                                 regex:"^[a-zA-Z0-9_]+$",
  29.                                 comprobarUsuario:"dos.jsp"
  30.                             },
  31.                             pass:{
  32.                                 required:true
  33.                             },
  34.                             pass2:{
  35.                                 equalTo:"#pass"
  36.                             },
  37.                             email:{
  38.                                 email:true,
  39.                                 required:true
  40.                             },
  41.                             sitioweb:{
  42.                                 url:true
  43.                             },
  44.                             lenguaje:{
  45.                                 required:true
  46.                             }
  47.                     },
  48.                     messages:{
  49.                         usuario:{
  50.                             required:"Campo obligatorio"
  51.                         },
  52.                         pass:{
  53.                             required:"Campo obligatorio"
  54.                         },
  55.                         pass2:{
  56.                             equalTo:"La contraseña no es igual"
  57.                         },
  58.                         email:{
  59.                             email:"El email no es valido",
  60.                             required:"Campo es obligatorio"
  61.                         },
  62.                         sitioweb:{
  63.                             url:"La url no es valida"
  64.                         },
  65.                         lenguaje:{
  66.                             required:"Campo obligatorio"
  67.                         }
  68.                     },
  69.                     submitHandler:function(){
  70.                         alert("Los datos han sido enviados");
  71.                     }, success: function(label) {
  72.                         if (usuarioValido){
  73.                             label.addClass('valid').text("Usuario disponible");
  74.                         }
  75.                     }
  76.  
  77.                 })
  78.             })
  79.         </script>
  80.     </head>
  81.     <body>
  82.         <fieldset>
  83.             <legend>Ingreso de usuario</legend>
  84.             <form id="registro" name="registro" action="">
  85.                 <div>
  86.                     <label class="campo">Usuario:</label>
  87.                     <input type="text" id="usuario" name="usuario" />
  88.                 </div>
  89.                 <div>
  90.                     <label class="campo">Contraseña:</label>
  91.                     <input type="text" id="pass" name="pass" />
  92.                 </div>
  93.                 <div>
  94.                     <label class="campo">Repetir:</label>
  95.                     <input type="text" id="pass2" name="pass2" />
  96.                 </div>
  97.                 <div>
  98.                     <label class="campo">Email:</label>
  99.                     <input type="text" id="email" name="email" />
  100.                 </div>
  101.                 <div>
  102.                     <label class="campo">Sitio web:</label>
  103.                     <input type="text" id="sitioweb" name="sitioweb" />
  104.                 </div>
  105.                 <div>
  106.                     <label class="campo">Lenguaje:</label>
  107.                     <select id="lenguaje" name="lenguaje">
  108.                         <option selected="selected" value="">Selecione un lenguaje</option>
  109.                         <option value="1">PHP</option>
  110.                         <option value="2">JAVA</option>
  111.                         <option value="3">ASP.NET</option>
  112.                     </select>
  113.                 </div>
  114.                 <input type="submit" value="Registrar" />
  115.             </form>
  116.         </fieldset>
  117.     </body>
  118. </html>

fijate que simulo nomás esto, que seria una petoción a la db
if (value == 'asd'){
  #3 (permalink)  
Antiguo 27/09/2010, 00:05
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Respuesta: Problema al validar nick con jquery.validate()

Cita:
Iniciado por Dany_s Ver Mensaje
yo tengo algo así

fijate que simulo nomás esto, que seria una petoción a la db
if (value == 'asd'){
Buenas Dany_s,

Funciona tal y como deseaba, me aparece el texto tanto si está en uso como si sino.

Pero como hago para que el valor ingresado lo compare con la base de datos? porque ahora mismo no me hace ninguna petición ajax

En el primer post está el código que utilizo para hacer la búsqueda en la BD

Pego el fragmento .js

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $.validator.addMethod("regex",function(value,element,regexp){
  3.         var re= new RegExp(regexp);
  4.         return this.optional(element) || re.test(value);
  5.     },"Solo caracteres alfanumericos");
  6.     $.validator.addMethod("comprobarUsuario",function(value,element){
  7.         //Simulo petición, una respuesta (pero comparo con el valor del input)
  8.         if (value == 'neo'){
  9.             usuarioValido = true;
  10.             return true;
  11.          } else {
  12.             usuarioValido = false;
  13.             return false;
  14.          }                    
  15.     },"Usuario ocupado");
  16.    
  17.     $("#crear_cuenta").validate({
  18.         rules:{
  19.             nombre:{required:true},
  20.            
  21.             username:{
  22.                 required:true,
  23.                 regex:"^[a-zA-Z0-9_]+$",
  24.                 comprobarUsuario:"comprobar.php"
  25.             },

¿Debería enviar los datos según escribo al script comprobar.php, no?
No sé que hago mal

Pues no realiza ninguna petición en ajax... :S

También me gustaría saber, cómo lo hago para que en lugar del valor de este if
if (value == 'neo'){
pueda comparar con el de la respuesta del fichero comprobar.php??

Gracias de antemano
  #4 (permalink)  
Antiguo 27/09/2010, 05:12
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

y con ajax, por eso puse "simulo una petición", la respuesta tiene que devolver true o false o lo que quieras para decirle al plugin que mostrar

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>Formulario Validation</title>
  4.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  5.         <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
  6.         <script type="text/javascript">
  7.             $(document).ready(function(){
  8.                 var usuarioValido;
  9.                 $.validator.addMethod("regex",function(value,element,regexp){
  10.                     var re= new RegExp(regexp);
  11.                     return this.optional(element) || re.test(value);
  12.                 },"Solo caracteres alfanumericos");
  13.  
  14.                 $.validator.addMethod("comprobarUsuario",function(value,element, url){
  15.                     $.ajax({
  16.                         type: "GET",
  17.                         url: url,
  18.                         data: "usuario="+value,
  19.                         success: function(disponible){
  20.                             usuarioValido = (disponible == 'true')?true:false;
  21.                         }
  22.                     });
  23.                     return usuarioValido;
  24.                 },"Usuario ocupado");
  25.  
  26.                 $("#registro").validate({
  27.                     rules:{
  28.                             usuario:{
  29.                                 required:true,
  30.                                 regex:"^[a-zA-Z0-9_]+$",
  31.                                 comprobarUsuario:"comprobar.php"
  32.                             },
  33.                             pass:{
  34.                                 required:true
  35.                             },
  36.                             pass2:{
  37.                                 equalTo:"#pass"
  38.                             },
  39.                             email:{
  40.                                 email:true,
  41.                                 required:true
  42.                             },
  43.                             sitioweb:{
  44.                                 url:true
  45.                             },
  46.                             lenguaje:{
  47.                                 required:true
  48.                             }
  49.                     },
  50.                     messages:{
  51.                         usuario:{
  52.                             required:"Campo obligatorio"
  53.                         },
  54.                         pass:{
  55.                             required:"Campo obligatorio"
  56.                         },
  57.                         pass2:{
  58.                             equalTo:"La contraseña no es igual"
  59.                         },
  60.                         email:{
  61.                             email:"El email no es valido",
  62.                             required:"Campo es obligatorio"
  63.                         },
  64.                         sitioweb:{
  65.                             url:"La url no es valida"
  66.                         },
  67.                         lenguaje:{
  68.                             required:"Campo obligatorio"
  69.                         }
  70.                     },
  71.                     submitHandler:function(){
  72.                         alert("Los datos han sido enviados");
  73.                     }, success: function(label) {
  74.                         if (usuarioValido){
  75.                             label.addClass('valid').text("Usuario disponible");
  76.                         }
  77.                     }
  78.  
  79.                 })
  80.             })
  81.         </script>
  82.     </head>
  83.     <body>
  84.         <fieldset>
  85.             <legend>Ingreso de usuario</legend>
  86.             <form id="registro" name="registro" action="">
  87.                 <div>
  88.                     <label class="campo">Usuario:</label>
  89.                     <input type="text" id="usuario" name="usuario" />
  90.                 </div>
  91.                 <div>
  92.                     <label class="campo">Contraseña:</label>
  93.                     <input type="text" id="pass" name="pass" />
  94.                 </div>
  95.                 <div>
  96.                     <label class="campo">Repetir:</label>
  97.                     <input type="text" id="pass2" name="pass2" />
  98.                 </div>
  99.                 <div>
  100.                     <label class="campo">Email:</label>
  101.                     <input type="text" id="email" name="email" />
  102.                 </div>
  103.                 <div>
  104.                     <label class="campo">Sitio web:</label>
  105.                     <input type="text" id="sitioweb" name="sitioweb" />
  106.                 </div>
  107.                 <div>
  108.                     <label class="campo">Lenguaje:</label>
  109.                     <select id="lenguaje" name="lenguaje">
  110.                         <option selected="selected" value="">Selecione un lenguaje</option>
  111.                         <option value="1">PHP</option>
  112.                         <option value="2">JAVA</option>
  113.                         <option value="3">ASP.NET</option>
  114.                     </select>
  115.                 </div>
  116.                 <input type="submit" value="Registrar" />
  117.             </form>
  118.         </fieldset>
  119.     </body>
  120. </html>

estudiate esto http://api.jquery.com/jQuery.ajax/
  #5 (permalink)  
Antiguo 27/09/2010, 13:45
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Respuesta: Problema al validar nick con jquery.validate()

Cita:
Iniciado por Dany_s Ver Mensaje
y con ajax, por eso puse "simulo una petición", la respuesta tiene que devolver true o false o lo que quieras para decirle al plugin que mostrar

estudiate esto http://api.jquery.com/jQuery.ajax/
Muchas gracias Dany_s,

Resulta que me aparece el texto "Usuario disponible" en cada campo que el usuario introduce correctamente, al final tengo todos los campos con el texto "Usuario disponible"

Creo que es por este trozo

Código Javascript:
Ver original
  1. submitHandler:function(){
  2.             alert("Los datos han sido enviados");
  3.         }, success: function(label) {
  4.             if (usuarioValido){
  5.                 label.addClass('valid').text("Usuario disponible");
  6.             }
  7.         }

Y leyendo el código solo debería mostrar este texto si el la variable usuarioValido es true, pero por qué los muestra en todos los campos y no solo en el del usuario??

También he intentado reducir el número de querys que se hace en ese input, para que en lugar de enviar cada carácter que el usuario introduce por ajax, sino que espere que el usuario cambie de foco para decir si el usuario esta cogido o no.

He intentado usar onkeyup: false al final del script pero cuando escribo el usuario y cambio a otro input este no se valida, hasta que no vuelvo a pulsar sobre el input del usuario.

¿Me recomiendas otra forma?

Muchas gracias de antemano!
  #6 (permalink)  
Antiguo 29/09/2010, 00:45
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Respuesta: Problema al validar nick con jquery.validate()

Buenas,

¿Sabéis como evitar que aparezca el mensaje "usuario valido" en todos los campos, y solo aparezca en el campo usuario?

He estado leyendo la documentación y veo que la función success agrega el texto en todos los campos "correctos"

http://docs.jquery.com/Plugins/Validation/validate

No hay ninguna manera de evitar esto?

Muchas gracias de antemano
  #7 (permalink)  
Antiguo 30/09/2010, 07:37
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

era mas sencillo, se puede poner las reglas como atributo de un elemeto, por ej:

Código HTML:
Ver original
  1. <div>
  2.     <label class="campo">Usuario:</label>
  3.     <input type="text" id="usuario" miRegla="elValor" name="usuario" />
  4. </div>

fijate en miRegla="elValor"

y el método propio 'miRegla'

Código Javascript:
Ver original
  1. $.validator.addMethod("miRegla",function(value,element,valorMiRegla){
  2.     alert(valorMiRegla);
  3.     return false;
  4. },"El mensaje de miRegla.");

el primer parámetro de addMethod es el atributo que está en el elemento, el segundo es la función que tiene tres parámetros, el valor del input, el input (el elemento) y el valor de la regla o sea el valor del atributo miRegla que en el ejemplo es "elValor" entonces que eso comparás para devolver true o false, y bueno el tercero es el mensaje.

con eso ya podes hacer una petición ajax

podés usar el la regla del plugin 'remote' que hace petición remota y el parámetro que manda es el atributo name del input y a la url que especificas como valor del atributo remote

o sea que si tenes tu input
Código HTML:
Ver original
  1. <div>
  2.     <label class="campo">Usuario:</label>
  3.     <input type="text" id="usuario" remote="comprobar.php" name="usuario" />
  4. </div>

se envia a comprobar.php?usuario=elValorDelInput

acordate de agregar el mensaje haciendo referencia a esa regla remote

Código Javascript:
Ver original
  1. usuario:{
  2.    required:"Campo obligatorio",
  3.    remote: jQuery.validator.format("El usuario {0} ya existe.")
  4. }

fijate que para ese mensaje uso el método format para entregar un mensaje junto con el valor del input {0} fijate la doc

y fijate en los plugins que siempre abajo hay ejemplos y podes ver el código fuente para ver cómo lo hacen

TIP: seguramente que queres tener un html válido, pero si agregas un atributo como 'miRegla' en el elemento, no es conocido por lo tanto el validador te da error o advertencia, entonces podés agregar ese atributo con jQuery $('#usuario').attr('miRegla', 'elValor')
  #8 (permalink)  
Antiguo 30/09/2010, 11:58
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Respuesta: Problema al validar nick con jquery.validate()

Buenas Dani_s,

Muchas gracias nuevamente

He intentado aplicarlo pero no me funciona correctamente, algo hago mal

Quiero poder mostrar el mensaje de usuario disponible o usuario ocupado según corresponda en el campo "usuario" y no hay manera...

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>Formulario Validation</title>
  4.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  5.         <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
  6.         <script type="text/javascript">
  7.             $(document).ready(function(){
  8.                 var usuarioValido;
  9.                 $.validator.addMethod("regex",function(value,element,regexp){
  10.                     var re= new RegExp(regexp);
  11.                     return this.optional(element) || re.test(value);
  12.                 },"Solo caracteres alfanumericos");
  13.  
  14.                 /*$.validator.addMethod("comprobarUsuario",function(value,element, url){
  15.                     $.ajax({
  16.                         type: "GET",
  17.                         url: url,
  18.                         data: "usuario="+value,
  19.                         success: function(disponible){
  20.                             usuarioValido = (disponible == 'true')?true:false;
  21.                         }
  22.                     });
  23.                     return usuarioValido;
  24.                 },"Usuario ocupado");*/
  25.                 $.validator.addMethod("miRegla",function(value,element,valorMiRegla){
  26.                     $.ajax({
  27.                         type: "GET",
  28.                         url: valorMiRegla,
  29.                         data: "usuario="+value,
  30.                         success: function(disponible){
  31.                             if (disponible){
  32.                                 return true;
  33.                             }else{
  34.                                 return false;
  35.                             }
  36.                         }
  37.                     });
  38.                 },"Usuario ocupado");
  39.                
  40.                
  41.                 $("#registro").validate({
  42.                     rules:{
  43.                             usuario:{
  44.                                 required:true,
  45.                                 regex:"^[a-zA-Z0-9_]+$",
  46.                                 miRegla:"comprobar.php"
  47.                             },
  48.                             pass:{
  49.                                 required:true
  50.                             },
  51.                             pass2:{
  52.                                 equalTo:"#pass"
  53.                             },
  54.                             email:{
  55.                                 email:true,
  56.                                 required:true
  57.                             },
  58.                             sitioweb:{
  59.                                 url:true
  60.                             },
  61.                             lenguaje:{
  62.                                 required:true
  63.                             }
  64.                     },
  65.                     messages:{
  66.                         usuario:{
  67.                             required:"Campo obligatorio",
  68.                             remote: jQuery.validator.format("El usuario {0} ya existe.")
  69.                         },
  70.                         pass:{
  71.                             required:"Campo obligatorio"
  72.                         },
  73.                         pass2:{
  74.                             equalTo:"La contraseña no es igual"
  75.                         },
  76.                         email:{
  77.                             email:"El email no es valido",
  78.                             required:"Campo es obligatorio"
  79.                         },
  80.                         sitioweb:{
  81.                             url:"La url no es valida"
  82.                         },
  83.                         lenguaje:{
  84.                             required:"Campo obligatorio"
  85.                         }
  86.                     },
  87.                     submitHandler:function(){
  88.                         alert("Los datos han sido enviados");
  89.                     }/*, success: function(label) {
  90.                         if (usuarioValido){
  91.                             label.addClass('valid').text("Usuario disponible");
  92.                         }
  93.                     }*/
  94.  
  95.                 })
  96.             })
  97.         </script>
  98.     </head>
  99.     <body>
  100.         <fieldset>
  101.             <legend>Ingreso de usuario</legend>
  102.             <form id="registro" name="registro" action="">
  103.                 <div>
  104.                     <label class="campo">Usuario:</label>
  105.                     <input type="text" id="usuario" miRegla="" name="usuario" />
  106.                 </div>
  107.                 <div>
  108.                     <label class="campo">Contraseña:</label>
  109.                     <input type="text" id="pass" name="pass" />
  110.                 </div>
  111.                 <div>
  112.                     <label class="campo">Repetir:</label>
  113.                     <input type="text" id="pass2" name="pass2" />
  114.                 </div>
  115.                 <div>
  116.                     <label class="campo">Email:</label>
  117.                     <input type="text" id="email" name="email" />
  118.                 </div>
  119.                 <div>
  120.                     <label class="campo">Sitio web:</label>
  121.                     <input type="text" id="sitioweb" name="sitioweb" />
  122.                 </div>
  123.                 <div>
  124.                     <label class="campo">Lenguaje:</label>
  125.                     <select id="lenguaje" name="lenguaje">
  126.                         <option selected="selected" value="">Selecione un lenguaje</option>
  127.                         <option value="1">PHP</option>
  128.                         <option value="2">JAVA</option>
  129.                         <option value="3">ASP.NET</option>
  130.                     </select>
  131.                 </div>
  132.                 <input type="submit" value="Registrar" />
  133.             </form>
  134.         </fieldset>
  135.     </body>
  136. </html>

Muchas gracias de antemano!
  #9 (permalink)  
Antiguo 30/09/2010, 13:08
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

tenes tu regla de validacion

acá
Código Javascript:
Ver original
  1. rules:{
  2.                             usuario:{
  3.                                 required:true,
  4.                                 regex:"^[a-zA-Z0-9_]+$",
  5.                                 miRegla:"comprobar.php"
  6.                             },

y acá

Código HTML:
Ver original
  1. <div>
  2.                     <label class="campo">Usuario:</label>
  3.                     <input type="text" id="usuario" miRegla="" name="usuario" />
  4.                 </div>

o uno o lo otro

y acá estas tratando de mostrar un mensaje de error para la regla 'remote' que ni indicaste como validación
Código Javascript:
Ver original
  1. usuario:{
  2.                             required:"Campo obligatorio",
  3.                             remote: jQuery.validator.format("El usuario {0} ya existe.")
  4.                         },
  #10 (permalink)  
Antiguo 30/09/2010, 13:10
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

Cita:
Iniciado por Dany_s Ver Mensaje
tenes tu regla de validacion

acá
Código Javascript:
Ver original
  1. rules:{
  2.                             usuario:{
  3.                                 required:true,
  4.                                 regex:"^[a-zA-Z0-9_]+$",
  5.                                 miRegla:"comprobar.php"
  6.                             },

y acá

Código HTML:
Ver original
  1. <div>
  2.                     <label class="campo">Usuario:</label>
  3.                     <input type="text" id="usuario" miRegla="" name="usuario" />
  4.                 </div>

o uno o lo otro

y acá estas tratando de mostrar un mensaje de error para la regla 'remote' que ni indicaste como validación
Código Javascript:
Ver original
  1. usuario:{
  2.                             required:"Campo obligatorio",
  3.                             remote: jQuery.validator.format("El usuario {0} ya existe.")
  4.                         },
vas a usar tu propia regla "miRegla" y usar el método ajax o "remote" que ya hace la petición?
  #11 (permalink)  
Antiguo 30/09/2010, 13:48
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Respuesta: Problema al validar nick con jquery.validate()

Cita:
Iniciado por Dany_s Ver Mensaje
vas a usar tu propia regla "miRegla" y usar el método ajax o "remote" que ya hace la petición?
Pues en teoría el que me permita poder mostrar el mensaje de "Usuario disponible" o "Usuario ocupado".

Cuál de los dos me permite y cómo muestro uno u otro mensaje sin afectar al resto de campos?

Gracias nuevamente
  #12 (permalink)  
Antiguo 24/11/2010, 06:16
 
Fecha de Ingreso: octubre-2004
Ubicación: San Rafael - Mendoza
Mensajes: 13
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: Problema al validar nick con jquery.validate()

Cita:
Iniciado por Dany_s Ver Mensaje
vas a usar tu propia regla "miRegla" y usar el método ajax o "remote" que ya hace la petición?
Dany, tengo un problema similar, pero pese a que le he dado vueltas no consigo que funcione, es posible que me ayudes, tengo un registro de articulos hecho en php+mysql pero soy nuevo en jquery.
La idea es que cuando el usuario ingreso un codigo de articulo controlar en la base que no exista pero consultando grupo, subgrupo y codigo de articulo, la idea es la siguiente:
Código:
<form action="javascript: fn_agregar();" method="post" id="frm_art">
<div>Grupo:
  <select name="idg" id="idg" class="required" onchange="cargar_subg()">
<option value=""></option>
</select>
</div>
<div>Subgrupo:
<select name="idsubg" id="idsubg" class="required">
<option value="">Seleccione grupo</option>
</select></div>
<div>Codigo Articulo:<input name="codart" type="text" id="codart" size="11" class="required" /></div>
<div><input name="agregar" type="submit" value="Agregar" /></div>
</form>
<script language="javascript" type="text/javascript">
    $(document).ready(function(){
        var bandera;
$.validator.addMethod("valida_art",function(value,element){
            $.ajax({
                type: "GET",
                url: "art/ajax_verificar_codart.php",
                data: "codart="+value+"&idg="+$("#idg").val()+"&idsubg="+$("#idsubg").val(),
                success: function(disponible){
                    if(disponible == 'true'){
                        alert("dis: "+disponible);
                        bandera = true;
                        return bandera;
                    }else{
                        alert("dis: "+disponible);
                        bandera = false;
                        return bandera;
                    }
                }
            });
});
        $("#frm_art").validate({
            rules:{
                codart:{
                    required: true,
                    valida_art: true,
                }
            },
            messages: {
                codart: {
                    required: "Debe ingresar codigo",
                    valida_art: "Codigo ya Existe"
                }
            },
            onkeyup: false,
            submitHandler: function(form) {
                var respuesta = confirm('\xBFDesea agregar el articulo?')
                if (respuesta){
                    form.submit();
                }
            }
        });
    });
y el php
Código PHP:
$codart $_GET['codart'];
    
$ca mysql_query("SELECT * FROM articulos WHERE idg='".$_GET['idg']."' AND idsubg='".$_GET['idsubg']."' AND codart='$codart'");
    
$num_rs_ca mysql_num_rows($ca);
    if(
$num_rs_ca == 0){
        echo 
"true";
    }else{
        echo 
"false";
    } 
Lo logrado hasta ahora es:
= filtrar los subgrupos en funcion al grupo que se seleccione. Que el control que hace php funcione.
NO LOGRO que el validate me responda bien en funcion al codigo existente.

Desde ya te agradezco la ayuda que me puedas dar. Saludos.
  #13 (permalink)  
Antiguo 24/11/2010, 17:28
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

tenés que retornar verdadero o falso en la función de callback del método "addMethod" y no en la función del callback del success
  #14 (permalink)  
Antiguo 24/11/2010, 19:01
 
Fecha de Ingreso: octubre-2004
Ubicación: San Rafael - Mendoza
Mensajes: 13
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: Problema al validar nick con jquery.validate()

Gracias por tu pronta respuesta Dany_s, el tema es que probe antes de hacerlo como me decis y ver con un alert como se comportaba pero me daba error ya que ejecutaba el return del bandera y luego el success, lo habia echo asi:
Código:
$(document).ready(function(){
  var bandera;
$.validator.addMethod("valida_art",function(value,element){
            $.ajax({
                type: "GET",
                url: "art/ajax_verificar_codart.php",
                data: "codart="+value+"&idg="+$("#idg").val()+"&idsubg="+$("#idsubg").val(),
                success: function(disponible){
                    if(disponible == 'true'){
                        bandera = true;
                    }else{
                        bandera = false;
                    }
                }
            });
            alert(bandera);
            return bandera;
});
a la primera validacion me daba undefined, luego en las posteriores pruebas siempre el alert me tomaba la validacion anterior, es decir, si en la busqueda me daba false y volvia a buscar y me daba true, la primera me deba undefined y la segunda false y si probaba una tercera true, no se si soy claro, como que en cada validación recuperaba siempre la condición anterior.
1º undefined
2º condicion de la 1º
3º condicion de la 2º
etc.
Como debería ser, ya que como te comenté antes, me doy maña con php y mysql pero me faltan horas de teclado con jquery.
Desde ya te agradezco tu tiempo
  #15 (permalink)  
Antiguo 24/11/2010, 20:20
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Problema al validar nick con jquery.validate()

pasa que hace una llamada asincrónica, podes usar el parámetro async:false pero da una sensación de bloqueo si tarda mucho

porque no usas remote?
fijate la doc http://docs.jquery.com/Plugins/Valid...remote#options

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>Formulario Validation</title>
  4.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  5.         <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
  6.         <script type="text/javascript">
  7.             $(document).ready(function(){
  8.  
  9.  
  10.                 $("#form").validate({
  11.                     rules:{
  12.                             codart:{
  13.                               remote: {
  14.                                 url: "x.php",
  15.                                 type: "post",
  16.                                 data: {
  17.                                   idg: function() {
  18.                                     return $("#idg").val();
  19.                                   },
  20.                                   idsubg: function() {
  21.                                     return $("#idsubg").val();
  22.                                   }
  23.                                 }
  24.                               }
  25.                             }
  26.                     },
  27.                     messages:{
  28.                         codart:{
  29.                             remote:"mensaje"
  30.                         }
  31.                     },
  32.                     submitHandler:function(){
  33.                         alert("Los datos han sido enviados");
  34.                     }
  35.                 })
  36.             })
  37.         </script>
  38.     </head>
  39.     <body>
  40.         <fieldset>
  41.             <legend>Ingreso de usuario</legend>
  42.             <form id="form" name="form" action="">
  43.                 <div>
  44.                     <label class="codart">Código:</label>
  45.                     <input type="text" id="codart" name="codart" />
  46.                 </div>
  47.                 <input type="submit" value="Registrar" />
  48.             </form>
  49.         </fieldset>
  50.     </body>
  51. </html>
  #16 (permalink)  
Antiguo 25/11/2010, 20:04
 
Fecha de Ingreso: octubre-2004
Ubicación: San Rafael - Mendoza
Mensajes: 13
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: Problema al validar nick con jquery.validate()

Cita:
Iniciado por Dany_s Ver Mensaje
pasa que hace una llamada asincrónica, podes usar el parámetro async:false pero da una sensación de bloqueo si tarda mucho

porque no usas remote?
fijate la doc [URL]http://docs.jquery.com/Plugins/Validation/Methods/remote#options[/URL]

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>Formulario Validation</title>
  4.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  5.         <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
  6.         <script type="text/javascript">
  7.             $(document).ready(function(){
  8.  
  9.  
  10.                 $("#form").validate({
  11.                     rules:{
  12.                             codart:{
  13.                               remote: {
  14.                                 url: "x.php",
  15.                                 type: "post",
  16.                                 data: {
  17.                                   idg: function() {
  18.                                     return $("#idg").val();
  19.                                   },
  20.                                   idsubg: function() {
  21.                                     return $("#idsubg").val();
  22.                                   }
  23.                                 }
  24.                               }
  25.                             }
  26.                     },
  27.                     messages:{
  28.                         codart:{
  29.                             remote:"mensaje"
  30.                         }
  31.                     },
  32.                     submitHandler:function(){
  33.                         alert("Los datos han sido enviados");
  34.                     }
  35.                 })
  36.             })
  37.         </script>
  38.     </head>
  39.     <body>
  40.         <fieldset>
  41.             <legend>Ingreso de usuario</legend>
  42.             <form id="form" name="form" action="">
  43.                 <div>
  44.                     <label class="codart">Código:</label>
  45.                     <input type="text" id="codart" name="codart" />
  46.                 </div>
  47.                 <input type="submit" value="Registrar" />
  48.             </form>
  49.         </fieldset>
  50.     </body>
  51. </html>
Dany_s sos un maestro, me volvi loco intentando sacarlo, perfecto, funciono de 10. Te agradezco infinitamente la desburrada. Un abrazo!!
  #17 (permalink)  
Antiguo 30/01/2012, 14:22
 
Fecha de Ingreso: diciembre-2011
Mensajes: 13
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema al validar nick con jquery.validate()

hola Dany_s me colaboras plis
estoy brondando de esta forma
prueba.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Formulario Validation</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var usuarioValido;
$.validator.addMethod("regex",function(value,eleme nt,regexp){
var re= new RegExp(regexp);
return this.optional(element) || re.test(value);
},"Solo caracteres alfanumericos");

/*$.validator.addMethod("comprobarUsuario",function (value,element, url){
$.ajax({
type: "GET",
url: url,
data: "usuario="+value,
success: function(disponible){
usuarioValido = (disponible == 'true')?true:false;
}
});
return usuarioValido;
},"Usuario ocupado");*/
$.validator.addMethod("miRegla",function(value,ele ment,valorMiRegla){
$.ajax({
type: "GET",
url: valorMiRegla,
data: "usuario="+value,
success: function(disponible){
if (disponible){
return true;
}else{
return false;
}
}
});
},"Usuario ocupado");


$("#registro").validate({
rules:{
usuario:{
required:true,
regex:"^[a-zA-Z0-9_]+$",
miRegla:"comprobar.php"
},
pass:{
required:true
},
pass2:{
equalTo:"#pass"
},
email:{
email:true,
required:true
},
sitioweb:{
url:true
},
lenguaje:{
required:true
}
},
messages:{
usuario:{
required:"Campo obligatorio",
remote: jQuery.validator.format("El usuario {0} ya existe.")
},
pass:{
required:"Campo obligatorio"
},
pass2:{
equalTo:"La contraseña no es igual"
},
email:{
email:"El email no es valido",
required:"Campo es obligatorio"
},
sitioweb:{
url:"La url no es valida"
},
lenguaje:{
required:"Campo obligatorio"
}
},
submitHandler:function(){
alert("Los datos han sido enviados");
}/*, success: function(label) {
if (usuarioValido){
label.addClass('valid').text("Usuario disponible");
}
}*/

})
})
</script>
</head>
<body>
<fieldset>
<legend>Ingreso de usuario</legend>
<form id="registro" name="registro" action="">
<div>
<label class="campo">Usuario:</label>
<input type="text" id="usuario" miRegla="" name="usuario" />
</div>
<div>
<label class="campo">Contraseña:</label>
<input type="text" id="pass" name="pass" />
</div>
<div>
<label class="campo">Repetir:</label>
<input type="text" id="pass2" name="pass2" />
</div>
<div>
<label class="campo">Email:</label>
<input type="text" id="email" name="email" />
</div>
<div>
<label class="campo">Sitio web:</label>
<input type="text" id="sitioweb" name="sitioweb" />
</div>
<div>
<label class="campo">Lenguaje:</label>
<select id="lenguaje" name="lenguaje">
<option selected="selected" value="">Selecione un lenguaje</option>
<option value="1">PHP</option>
<option value="2">JAVA</option>
<option value="3">ASP.NET</option>
</select>
</div>
<input type="submit" value="Registrar" />
</form>
</fieldset>
</body>
</html>
comprobar.php
<?php
$formUsuario=$_GET['usuario'];
$conexion = mysql_connect("localhost", "root", "");
mysql_select_db("usuarios");
$sql = "SELECT id from registro where nombre='$formUsuario'";
$resultado = mysql_query($sql, $conexion);
if(mysql_fetch_assoc($resultado)){
echo "false";
}else{
echo "true";
}
?>

Necesito q consulte en la base de datos y me diga si el email ya esta registrado o no y hacer el registro si el usuario no existe gracias he intentado pero no he podido
  #18 (permalink)  
Antiguo 12/10/2012, 08:37
 
Fecha de Ingreso: agosto-2006
Ubicación: Girardot
Mensajes: 27
Antigüedad: 18 años, 4 meses
Puntos: 2
De acuerdo Respuesta: Problema al validar nick con jquery.validate()

Hola a todos, leyendo sus problemas les comparto uan solución simple:

Regla de validacion dentro del script
$("#id_formulario").validate({
rules: {
....
usuario_txt: {
required: true,
rangelength: [3, 15],
required: "comprobar"
},
Luego un mensaje de texto por si ya existe

messages: {
usuario_txt: {
required: "Este campo ya existe!."
}
}


Y finaliza con la validación del usuario

comprobar.php (comprueba si el usuario existe en la B.D)
<?php
include "conexion.php";
#Recoge el campo del formulario a comprobar
$parametro = $_GET['usuario_txt'];
#SQL a la tabla
$sql = "SELECT * FROM usuarios WHERE login = '$parametro'";
#Manipulación de Errores (Informe de Errores, Emisión de exepciones)
$lnk->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$qry = $lnk->prepare($sql);
$qry->execute();
$reg = $qry->fetch(PDO::FETCH_OBJ);

if($reg->login){
echo "false";
}else{
echo "true";
}

$lnk = null;
?>

Etiquetas: nick
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 02:28.