Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Buscador "avanzado"

Estas en el tema de Buscador "avanzado" en el foro de PHP en Foros del Web. Hola. Ando con lo de hacer un buscador, explico por partes. Tengo una Base de datos que tiene los siguientes datos: nombre apaterno amaterno fnac ...
  #1 (permalink)  
Antiguo 08/11/2013, 10:28
 
Fecha de Ingreso: mayo-2013
Mensajes: 55
Antigüedad: 10 años, 10 meses
Puntos: 1
Buscador "avanzado"

Hola.

Ando con lo de hacer un buscador, explico por partes.

Tengo una Base de datos que tiene los siguientes datos:

nombre apaterno amaterno fnac dcalle dcol cp dmpio dedo base

Tengo un formulario para la búsqueda dentro de esa base de datos:

Código HTML:
Ver original
  1. <form action="buscar.php" method="post">
  2. <tr>
  3. <h1>Buscar:</h1>
  4. </tr>
  5. <tr>
  6. <td ALIGN=CENTER>
  7. <div> Nombre: <br/>
  8. <input type="text" id="nombre" name="nombre" placeholder="Nombre"></div>
  9. </td>
  10. <td ALIGN=CENTER>
  11. <div> Apellido Paterno: <br/>
  12. <input type="text" id="apaterno" name="apaterno" placeholder="Apellido paterno"></div>
  13. </td>
  14. <td ALIGN=CENTER>
  15. <div> Apellido Materno: <br/>
  16. <input type="text" id="amaterno" name="amaterno" placeholder="Apellido materno"></div>
  17. </td>
  18. <td ALIGN=CENTER>
  19. <div> RFC: <br/>
  20. <input type="text" id="rfc" name="rfc" placeholder="RFC"></div>
  21. </td>
  22. <td ALIGN=CENTER>
  23. <div> Fecha de Nacimiento dd/mm/aaaa: <br/>
  24. <input type="text" id="fnac" name="fnac" placeholder="fecha de nacimiento dd/mm/aaaa"></div>
  25. </td>
  26. </tr>
  27. <tr>
  28. <td ALIGN=CENTER>
  29. <div> Domicilio Calle: <br/>
  30. <input type="text" id="dcalle" name="dcalle" placeholder="Dom calle"></div>
  31. </td>
  32. <td ALIGN=CENTER>
  33. <div> Colonia: <br/>
  34. <input type="text" id="dcol" name="dcol" placeholder="Colonia"></div>
  35. </td>
  36. <td ALIGN=CENTER>
  37. <div> Delegacion municipio: <br/>
  38. <input type="text" id="dmpio" name="dmpio" placeholder="Delegacion municipio"></div>
  39. </td>
  40. <td ALIGN=CENTER>
  41. <div> Estado: <br/>
  42. <input type="text" id="dedo" name="dedo" placeholder="Estado"></div>
  43. </td>
  44. <td ALIGN=CENTER>
  45. <div> Telefono: <br/>
  46. <input type="text" id="tel" name="tel" placeholder="Telefono 10 digitos"></div>
  47. </td>
  48. </tr>
  49. <input type="submit" value="buscar" name="buscar">
  50. </form>



Y el archivo para la consulta de los datos:


Código PHP:
Ver original
  1. include('conect.php');
  2.  
  3. $nom = $_POST['nombre'];
  4. $apa = $_POST['apaterno'];
  5. $ama = $_POST['amaterno'];
  6. $rfc = $_POST['rfc'];
  7. $fnac = $_POST['fnac'];
  8. $dcalle = $_POST['dcalle'];
  9. $dcol = $_POST['dcol'];
  10. $dmpio= $_POST['dmpio'];
  11. $dedo = $_POST['dedo'];
  12. $tel = $_POST['tel'];
  13.  
  14.  
  15.  
  16. if (!isset($buscar))
  17. {
  18.     if ($nom=="" && $apa=="" && $ama=="" && $rfc=="" && $fnac=="" && $dcalle=="" && $dcol=="" && $dmpio=="" && $dedo=="" && $tel==""){
  19.     echo "Debe especificar al menos un campo";
  20. }
  21. else{
  22.  
  23. $busca = "  SELECT * FROM tabla_prueba WHERE nombre LIKE '%".$nom."%'";
  24. $resultado = mysql_query($busca) or die("Error en $busca: " . mysql_error());
  25.    
  26.     echo '<table>';
  27.     while($row = mysql_fetch_array($resultado))
  28.     {
  29.        
  30.         echo '<tr>';
  31.         echo '<td>' .$row['nombre'].'</td><td>'.$row['apaterno'].'</td>';
  32.         echo '</tr>';
  33.     }
  34.         echo '</table>';
  35. }
  36. }
Bueno, puedo hacer la consulta de un campo ingresado, pero no se como hacer para:

Si ingresa un dato en cualquier campo que busque por el dato ingresado

Si ingresa un dato en un campo y otro mas en el campo siguiente que realice la busqueda en la base tomando en cuenta las coincidencias

Si escribe "martinez" en Apellido Paterno que arroje a todos los Martinez

Pero su pone "alberto" en nombre y "martinez" en Apellido que indique solo a los que en sus nombres contengan Alberto + Martinez (julio alberto martinez aguilar, alberto martinez, carlos alberto martinez casto... etc)

Y que muestre toda la fila, todos los datos que no se buscan que los muestre...

Espero explicarme correctamente, no soy programador he llegado hasta aquí de forma autodidacta. He consultado la pagina de http://dev.mysql.com/ pero igual no esta fácil entenderla jejeje...

De antemano Muchas Gracias

Habia iniciado el tema en el foro de MySQL pero me comentan que mas bien en en el foro de PHP, entonces entiendo que tendria que hacerse de la forma:


Si el campo 1 no esta vacio hacer consulta y revisar si el campo dos esta vacio y sumar la consulta y asi... algo mas menos como

Código PHP:
Ver original
  1. if(!empty(nombre)
  2. {
  3. $busca = "  SELECT * FROM tabla_prueba WHERE nombre LIKE '%".$nom."%'";
  4. $resultado = mysql_query($busca) or die("Error en $busca: " . mysql_error());
  5. }
  6. else(empty(nombre) && !empty(apellido){
  7. $busca = "  SELECT * FROM tabla_prueba WHERE apellido LIKE '%".$apa."%'";
  8. $resultado = mysql_query($busca) or die("Error en $busca: " . mysql_error());
  9. }

Y así...

¿es correcto?
  #2 (permalink)  
Antiguo 08/11/2013, 12:41
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 5 meses
Puntos: 43
Respuesta: Buscador "avanzado"

Andá concatenando la consulta. Le vas agregando "AND campo = valor" si está seteado, o cumple la condición que querés que cumpla.

Código PHP:
Ver original
  1. $buscar = 'SELECT * FROM tabla_prueba WHERE ';
  2. $where = '';
  3. if (!empty($nom))
  4. {
  5.     $where .= "nombre LIKE '%$nom%'";
  6. }
  7. if (!empty($apa))
  8. {
  9.     $where .= (!empty($where)) ? "AND" : '';
  10.     $where .= "apaterno LIKE '%$apa%'";
  11. }
  12. if (!empty($ama))
  13. {
  14.     $where .= (!empty($where)) ? "AND" : '';
  15.     $where .= "amaterno LIKE '%$apa%'";
  16. }
  17.  
  18. //Todos if de cada campo
  19.  
  20. $buscar .= $where;
  21. mysql_query($busca) or die("Error en $busca: " . mysql_error());

A eso le vas agregando la condición que quieras al where según las reglas que querés que cumpla
  #3 (permalink)  
Antiguo 08/11/2013, 13:42
 
Fecha de Ingreso: mayo-2013
Mensajes: 55
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Buscador "avanzado"

Muchas Gracia Cuervoo por la respuesta "pare" que es lo que busco pero al enviarlo me da error en la syntaxis

Error en SELECT * FROM tabla_prueba WHERE nombre LIKE '%alberto%'ANDapaterno LIKE '%martinez%': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ANDapaterno LIKE '%martinez%'' at line 1

Estoy buscando como se hace la concatenación para que no salga el error, es como si sobraran los % o algo por el estilo, estoy en la búsqueda.

Por supuesto si sabes con gusto te leeo.

Muchas gracias de nuevo.
  #4 (permalink)  
Antiguo 08/11/2013, 13:44
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Buscador "avanzado"

Cita:
Iniciado por albemartinez Ver Mensaje
Muchas Gracia Cuervoo por la respuesta "pare" que es lo que busco pero al enviarlo me da error en la syntaxis

Error en SELECT * FROM tabla_prueba WHERE nombre LIKE '%alberto%'ANDapaterno LIKE '%martinez%': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ANDapaterno LIKE '%martinez%'' at line 1

Estoy buscando como se hace la concatenación para que no salga el error, es como si sobraran los % o algo por el estilo, estoy en la búsqueda.

Por supuesto si sabes con gusto te leeo.

Muchas gracias de nuevo.
<saludos>
Teorizo que el problema es que no estás dejando espacio entre el AND y el nombre del campo, intenta dejando un espacio y nos comentas
(Ah, y claro, entre el final del valor y el inicio del AND, es decir por ej mira esto


SELECT * FROM tabla_prueba WHERE nombre LIKE '%alberto%'ANDapaterno LIKE '%martinez%'
Debería ser

SELECT * FROM tabla_prueba WHERE nombre LIKE '%alberto%' AND apaterno LIKE '%martinez%' (Fijate que hay espacio antes y después del AND
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 08/11/2013, 13:47
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 5 meses
Puntos: 43
Respuesta: Buscador "avanzado"

Porque se están juntando '%alberto%'ANDapaterno, se está juntando todo, me faltó darle espacio cuando agregá algo.

Código PHP:
Ver original
  1. $buscar = 'SELECT * FROM tabla_prueba WHERE ';
  2. $where = '';
  3. if (!empty($nom))
  4. {
  5.     $where .= "nombre LIKE '%$nom%' ";
  6. }
  7. if (!empty($apa))
  8. {
  9.     $where .= (!empty($where)) ? " AND " : '';
  10.     $where .= "apaterno LIKE '%$apa%' ";
  11. }
  12. if (!empty($ama))
  13. {
  14.     $where .= (!empty($where)) ? "AND " : '';
  15.     $where .= "amaterno LIKE '%$apa%' ";
  16. }
  17.  
  18. //Todos if de cada campo
  19.  
  20. $buscar .= $where;
  21. mysql_query($busca) or die("Error en $busca: " . mysql_error());

Asi
  #6 (permalink)  
Antiguo 08/11/2013, 14:07
 
Fecha de Ingreso: mayo-2013
Mensajes: 55
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Buscador "avanzado"

mortiprogramador

Cuervoo

La locuuuura.... muchas muchas gracias por la ayuda...

Me hace falta una cosa... ¿Cómo hago para mostrar TODA la fila? ya me busca el nombre o si tiene el apellido pero necesito que me muestre el resto de los datos que no se ingresaron...

Gracias por sus ayudas...
  #7 (permalink)  
Antiguo 08/11/2013, 14:33
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Buscador "avanzado"

Cita:
Iniciado por albemartinez Ver Mensaje
mortiprogramador

Cuervoo

La locuuuura.... muchas muchas gracias por la ayuda...

Me hace falta una cosa... ¿Cómo hago para mostrar TODA la fila? ya me busca el nombre o si tiene el apellido pero necesito que me muestre el resto de los datos que no se ingresaron...

Gracias por sus ayudas...
<saludos>
Do nada
Cuando dices que te muestre los datos que no se ingresaron, te refieres a los campos que NO se usaron para la búsqueda?
Si es así, pues en cada if que ya tienes agrega un else a cada cual, por ej


Código PHP:
Ver original
  1. // variable para los campos no usados
  2. $nousados = '';
  3. if (!empty($nom))
  4. {
  5.     $where .= "nombre LIKE '%$nom%' ";
  6. }
  7. else
  8. {
  9.     $nousados .= '</br> Campo nombre NO usado';
  10. }
  11.  
  12. if (!empty($apa))
  13. {
  14.     $where .= (!empty($where)) ? " AND " : '';
  15.     $where .= "apaterno LIKE '%$apa%' ";
  16. }
  17. else
  18. {
  19.     $nousados .= '</br> Campo apaterno NO usado';
  20. }

Y al final tendrías algo como:


Código PHP:
Ver original
  1. echo 'Campos no usados ';
  2. echo $nousados;


Espero que eso sea a lo que te refieras, nos cuentas pues!


Ahm, no, creo que te refieres es a los campos del query, entonces lo que tienes que hacer es replicar lo que ya tienes, es decir,
ya usas un

Código PHP:
Ver original
  1. echo '<td>' .$row['nombre'].'</td><td>'.$row['apaterno'].'</td>';
Pues ahora aumenta eso, es decir, por ej
Código PHP:
Ver original
  1. echo '<td>' .$row['nombre'].'</td><td>'.$row['apaterno'].'</td>';
  2.  echo '<td>' .$row['nuevocampo'].'</td><td>'.$row['nuevocampo2'].'</td>';
Y así sucesivamente...
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 08/11/2013 a las 14:38
  #8 (permalink)  
Antiguo 08/11/2013, 14:51
 
Fecha de Ingreso: mayo-2013
Mensajes: 55
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Buscador "avanzado"

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Do nada
Cuando dices que te muestre los datos que no se ingresaron, te refieres a los campos que NO se usaron para la búsqueda?

(..)


Ahm, no, creo que te refieres es a los campos del query, entonces lo que tienes que hacer es replicar lo que ya tienes, es decir,
ya usas un

Código PHP:
Ver original
  1. echo '<td>' .$row['nombre'].'</td><td>'.$row['apaterno'].'</td>';
Pues ahora aumenta eso, es decir, por ej
Código PHP:
Ver original
  1. echo '<td>' .$row['nombre'].'</td><td>'.$row['apaterno'].'</td>';
  2.  echo '<td>' .$row['nuevocampo'].'</td><td>'.$row['nuevocampo2'].'</td>';
Y así sucesivamente...
</saludos>
Si justo eso es lo que opté por hacer... muchas gracias de nuevo

¡¡Gracias!!

Etiquetas: buscador, fecha, formulario, mysql, select, sql, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:51.