Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Combinar consultas dinámicas <Fácil>

Estas en el tema de Combinar consultas dinámicas <Fácil> en el foro de Jquery en Foros del Web. Saludos foreros! Os comento, tengo un pequeño filtro, de dos campos que quiero combinar sus resultados para mostrar los campos de una base de datos ...
  #1 (permalink)  
Antiguo 09/05/2013, 05:03
Avatar de the_sheriff_pino  
Fecha de Ingreso: abril-2013
Ubicación: Córdoba
Mensajes: 118
Antigüedad: 11 años
Puntos: 0
Combinar consultas dinámicas <Fácil>

Saludos foreros!

Os comento, tengo un pequeño filtro, de dos campos que quiero combinar sus resultados para mostrar los campos de una base de datos de mysql.
(Con un solo campo para filtrar me funciona correctamente)
Cuando escribo en el campo Nombre me filtra por nombre, si escribo en el campo Poblacion, filtra por poblacion y omite el campo Nombre.

El fallo debe de estar en el script de ajax, y sobre todo en la línea donde aparece #resultado.
Código Javascript:
Ver original
  1. <html>
  2.     <head>
  3.         <title>Búsqueda</title>
  4.         <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
  5.         <script type="text/javascript">
  6.             $(document).ready(function() {
  7.                 $("#nombre").keydown(
  8.                     function(event)
  9.                     {
  10.                         var nnombre = $("#nombre").attr("value");
  11.                         $("#resultado").load('busqueda.php',{nombre:nnombre});
  12.                     }
  13.                 );
  14.            
  15.             $(document).ready(function() {
  16.                 $("#nombre").keyup(
  17.                     function(event)
  18.                     {
  19.                         var nnombre = $("#nombre").attr("value");
  20.                         $("#resultado").load('busqueda.php',{nombre:nnombre});
  21.                     }
  22.                 )
  23.                
  24.                 $("#poblacion").keydown(
  25.                     function(event)
  26.                     {
  27.                         var npoblacion = $("#poblacion").attr("value");
  28.                         $("#resultado").load('busqueda.php',{poblacion:npoblacion});
  29.                     }
  30.                 );
  31.                 });
  32.             });
  33.             $(document).ready(function() {
  34.                 $("#poblacion").keyup(
  35.                     function(event)
  36.                     {
  37.                         var npoblacion = $("#poblacion").attr("value");
  38.                         $("#resultado").load('busqueda.php',{poblacion:npoblacion});
  39.                     }
  40.                
  41.                 );
  42.                
  43.             });
  44.         </script>
  45.     </head>
  46.     <body>
  47.         Nombre: <input type="text" name="nombre" id="nombre" autocomplete="off" />
  48.         <br />
  49.         Población: <input type="text" name="poblacion" id="poblacion" autocomplete="off" />
  50.         <br />
  51.         <div id="resultado" style="border: solid black 1px;"></div>
  52.     </body>
  53. </html>

Código PHP:
Ver original
  1. <?php
  2. $link = mysql_connect('localhost', 'root','') or die("Error, no se ha conectado B.D.");
  3. $bd=mysql_select_db('clientes', $link) or die("Error, no se ha seleccionado B.D.");
  4.  
  5.     $result;
  6.    
  7. function generaClientes()
  8.     {
  9.     $link       =   mysql_connect('localhost', 'root','') or die("Error, no se ha conectado B.D.");
  10.     $bd         =   mysql_select_db('clientes', $link) or die("Error, no se ha seleccionado B.D.");
  11.  
  12.        
  13.     $nombre     =   $_POST['nombre'];
  14.     //$provincia    =   $_POST['provincia'];
  15.     $poblacion  =   $_POST['poblacion'];
  16.     //$cif      =   $_POST['cif'];
  17.            
  18.            
  19. if ( !empty ($nombre) || !empty ($poblacion) || !empty ($provincia)|| !empty ($cif) ) {
  20.    
  21. $sql= " SELECT * FROM tabla WHERE ";                                                                //Empezar a crear la consulta:
  22.  
  23.     if ( !empty($nombre) && !empty ($poblacion) && !empty ($provincia) && !empty ($cif) ) {        
  24.          $sql .= " Nombre LIKE '%nombre' AND Poblacion LIKE '%$poblacion%' AND Provincia LIKE '%$provincia%' AND CIF LIKE '%$cif%'" ;  
  25.      }
  26.    
  27.     else if ( !empty($nombre) && !empty ($poblacion) && !empty ($cif) ) {                  
  28.      $sql .= " Nombre LIKE '%nombre' AND Poblacion LIKE '%$poblacion%' AND CIF LIKE '%$cif%'";
  29.     }
  30.     else if ( !empty($nombre) && !empty ($cif) && !empty ($provincia) ) {                      
  31.      $sql .= " Nombre LIKE '%nombre' AND CIF LIKE '%$cif%' AND Provincia LIKE '%$provincia%'";
  32.     }
  33.     else if ( !empty($nombre) &&  !empty ($provincia) ) {  
  34.      $sql .= " Nombre LIKE '%nombre' AND Provincia LIKE '%$provincia%'";
  35.     }
  36.     else if ( !empty($nombre) &&  !empty ($cif) ) {  
  37.      $sql .= " Nombre LIKE '%nombre' AND CIF LIKE '%$cif%'";
  38.     }
  39.     else if ( !empty($nombre) &&  !empty ($poblacion) ) {  
  40.      $sql .= " Nombre LIKE '%nombre' AND Poblacion LIKE '%$poblacion%'";
  41.     }
  42.     else if ( !empty($nombre) ) {
  43.      $sql .= " Nombre LIKE '%$nombre%'";
  44.     }
  45.     else if ( !empty ($poblacion) && !empty ($provincia) && !empty ($cif) ) {          
  46.      $sql .= " Poblacion LIKE '%$poblacion%' AND Provincia LIKE '%$provincia%' AND CIF LIKE '%$cif%'" ;
  47.     }
  48.     else if ( !empty($poblacion) &&  !empty ($provincia) ) {  
  49.      $sql .= " Poblacion LIKE '%$poblacion%' AND Provincia LIKE '%$provincia%'";
  50.     }
  51.     else if ( !empty($poblacion) &&  !empty ($cif) ) {  
  52.      $sql .= " Poblacion LIKE '%$poblacion%' AND CIF LIKE '%$cif%'";
  53.     }
  54.     else if ( !empty($poblacion)) {  
  55.      $sql .= " Poblacion LIKE '%$poblacion%'";
  56.     }
  57.     else if ( !empty($cif) &&  !empty ($provincia) ) {  
  58.      $sql .= " CIF LIKE '%$cif%' AND Provincia LIKE '%$provincia%'";
  59.     }
  60.     else if ( !empty ($provincia) ) {  
  61.      $sql .= " Provincia LIKE '%$provincia%'";
  62.     }
  63.     else if ( !empty($cif) ) {  
  64.      $sql .= " CIF LIKE '%$cif%'";
  65.     }
  66. }
  67.         $sql .= "ORDER BY Nombre ASC";
  68.        
  69. $consulta = mysql_query ($sql) ;   //Hacer la consulta. ?>     
  70.    
  71.  
  72.      
  73.     <select name='clientes' size="5px">
  74.  
  75.     <?php
  76.         while($registro=mysql_fetch_assoc($consulta))
  77.             {?>
  78.             <option value="<?php echo $registro['Nombre']; ?>"><?php echo $registro['Nombre']," ",$registro['Direccion']," ",$registro['Poblacion']," ",                                            $registro['Provincia'];  ?></option>
  79.    
  80.         <?php
  81.             }
  82.         ?>
  83.    
  84.    </select>
  85.  
  86.     <?php
  87.         }
  88.     ?> 
  89.  
  90. </form>
  91.  
  92.     <br />
  93.     <br />
  94.         <?php generaClientes(); ?>

Última edición por the_sheriff_pino; 09/05/2013 a las 06:25
  #2 (permalink)  
Antiguo 09/05/2013, 11:31
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: Combinar consultas dinámicas <Fácil>

Emmm... una consulta, porque tienes tantos

Código HTML:
Ver original
  1. $(document).ready(function() {

No te saldria mejor unificarlos?? que veo que todos hacen lo mismo pero estan repetidos

Lo otro, creo, si no estoy muy lento hoy, que quieres que al escribir el nombre, se cambie lo que hay en poblacion cierto? esto lo puedes hacer con el callback, y es necesario que le pases el valor que tiene "nombre" cuando filtra "poblacion"

Saludos
  #3 (permalink)  
Antiguo 09/05/2013, 13:33
Avatar de the_sheriff_pino  
Fecha de Ingreso: abril-2013
Ubicación: Córdoba
Mensajes: 118
Antigüedad: 11 años
Puntos: 0
Respuesta: Combinar consultas dinámicas <Fácil>

Cita:
Iniciado por fhederico Ver Mensaje
Emmm... una consulta, porque tienes tantos

Código HTML:
Ver original
  1. $(document).ready(function() {

No te saldria mejor unificarlos?? que veo que todos hacen lo mismo pero estan repetidos

Lo otro, creo, si no estoy muy lento hoy, que quieres que al escribir el nombre, se cambie lo que hay en poblacion cierto? esto lo puedes hacer con el callback, y es necesario que le pases el valor que tiene "nombre" cuando filtra "poblacion"

Saludos
Si hay repeticiones innecesarias de código es fallo de aprendiz de jQuery, iré depurando mi técnica rápidamente.

Trabajo sobre una tabla clientes que tiene los siguientes campos: Nombre || Dirección || Poblacion || Provincia || etc...

Quiero que si escribo en el text:nombre el nombre de un cliente, se muestren todos los clientes que tengan coincidencia con ese nombre y que si escribo en el text:poblacion se filtre aún más la lista que se me muestra.

Sería un filtro por nombre, y que del resultado de ese filtro, escribiendo la población se filtrase aún más esa lista.

Creo, espero haberme explicado correctamente.

Gracias por contestar!!
  #4 (permalink)  
Antiguo 09/05/2013, 14:02
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: Combinar consultas dinámicas <Fácil>

Si no hay problema estimado

Sobre lo que mencionas eso es Autocompletar (http://jqueryui.com/autocomplete/)

Y no te "filtra" mas la poblacion porque si te fijas estas mandando solo la poblacion


Código:
$("#poblacion").keydown(
                    function(event)
                    {
                        var npoblacion = $("#poblacion").attr("value");
                        $("#resultado").load('busqueda.php',{poblacion:npoblacion});
                    }
                );
Si ademas de la poblacion, le envias el campo nombre


Código:
$("#resultado").load('busqueda.php',{'poblacion' : npoblacion, 'nombre' : $("#nombre").val() });
Con esto cuando cargue la nueva busqueda le enviaras por POST el valor de "poblacion" y el de "nombre". La funcion "val()" te permite obtener el contenido de un campo, hechale una mirada a esto

http://www.jose-aguilar.com/blog/fun...zar-en-jquery/

Saludos
  #5 (permalink)  
Antiguo 10/05/2013, 01:20
Avatar de the_sheriff_pino  
Fecha de Ingreso: abril-2013
Ubicación: Córdoba
Mensajes: 118
Antigüedad: 11 años
Puntos: 0
Respuesta: Combinar consultas dinámicas <Fácil>

Cita:
Iniciado por fhederico Ver Mensaje
Si no hay problema estimado

Sobre lo que mencionas eso es Autocompletar (http://jqueryui.com/autocomplete/)

Y no te "filtra" mas la poblacion porque si te fijas estas mandando solo la poblacion


Código:
$("#poblacion").keydown(
                    function(event)
                    {
                        var npoblacion = $("#poblacion").attr("value");
                        $("#resultado").load('busqueda.php',{poblacion:npoblacion});
                    }
                );
Si ademas de la poblacion, le envias el campo nombre


Código:
$("#resultado").load('busqueda.php',{'poblacion' : npoblacion, 'nombre' : $("#nombre").val() });
Con esto cuando cargue la nueva busqueda le enviaras por POST el valor de "poblacion" y el de "nombre". La funcion "val()" te permite obtener el contenido de un campo, hechale una mirada a esto

http://www.jose-aguilar.com/blog/fun...zar-en-jquery/

Saludos
Voy a probarlo!

El auto-completado no sería exactamente lo que necesito.
El objetivo es que aparezca una lista de los clientes que hay y mediante los cajones de nombre y población se filtren. Es posible que en un futuo añada un par de campos más de filtros, aunque supongo que eso ya no tendrá dificultad.
He echado un vistazo a los links y son bastante buenos, gracias, sigo aprendiendo.

Voy a probarlo y posteo los resultados
  #6 (permalink)  
Antiguo 10/05/2013, 01:37
Avatar de the_sheriff_pino  
Fecha de Ingreso: abril-2013
Ubicación: Córdoba
Mensajes: 118
Antigüedad: 11 años
Puntos: 0
Respuesta: Combinar consultas dinámicas <Fácil>

Cambié la línea que me dijiste y puse en comentario el keydown y keyup repetidos y resulta que ahora el text:poblacion no filtra.
El text:nombre si sigue funcionando con normalidad.

Posiblemente haya una manera de condensar todo el código que he puesto en menos líneas, y solucionar mi error de una forma sencilla pero ahora mismo no doy con la manera.

estoy atento a tus respuestas! Gracias!

EDITO: La cuestión es que se unan en la misma consulta, no que sean independientes.

Si te fijas en el archivo búsqueda.php en la línea 23 ya he creado todas las condiciones que se pueden dar de si hay unos campos rellenos y otros no, y según eso que se rellene la consulta.


Hay alguna manera de mandar lo que lea en esta función por $_POST y que lo recoja la búqueda como uno de los parámetros de la consulta? En este caso sería $nombre y $poblacion.

Código PHP:
Ver original
  1. $(document).ready(function() {
  2.                 $("#nombre").keydown(
  3.                     function(event)
  4.                     {
  5.                         var nnombre = $("#nombre").attr("value");
  6.                         $("#resultado").load('busqueda.php',{nombre:nnombre});
  7.                     }
  8.                 );
  9.            
  10.             $(document).ready(function() {
  11.                 $("#nombre").keyup(
  12.                     function(event)
  13.                     {
  14.                         var nnombre = $("#nombre").attr("value");
  15.                         $("#resultado").load('busqueda.php',{nombre:nnombre});
  16.                     }
  17.                 )

Última edición por the_sheriff_pino; 10/05/2013 a las 01:46
  #7 (permalink)  
Antiguo 11/05/2013, 23:13
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: Combinar consultas dinámicas <Fácil>

Emmmm...

Yo me referia a otra cosa, basandome en lo que ya tienes

Código HTML:
Ver original
  1. $(document).ready(function() {
  2.                 $("#nombre").keydown(
  3.                     function(event)
  4.                     {
  5.                         $("#resultado").load('busqueda.php',{'nombre': $("#nombre").val()});
  6.                     }
  7.  
  8.  
  9.                  $("#poblacion").keydown(
  10.                     function(event)
  11.                     {
  12.                         alert("el nombre es: " + $("#nombre").val()  + " y la poblacion es "+$("#poblacion").val());
  13.                         $("#resultado").load('busqueda.php',{'poblacion' : $("#poblacion").val(), 'nombre' : $("#nombre").val() });
  14.                     }
  15.                 );
  16.  
  17. );

Revisalo y me cuentas, que no lo chequie

Etiquetas: combinar
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 23:28.