Foros del Web » Programando para Internet » Javascript » Frameworks JS »

hacer consulta al escribir en un input

Estas en el tema de hacer consulta al escribir en un input en el foro de Frameworks JS en Foros del Web. No se si se puede hacer. Estoy haciendo un buscador de usuarios con sus cajitas de nombre apellido etc...Siempre lo he echo rellenando los input ...
  #1 (permalink)  
Antiguo 27/10/2008, 06:56
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 16 años, 1 mes
Puntos: 5
hacer consulta al escribir en un input

No se si se puede hacer. Estoy haciendo un buscador de usuarios con sus cajitas de nombre apellido etc...Siempre lo he echo rellenando los input y dandole al botón de enviar para que realice la consulta en la base de datos.
Ahora lo que quiero es cambiar todo eso quitar el boton y hacerlo de tal manera que al escribir el nombre realice la consulta. sabeis como se puede hacer?
  #2 (permalink)  
Antiguo 27/10/2008, 08:39
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: hacer consulta al escribir en un input

lo que quieres hacer se puede, con el evento onkeypress y haciendo una pertición por medio de ajax al servidor. Pero ten en cuenta que realizará una consulta por cada tecla que rellenes en el formulario. No se si me explico

si introduces "maria" hará 5 consultas 1ª por "m", 2ª por "ma", 3ª por "mar",..,5ª por "maria".

el codigo sería algo asi:
BD:prueba
TABLA: usuarios
-nombre
-apellido
index.php
Código javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  2.    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6. <script type="text/javascript">
  7. function objetoAjax(){
  8.     var xmlhttp=false;
  9.     try {
  10.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  11.     } catch (e) {
  12.         try {
  13.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  14.         } catch (E) {
  15.             xmlhttp = false;
  16.     }
  17.     }
  18.  
  19.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  20.         xmlhttp = new XMLHttpRequest();
  21.     }
  22.     return xmlhttp;
  23. }
  24.  
  25. function detectkey(evt,obj) {
  26. keycode = (evt.keyCode==0) ? evt.which : evt.keyCode;
  27. if (keycode!=8) {
  28.     cadena=obj.value + String.fromCharCode(keycode);
  29.     pagina='filtra.php?cadena='+cadena;
  30. }else {
  31.     obj.value="";
  32.     pagina='filtra.php';
  33. }
  34.     divcontenido = document.getElementById('tabla_usuarios');
  35.     ajax=objetoAjax();
  36.     ajax.open("POST", pagina, true);
  37.     ajax.onreadystatechange=function() {
  38.       if (ajax.readyState==4) {
  39.         divcontenido.innerHTML = ajax.responseText
  40.       }
  41.     }
  42.     ajax.send(null);
  43. }
  44. </script>
  45. </head>
  46. <body>
  47.  
  48. <input type="text" name="nom" id="nom" value="" size="30" maxlength="30" onkeypress="detectkey(event,this)">
  49. <br />
  50. <div id="tabla_usuarios"></div>
  51. </body>
  52. </html>


filtra.php

Código php:
Ver original
  1. <?PHP
  2. if (isset($_REQUEST['cadena'])) {
  3.    $_REQUEST['cadena'];
  4.    $query="SELECT nombre,apellido FROM usuarios WHERE (nombre like 'cadena%')";
  5. }else $query="SELECT nombre,apellido FROM usuarios";
  6.  
  7.       $conexion = mysql_connect ($host, $usser, $pass)
  8.          or die ("No se puede conectar con el servidor");
  9.  
  10.       mysql_select_db ("prueba")
  11.          or die ("No se puede seleccionar la base de datos");
  12.      
  13.       $consulta=mysql_query($query,$conexion);
  14. ?>
  15. <TABLE>
  16. <TBODY>
  17. <TR>
  18. <TH>Nombre</TH>
  19. <TH>Apellido</TH>
  20. </TR>
  21. <?PHP
  22.       while($row = mysql_fetch_array($consulta)) {
  23.           echo "<TR>";
  24.           echo "<TD>".$row['nombre']."</TD>";
  25.           echo "<TD>".$row['apellido']."</TD>";
  26.           echo "</TR>";
  27.       }
  28. ?>
  29. </TBODY>
  30. </TABLE>


Pruebalo y me dices que lo he escrito pero no lo he ejecutado

Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #3 (permalink)  
Antiguo 27/10/2008, 08:53
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: hacer consulta al escribir en un input

sisisisi perfecto!! esto es lo que andaba buscando, fuciona de maravilla el codigo, muchisimas gracias matak

Aproposito dices:

"Pero ten en cuenta que realizará una consulta por cada tecla que rellenes en el formulario"

lo dices por algo en especial?, petara el servidor ? este buscador solo es para buscar los usuarios pero solo los admin podrán hacer uso de el..

Gracias tio.
  #4 (permalink)  
Antiguo 27/10/2008, 09:27
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: hacer consulta al escribir en un input

Simplemente para que lo supieras...

El servidor no creo que pete pero segun los usuarios que tengas etc, pues podria tardar un poco más y no se veria el efecto inmediato, ya que no es lo mismo buscar entre 1.000 que entre 10.000.000. Lo que supone para "maria" 5 consultas contra 10.000.000 registros cuando realmente solo se quiere hacer 1

saludos

Si os ha gustado aplaudan y gracias por escuchar.

Aver si eres tu kienme inaugurasel karma,jejej
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #5 (permalink)  
Antiguo 27/10/2008, 09:58
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: hacer consulta al escribir en un input

ajam.... entonces que me recomiendas para largo plazo ?, ponerlo con un botón mejor ?

:apla uso:
  #6 (permalink)  
Antiguo 27/10/2008, 11:48
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: hacer consulta al escribir en un input

La verdad es que asi queda bastante jefe,no??

Yo de ti lo dejaba asi de momento...

Si algun día tienes problemas cambia la funcion deteckey() por esta otra

Código javascript:
Ver original
  1. function detectkey(evt,obj) {
  2. keycode = (evt.keyCode==0) ? evt.which : evt.keyCode;
  3. if (keycode!=8) {
  4.   if (keycode==13) {
  5.     cadena=obj.value;
  6.     pagina='filtra.php?cadena='+cadena;
  7.     divcontenido = document.getElementById('tabla_usuarios');
  8.     ajax=objetoAjax();
  9.     ajax.open("POST", pagina, true);
  10.     ajax.onreadystatechange=function() {
  11.       if (ajax.readyState==4) {
  12.         divcontenido.innerHTML = ajax.responseText
  13.       }
  14.     }
  15.     ajax.send(null);
  16.   }
  17. }else {
  18.     obj.value="";
  19.     pagina='filtra.php';
  20.     divcontenido = document.getElementById('tabla_usuarios');
  21.     ajax=objetoAjax();
  22.     ajax.open("POST", pagina, true);
  23.     ajax.onreadystatechange=function() {
  24.       if (ajax.readyState==4) {
  25.         divcontenido.innerHTML = ajax.responseText
  26.       }
  27.     }
  28.     ajax.send(null);
  29. }
  30. }

En este caso te dejaría insertar caracteres hasta que pulsaras ENTER. Entonces realizaría la consulta
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #7 (permalink)  
Antiguo 27/10/2008, 13:21
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: hacer consulta al escribir en un input

Es una alternativa más ...me gusta....Lo que voy hacer es dejar esto para los nombres como busqueda rapida. y para apellidos, telefono y demás poner un botón que ya son más caracteres.

que te parece mi opción?

Esta genial esta función ehhh como mola!.
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.
Tema Cerrado




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