SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: DigitalUser en Viernes 6 de Abril de 2007, 21:03

Título: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Viernes 6 de Abril de 2007, 21:03
Tengo un Formulario en HTML dentro de un archivo .php

Un campo de ellos es verificado por otro archivo php, cuando se envía el formulario.

Es posible que realice la consulta sin tener que enviar el formulario, por ejemplo al salir del campo.

Supongamos que tengo el siguiente archivo:

Código: Text
  1. <html>
  2. <head>
  3. <?php
  4. function comprobar()
  5. {
  6.     $conexion_db_01=mysql_connect("localhost", "clientes","");
  7.     mysql_select_db("presupuestos",$conexion_db_01);
  8.     $V2RU_NombUsua = $_POST[campo1];
  9.     $consulta1 = "SELECT * FROM clientes WHERE NombUsua='$V2RU_NombUsua'";
  10.     $ejecutarconsulta1 = mysql_query($consulta1,conexion_db_01);
  11.     if (mysql_num_rows($ejecutarconsulta1)!=0)
  12.     {
  13.     echo "ok";
  14.     }
  15.     else
  16.     {
  17.     echo "no";
  18.     }
  19. }
  20.  
  21.  ?>
  22. </head>
  23.  
  24. <body>
  25. <form name="f1" method="post">
  26. <input type="text" onblur="comprobar();" name="campo1" />
  27. </form>
  28. </body>
  29. </html>
  30.  

lo que quiero que me funcione esto, que no se si esta bien expresado

Gracias
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Viernes 6 de Abril de 2007, 21:24
Hola DigitalUser.-

Si entiendo lo que querés hacer pero no es correcto. no te olvides que php está solo en el servidor y que el evento onblur ocurre en el cliente. Para este caso deberías utilizar AJAX.-

Utiliza el buscador del foro (http://foros.solocodigo.com/index.php?act=Search&CODE=show&searchid=f780ba5423113afc04e30d86a851bd60&search_in=posts&result_type=topics&highlite=ajax).

Saludos :beer:
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Viernes 6 de Abril de 2007, 22:13
Gracias por responder, pero no encuentro nada en el buscador que solucione mi problema.

he mirado un poco Ajax, pero, no se me ocurre la idea para resolver mi problema.

No se como decirle, que al salir del campo realice una consulta en MYSQL, y devuelva una respuesta, sin tener que enviar el formulario.

me se ha ocurrido la solución a la inversa, y es que al cargar la página cargue en un array todos los usuarios, y luego mediante un bucle realice la comprobación, el único inconveniente que veo es que si tengo mucho registros, hará mi página un poco lenta.

Creo que si nadie me da otra alternativa aplicare este ultimo caso que creo que es lo más correcto, aunque no me quede conforme, ya se me ocurrirá otra alternativa


tengo una duda, cuando le digo onblur, a un campo este es capaz de ejecutar una function de PHP, o solo JAVA.

gracias
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Sábado 7 de Abril de 2007, 00:51
Citar
tengo una duda, cuando le digo onblur, a un campo este es capaz de ejecutar una function de PHP, o solo JAVA.
Solo JavaScript.

Dame un tiempito. Prometo ayudarte pero ahora se me hace imposible.

Un saludo :beer:
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: F_Tanori en Sábado 7 de Abril de 2007, 03:17
aqui hay algo que te puede ayudar

solo sustituye la consulta por la que tu deseas, y los datos de acceso a la base de datos



Saludos
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Sábado 7 de Abril de 2007, 06:49
Muy buen ejemplo Efe Te.
DigitalUser, eso debería servirte para empezar. Cualquier duda postea de nuevo.-
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Sábado 7 de Abril de 2007, 13:10
Millones de gracias F_Tanori y Angel_K_ido  :kicking:  :kicking:  :kicking:

Es junto lo que necesitaba:

La parte más interesante es como ejecutar un script de php desde un evento:
onchange="comprobar('comprobador.php?buscar='+this.value);

esto del Ajax es maravilloso, creo que empezare un curso este verano.

ya ante cualquier duda, buscare en el buscador, y si no lo encuentro, os preguntare.

Gracias  :P  :P  :P
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Sábado 7 de Abril de 2007, 13:28
Citar
esto del Ajax es maravilloso
:P Si. Muy útil realmente.-
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Domingo 8 de Abril de 2007, 19:49
Hola. El código funciona bastante bien.

Avisa de que el registro no existe,  
pero cuando el registro existe, también dice que no existe. en vez de decir que existe.

He mirado un poco el código, pero todavía no lo entiendo completamente.

Le agradecería su ayuda

Código: Text
  1.    
  2. if(ajax.status==200)
  3.   {
  4.     encontrado= ajax.responseText>0;
  5.       if (!encontrado)
  6.  

Siempre la variable encontrado de devuelve un false

o puede ser también un problema en la consulta que siempre devuelve cero, o no devuelva nada.

porque he hecho que devolviera el valor 1

Código: Text
  1.     $encontrado="1";
  2.     //$encontrado=mysql_fetch_row($rs);
  3.  
  4.  

y sigue en el mismo problema, siempre dice que el registro no existe

Gracias
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Domingo 8 de Abril de 2007, 20:58
A simple vista me parece que estás utilizando variables distintas...

Tu código
Código: Text
  1. $encontrado
  2.  
el de F T
Código: Text
  1. encontrado
  2.  
(Sin $)

Fijate en eso.-

 :comp:

[dohtml]<hr>[/dohtml]

Este mini tutorial básico de AJAX (http://www.tufuncion.com/tutorial_basico_ajax) te puede servir de algo  :smartass:
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Domingo 8 de Abril de 2007, 21:51
Gracias por el tutorial.
Lo mirare detenidamente
Respecto a "encontrado", no lo he tocado, en el archivo original viene así.

el del $ es el de la consulta de PHP
el sin Dolar es el del script de AJAX

he probado hacer muchos cambios, pero no doy con el el clavo.

Gracias!
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: F_Tanori en Domingo 8 de Abril de 2007, 21:53
En la pagina Comprobador PHP se hace lo siguiente:

Código: Text
  1.  
  2.    &#036;buscar=&#036;_GET['buscar'];
  3.    &#036;sSQL=&#34;SELECT count(*) FROM clientes WHERE ap_pat='&#036;buscar'&#34;;
  4.     &#036;rs = mysql_db_query(&#036;bd,&#036;sSQL);
  5.    
  6.     &#036;encontrado=&#34;0&#34;;
  7.     &#036;encontrado=mysql_fetch_row(&#036;rs);
  8.     echo &#036;encontrado[0];
  9.  
  10.  
  11.  


Tomar el valor que viene como parametro en la variable buscar para realizar una consulta se genera la consulta
en una variable ($sSQL) y se Ejecuta (mysql_db_query...) la consulta se hace con Count(Funcion de SQL) y nos devuelve
la cantidad de veces que aparece la variable buscada ($buscar) en esa tabla (clientes) sera solo un registro y un campo
(count(*))tomamos el valor de ese registro ($encontrado=mysql_fetch_row($rs)) ahora nuestra variable $encontrado es
un arreglo que contiene el registro, pero como solo es uno y un solo campo :P, tomamos la posision inicial que es 0
($encontrado[0]) y la mandamos a imprimir en la pagina (echo $encontrado[0])

Se imprimira el valor de Count, supongamos que buscamos el cliente con apellido 'Tánori' :P y este apellido existe
en nuestra tabla una vez Count devuelve 1 que sera el valor que imprimiremos al final (echo $encontrado[0])

Al devolver los resultados a la pagina del cliennte desde donde se mando llamar (comprobador.php), osea desde
onchange="comprobar('comprobador.php?buscar='+this.value) (javascript)

la funcion comprobar estaria recibiendo ajax.responseText=1 porque fue lo que imprimimos en la página desde php(echo $encontrado[0])

Funcion comprobar
Código: Text
  1.  
  2. ....
  3.   if(ajax.status==200)
  4.      {
  5.         encontrado= ajax.responseText&#62;0;
  6.         SINO=&#34; &#34;;
  7.  
  8.         if (!encontrado)
  9.          {
  10.      SINO=&#34; no &#34;;
  11.          }
  12.  
  13.          alert(&#34;El registro&#34;+ SINO +&#34;existe&#34;);
  14.           }
  15. ....
  16.  
  17.  

Código: Text
  1.  
  2. ajax.status==200
  3.  
  4.  
Indica que si se cargo correctamente la pagina y esta Lista para devolver los resultados

Código: Text
  1.  
  2. ajax.responseText
  3.  
  4.  
Son los datos recibidos que arroja la pagina que se mando llamar (en este caso comprobador PHP)

encontrado= ajax.responseText>0;
Como responseText en este ejemplo nos devuelve 1 encontrado es verdadero al resolverse ((ajax.responseText>0)=true)

Código: Text
  1.  
  2. SINO=&#34; &#34;;
  3.  
  4.  

Es una bandera para mostrar la palabra no :P

Código: Text
  1.  
  2. if (!encontrado)
  3. {
  4.  SINO=&#34; no &#34;;
  5. }
  6.  
  7.  

!encontrado es igual que hacer esto encontrado==false en este caso solamente es una negación de la condición, operador ! (NOT (http://docencia.udea.edu.co/SistemasDiscretos/contenido/tablas_verdad.html))

Indica que si no es encontrado coloca la variable SINO=" no " que sera usada en el mensaje

Código: Text
  1.  
  2.  alert(&#34;El registro&#34;+ SINO +&#34;existe&#34;);
  3.  
  4.  

Sino esta vacio el mensaje que se muestra es "El registro existe" en caso contario "El registro no existe"
si lo quieres es que no se muestre el mensaje cuando el registro no existe y te permita continuar puedes hacer esto

Código: Text
  1.  
  2. ....
  3.   if(ajax.status==200)
  4.      {
  5.         encontrado= ajax.responseText&#62;0;
  6.  
  7.         if (encontrado)
  8.          {
  9.       alert(&#34;El registro ya existe,por favor intente de nuevo&#34;);
  10.       return false;
  11.          }
  12.  
  13.     return true;
  14.          
  15.           }
  16. ....
  17.  
  18.  

Saludos, espero haberte confundido :P Ayudado


Saludos
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Domingo 8 de Abril de 2007, 22:18
Cita de: "DigitalUser"
Gracias por el tutorial.
Lo mirare detenidamente
Respecto a "encontrado", no lo he tocado, en el archivo original viene así
Sí, tenés razón, pero lo acabo de probar y me funciona perfecto.-

Lo único que hice fue cambiar las variables
Código: Text
  1. &#036;bd=&#34;pruebas&#34;;
  2.   &#036;host=&#34;localhost&#34;;
  3.   &#036;user=&#34;root&#34;;
  4.   &#036;password=&#34;&#34;;
  5.  
y la consulta SQL.
Pero si vos hiciste esto
Código: Text
  1. &#036;encontrado=&#34;1&#34;;
  2.    //&#036;encontrado=mysql_fetch_row(&#036;rs);
  3.  
y sigue diciendo que no existe el problema no debe ser ese.-

Podrías intentar con esta función:
Código: Text
  1. function NuevoAjax(){
  2.   var ajaxs = [&#34;Msxml2.XMLHTTP&#34;,&#34;Msxml2.XMLHTTP.4.0&#34;,&#34;Msxml2.XMLH TTP.5.0&#34;,&#34;Msxml2.XMLHTTP.3.0&#34;,&#34;Microsoft.XMLHTTP&#34;];
  3.   var ajax = false;
  4.   for(var i=0&#59; !ajax && i&#60;ajaxs.length&#59; i++){
  5.     try{ ajax = new ActiveXObject(ajaxs); }
  6.     catch(e) { ajax = false; }
  7.   }
  8.   if(!ajax && typeof XMLHttpRequest!='undefined') {
  9.     ajax = new XMLHttpRequest();
  10.   }
  11.   return ajax;
  12. }
  13.  
en vez de la que estás usando pero tampoco creo que sea eso.-
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Domingo 8 de Abril de 2007, 22:35
Los cambios que yo he realizado son los siguientes

Código: Text
  1.  
  2.   &#036;bd=&#34;presupuestos&#34;;
  3.   &#036;host=&#34;localhost&#34;;
  4.   &#036;user=&#34;clientes&#34;;
  5.   &#036;password=&#34;&#34;;
  6.  
  7.  
Código: Text
  1.    &#036;sSQL=&#34;SELECT count(*) FROM clientes WHERE NombClie='&#036;buscar'&#34;;
  2.  
  3.  


he probado sustituir la función de NuevoAjax, pero estamos en las misma.

Gracias por todos.

La explicación esta de lujo, al igual que el interés por ayudarme, muchas gracias.
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Domingo 8 de Abril de 2007, 22:46
La una variable en la sentencia SQL,

Código: Text
  1.    &#036;sSQL=&#34;SELECT count(*) FROM clientes WHERE NombUsua='&#036;buscar'&#34;;
  2.  
  3.  

yo lo pondría mejor así, para evitar cualquier fallo.

Código: Text
  1.    &#036;sSQL=&#34;SELECT count(*) FROM clientes WHERE NombUsua='&#34;.&#036;buscar.&#34;'&#34;;
  2.  
  3.  

aunque he probado el siguiente código para para ver los resultados

Código: Text
  1. &#60;?php
  2. &#036;buscar=&#34;ok&#34;;
  3.    &#036;sSQL1=&#34;SELECT count(*) FROM clientes WHERE NombUsua='&#036;buscar'&#34;;
  4.   echo &#036;sSQL1;
  5. echo &#34;&#60;br&#62;&#34;;
  6.    &#036;sSQL2=&#34;SELECT count(*) FROM clientes WHERE NombUsua='&#34;.&#036;buscar.&#34;'&#34;;
  7.   echo &#036;sSQL2;
  8. ?&#62;
  9.  

y obtengo el mismo resultado.
Entonces este último no tiene nada que ver.

Me vais a tener que perdonar si os vuelvo loco un poco, pero la verdad que no se porque no me funciona como debería.

Gracias nuevamente
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: F_Tanori en Domingo 8 de Abril de 2007, 23:40
Cita de: "DigitalUser"
y lo unico que no veo claro es:
$buscar=$_GET['buscar'];

toma el valor que hay en el campo buscar, porque no hay ningun campo que así se llame.

Hola :P $buscar no es ningun campo sino el valor que deseas buscar


Desde Cliente (JS)
se envia el valor capturado en el textbox (< input > this.value)

Código: Text
  1.  
  2.   onchange=&#34;comprobar('comprobador.php?buscar='+this.value);
  3.  
  4.  

con datos ejemplo
Código: Text
  1.  
  2.   onchange=&#34;comprobar('comprobador.php?buscar=Tanori');
  3.  
  4.  

//======================================
En el Server (PHP)

Código: Text
  1.  
  2. &#036;buscar=&#036;_GET['buscar'];
  3. &#036;sSQL=&#34;SELECT count(*) FROM clientes WHERE NombUsua='&#036;buscar'&#34;;
  4.  
  5.  

Resultado con datos

Código: Text
  1.  
  2. &#036;sSQL=&#34;SELECT count(*) FROM clientes WHERE NombUsua='Tanori'&#34;;
  3.  
  4.  

Escritorio

$rs = mysql_db_query("presupuestos",SELECT count(*) FROM clientes WHERE NombUsua='Tanori');

$encontrado="0";
$encontrado=mysql_fetch_row($rs);

// Como el usuario no existe imprime 0 (valor del count :P )

echo $encontrado[0]; // osea echo 0;

Cita de: "DigitalUser"
yo lo pondría mejor así, para evitar cualquier fallo.

No falla :P solo si utilizas comillas simples

Código: Text
  1. &#036;num=5;
  2. &#036;variable='esto es el valor del num = &#036;num';
  3.  

resultado
esto es el valor del num = $num

pero si usas dobles puedes meter una variable dentro de una cadena

Código: Text
  1.  
  2. &#036;num=5;
  3. &#036;variable=&#34;esto es el valor del num = &#036;num&#34;;
  4.  

resultado
esto es el valor del num = 5

Código: Text
  1.  
  2. &#036;num=5;
  3. &#036;variable=&#34;esto es el valor del num = '&#036;num'&#34;;
  4.  

resultado
esto es el valor del num = '5'

Saludos
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Lunes 9 de Abril de 2007, 16:54
Hola.

No me he dado cuenta de su resùesta antes, porque no vi la segunda página, hasta ahora.

Lo de $buscar=$_GET['buscar']; me di cuenta cuando revise nuevamente el código  y edite el mensaje para eliminar la duda. pero tarde en darme cuenta. y no me di cuenta que respondió al mensaje.

Muchas gracias por toda la ayuda, pero me rindo, no me funciona, he cambiado casi todas las cosas que he podido, he revisado los campos de las Base de Datos, he probado muchas cosas, pero el código siempre me devuelve false.

buscare otra alternativa que simule este caso.

Gracias nuevamente.

*PD Gracias por la explicaciones tan detalladas, y por lo de las comillas, que no tenia muy claro.
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Lunes 9 de Abril de 2007, 20:16
Yo te diría que no busques otra forma porque esta es la mejor.

A ver, simplifiquemos las cosas. Fuera DBs...

Decime si esto te funciona:
Form.php
Código: Text
  1. &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;
  2.   &#60;head&#62;
  3.     &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=iso-8859-1&#34; /&#62;  
  4.  
  5.     &#60;title&#62;&#60;/title&#62;  
  6.    
  7.     &#60;script language=&#34;JavaScript&#34; type=&#34;text/javascript&#34;&#62;
  8.  
  9.       function NuevoAjax(){
  10.         var xmlhttp=false;
  11.  
  12.              try{
  13.                   xmlhttp = new ActiveXObject(&#34;Msxml2.XMLHTTP&#34;);
  14.             }catch(e){
  15.                 try{
  16.                        xmlhttp = new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);
  17.                   }catch(E){
  18.                        xmlhttp = false;
  19.                 }
  20.             }
  21.  
  22.  
  23.             if(!xmlhttp && typeof XMLHttpRequest!='undefined') {
  24.                   xmlhttp = new XMLHttpRequest();
  25.             }
  26.  
  27.             return xmlhttp;
  28.  
  29.       }
  30.  
  31.       //==========================================================
  32.  
  33.       function comprobar(url){
  34.  
  35.         var encontrado
  36.  
  37.             ajax=NuevoAjax();
  38.  
  39.             ajax.open(&#34;GET&#34;, url,true);
  40.  
  41.             ajax.onreadystatechange=function(){
  42.  
  43.                   if(ajax.readyState==1){
  44.  
  45.                          //un preload por si es necesario
  46.  
  47.                          //contenido.innerHTML =&#34;Cargando....&#34;;
  48.  
  49.                      }
  50.  
  51.            else if(ajax.readyState==4){
  52.  
  53.                           if(ajax.status==200){
  54.  
  55.                  alert(ajax.responseText);
  56.  
  57.                           }
  58.  
  59.                    }
  60.  
  61.             }
  62.  
  63.             ajax.send(null);
  64.  
  65.        }
  66.  
  67.        //==========================================================
  68.       &#60;/script&#62;
  69.   &#60;/head&#62;
  70.   &#60;body&#62;  
  71.     &#60;form method=&#34;POST&#34;&#62;
  72.       &#60;input type=&#34;text&#34; onchange=&#34;comprobar('comprobador.php?buscar='+this.value);&#34; name=&#34;campo1&#34; /&#62;
  73.       &#60;input name=&#34;campo2&#34; /&#62;
  74.     &#60;/form&#62;
  75.   &#60;/body&#62;
  76. &#60;/html&#62;
  77.  

Comprobador.php
Código: Text
  1. &#60;?
  2.    &#036;buscar=&#036;_GET['buscar'];
  3.  
  4.   if(&#036;buscar==&#34;Teo&#34; || &#036;buscar==&#34;Angel&#34;) echo &#34;Se ha encontrado el nombre &#34; . &#036;buscar;
  5.   else echo &#34;El nombre &#34; . &#036;buscar . &#34; no existe&#34;;
  6. ?&#62;
  7.  
Ingresando "Teo" o "Angel" (Respetando Mayúsculas y minúsculas) en el primer textbox debería darte el mensaje "Se ha encontrado el nombre...", para cualquier otro "El nombre xxxxx no existe"

Probalo
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: DigitalUser en Miércoles 11 de Abril de 2007, 02:14
Hola Angel_K_ido  :P

Este código si que funciona Perfectamente.

Solo da Fallo Con el EasyPHP, que sale en el alert la sentencia SQL.

Ahora a partir de este, voy a intentar, haber si no me da fallos.

Gracias
Título: Re: Verificar Datos De Un Campo Sin Enviarlos
Publicado por: Mollense en Miércoles 11 de Abril de 2007, 07:14
Cita de: "DigitalUser"
Ahora a partir de este, voy a intentar, haber si no me da fallos.
Me alegro que no des el brazo a torcer...

Cualquier cosa...acá estamos.