Programar un buscador en PHP y MySQL

En este artículo vamos a explicar paso a paso como desarrollar en PHP un sencillo buscador.

Contexto de la aplicación:

En nuestra Base de datos (para el ejemplo usaremos MySQL) tenemos una tabla con dos campos, un campo para el nombre y otro campo para los apellidos.

Nuestro objetivo es desarrollar un buscador que busque automáticamente alguna coincidencia con la información insertada y nuestra información almacenada en la base de datos.

Por ejemplo si tenemos en nuestra base de datos el siguiente usuario:

Nombre: Lucia

Apellidos: Carax Martín

Si introducimos por ejemplo en el buscador las cadena “lu”,  “mar”, ”a”, ”art”, en todas ellas el buscador nos encontrará a nuestro usuario Lucia Carax Martín ya que queremos realizar la búsqueda por coincidencias no por nombre completo. Comenzaremos creando un formulario para introducir nuestra búsqueda, para hacerlo un poco más elaborado le añadiremos un JavaScript que nos obligue antes de enviar nuestra petición de búsqueda comprobar que el campo a enviar no este vacio.

*El javaScript no es necesario incluirlo, si no deseamos ponerlo deberemos quitarlo y a parte también quitar lo siguiente de la cabecera del formulario: onSubmit=”return validarForm(this).

*Todo el código que se va a mostrar está situado en un único archivo pero para hacerlo de una manera lo más clara posible vamos a dividir la explicación en dos puntos.

La primera parte contiene un formulario donde se insertará la búsqueda

buscador-php

 
<form method="POST" action="" onSubmit="return validarForm(this)">
 
    <input type="text" placeholder="Buscar usuario" name="palabra">
 
    <input type="submit" value="Buscar" name="buscar">
 
</form>

Script para comprobar que no se envía vacía la petición:

 
<script type="text/javascript">
    function validarForm(formulario) 
    {
        if(formulario.palabra.value.length==0) 
        { //¿Tiene 0 caracteres?
            formulario.palabra.focus();  // Damos el foco al control
            alert('Debes rellenar este campo'); //Mostramos el mensaje
            return false; 
         } //devolvemos el foco  
         return true; //Si ha llegado hasta aquí, es que todo es correcto 
     }   
</script>

En la segunda parte procesaremos la información de búsqueda que se ha introducido en el formulario.

filtro php

 <?php  
if($_POST['buscar']) 
{   
   ?>
   <!-- el resultado de la búsqueda lo encapsularemos en un tabla -->
   <table width="100%" border="0" align="center" cellpadding="1" cellspacing="1">
       <tr>
            <!--creamos los títulos de nuestras dos columnas de nuestra tabla -->
            <td width="100" align="center"><strong>Nombre</strong></td>
            <td width="100" align="center"><strong>Apellidos</strong></td>
       </tr> 
       <?php
       //obtenemos la información introducida anteriormente desde nuestro buscador PHP
       $buscar = $_POST["palabra"];
       /* ahora ejecutamos nuestra sentencia SQL, lo que hemos vamos a hacer es usar el 
       comando like para comprobar si existe alguna coincidencia de la cadena insertada 
       en nuestro campo del formulario con nuestros datos almacenados en nuestra base de 
       datos, la cadena insertada en el buscador se almacenará en la variable $buscar */
 
       /* hemos usado también la sentencia or para indicarle que queremos que nos encuentre
       las coincidencias en alguno de los campos de nuestra tabla (apellidos o nombre), 
       si hubiéramos puesto un and solo nos devolvería el resultado del filtro en el 
       caso de cumplirse las dos condiciones */
 
       $consulta_mysql= mysql_query ("SELECT * FROM usuarios WHERE nombre like '%$buscar%' or apellidos like '%$buscar%'");
 
       while($registro = mysql_fetch_assoc($consulta_mysql)) 
       {
           ?> 
           <tr>
               <!--mostramos el nombre y apellido de las tuplas que han coincidido con la 
               cadena insertada en nuestro formulario-->
               <td class="estilo-tabla" align="center"><?=$registro['nombre']?></td>
               <td class=”estilo-tabla” align="center"><?=$registro['apellidos']?></td>
           </tr> 
           <?php 
       } //fin blucle
    ?>
    </table>
    <?php
} // fin if 
?>

Iván Martínez

Ingeniero Informático apasionado por el mundo del desarrollo WEB. Me gusta caminar por este mundo lleno de tecnologías y día a día aprender cosas nuevas como el doctor Frankenstein ¡dadme cosas para experimentar!

24 comentarios sobre “Programar un buscador en PHP y MySQL

  • el Feb 3, 2016 a las 12:45 pm
    Permalink

    Hola me gustaría contactar para contratar un servicio de programar un buscador de personas y datos previamente introducidos en una base de datos mediante un formulario y se pueda integrar en wordpress.

    Respuesta
  • el Abr 7, 2016 a las 7:41 pm
    Permalink

    si deseo colocar un mensaje del tipo “Su busqueda no arrojoningun resulado” seria tambien con un scrip simmilar al de campo vacio?

    Respuesta
  • el Abr 7, 2016 a las 10:34 pm
    Permalink

    Depende, puedes mostrar un mensaje de forma fácil con PHP o puedes desarrollar algo más avanzado usando AJAX.

    En PHP sería de la siguiente forma:
    Para saber si la búsqueda no ha encontrado ningún resultado comprobamos si el resultado de nuestra SELECT almacenado en la variable $consulta_mysql está vacia, si es asi imprimimos un mensaje como:
    if ( $consulta_mysql está vacia)
    {
    echo “No se ha encontrado ningún resultado”;
    }
    else
    {
    significa que tiene resultados y seguimos con la ejecución
    }

    Un saludo!

    Respuesta
  • el Abr 28, 2016 a las 8:19 pm
    Permalink

    hola, excelente aportación, me sirvió de mucho es lo que estaba buscando…
    gracias.

    Respuesta
  • el May 5, 2016 a las 8:31 pm
    Permalink

    Hola que tal no tendras lso archivos de ejemplo?? no puedo hacer la conexiǿn SQL desde el PHP no se q pase, saludos y gacias

    Respuesta
  • el Jun 3, 2016 a las 4:46 am
    Permalink

    buenas, amigo ivan como estas? lo que pasa es que al crear esta consulta el sistema me esta mandando un mensaje error: “Notice: Undefined index: buscar in C:\xampp\htdocs\AGUA\buscar.php on line 102” y resulta que en esa linea tengo lo siguiente: “if($_POST[‘buscar’]) {”
    Cual sera el error me podes colaborar por favor?

    De antemano muchas graciass

    Respuesta
    • el Jun 15, 2016 a las 6:18 pm
      Permalink

      Hola tengo el mismo problema que usted, si lo pudiste resolver por favor ayúdame. Gracias.

      Respuesta
    • el Jun 21, 2016 a las 5:52 pm
      Permalink

      Hola, lo primero que debes tener correctamente es la cabecera del formulario de búsqueda: action=””

      Podemos ver que la etiqueta action está vacia, lo que implica que al darle al botón buscar se redirigirá al mismo archivo donde está tu formulario.

      Ahora bien el problema que veo es que no llega nunca a entrar al if, eso quizás sea porque en el botón de enviar le falte el atributo buscar: name=”buscar”.

      Cuando pulses al botón buscar enviarás el valor buscar mediante el método POST donde al volver a entrar al mismo archivo entrará por el if que comprueba si se a accionado el botón llamado “buscar”, y si es así entrará dentro.

      Saludos.

      Respuesta
    • el Feb 21, 2017 a las 11:31 am
      Permalink

      Lo resolvieron es un notice no un error pero no lo puedo sacar solo me pasa cuando carga pro primera vez el formulario luego de una búsqueda desaparece.

      Respuesta
  • el Sep 7, 2016 a las 8:49 pm
    Permalink

    Hola estoy intentando hacer un buscador con tu código pero no se que estoy haciendo mal ya que si lo pongo de esta manera me hace la busqueda de toda la base de datos
    SELECT * FROM pam_catalogo WHERE id_negocio = ‘$id’ AND nombre_producto LIKE ‘%$buscar%’ OR descripcion LIKE ‘%$buscar%’
    y lo que necesito es que me haga la búsqueda de los campos nombre_producto y descripcion solo del id que necesito, cuando lo pongo asi si me busca solo por el id y por el nombre_producto pero no me busca por descripcion
    SELECT * FROM pam_catalogo WHERE id_negocio = ‘$id’ AND descripcion LIKE ‘%$buscar%’ AND nombre_producto LIKE ‘%$buscar%’
    Ayudame por favor de antemano muchas gracias

    Respuesta
    • el Sep 18, 2016 a las 1:21 pm
      Permalink

      Sin mirar y probar no se me ocurre que puede ser (supongo que es algo derivado del id) pero la segunda SELECT que has puesto no debería de funcionar ya que la WHERE tienes tres condiciones y están concatenadas por tres AND, por lo tanto estás diciendo que el id tiene que ser uno en concreto y además tu parámetro de búsqueda tiene que existir dentro del campo descripción y nombre del producto, por lo tanto pocas veces se va a cumplir.

      Supuestamente debería de funcionarte con la primera:
      SELECT * FROM pam_catalogo WHERE id_negocio = ‘$id’ AND nombre_producto LIKE ‘%$buscar%’ OR descripcion LIKE ‘%$buscar%’

      Me imagino que si eliminas la condición id_negocio = ‘$id’ te funcionará bien aunque no es esa la búsqueda que deseas.

      Si te da muchos problemas siempre puedes hacer un SELECT y después una SUBSELECT, primero para filtrar por id y después para filtrar por el parámetro de búsqueda.

      Saludos.

      Respuesta
  • el Sep 15, 2016 a las 9:53 pm
    Permalink

    Buenas Tarde, tengo un problema parecido a este, en el cual necesito realizar una búsqueda como esta, pero que los resultados me los de en cajas de texto (formulario php-html) para modificar, y de no existir el registro solicitado me de esas mismas cajas de texto, pero vacías, para llenar y luego enviar (guardar=insert) a mi base de datos phpmyadmin…

    NO SE SI ME EXPLIQUE Y POR FAVOR ME PUEDE AYUDAR…!!!!

    Cualquier cosa te agradecería que me ayudes y comuniques con migo a mi correo electrónico insertado en este formulario….

    Respuesta
    • el Sep 18, 2016 a las 1:03 pm
      Permalink

      Hola, ahora mismo como has visto se están visualizando en modo tabla (sin poder interactuar sobre los resultados), lo que estas buscando es visualizarlo en modo formulario para conseguir las cajas de texto, por lo tanto deberías usar la etiqueta form en el bucle y después la etiquetas input correspondientes.
      Luego el formulario puedes visualizarlo en modo tabla o no, eso ya depende de tu estructura.

      Saludos.

      Respuesta
  • el Sep 21, 2016 a las 5:31 pm
    Permalink

    Hola buen día Ivan! tengo un buscador demasiado parecido al tuyo y funciona perfectamente, pero quiero tener una búsqueda diferente. Te explico, tengo una base de datos con varias tablas relacionadas de productos en las cuales tengo:
    tabla
    -productos
    campos
    -id_producto
    -modelo…..etc
    -id_clasificacion
    tabla
    -clasificacion
    campos
    -id_clasificacion
    -nombre clasificacion
    quiero que me aparezcan todas las clasificaciones(ya sea en un o y al acceder ahi me muestre solo los productos que pertenecen a esa clasificacion, actualmente puedo imprimir las clasificaciones en ambos casos pero no logro hacer que me muestre solo los productos que pertenecen a esa clasificacion!
    Espero me puedas ayudar ya que llevo atorado en esto un tiempo y carezco de conocimiento en jquery y ajax 🙁
    De antemano muchas gracias

    Respuesta
  • el Nov 9, 2016 a las 9:25 pm
    Permalink

    tengo un formuario parecido a este solo que al buscar en dos campos diferentes de la misma tabla no me sale la busqueda como el ejemplo de nombre y apellidos ; como le puedo hacer para que funcione una busqueda doble

    Respuesta
  • el Nov 14, 2016 a las 4:28 am
    Permalink

    hola!! tengo que hacer un motor de búsqueda pero no tengo la menor idea de como empezarlo puedes ayudarme???

    Respuesta
  • el Nov 29, 2016 a las 6:13 pm
    Permalink

    Excelente pero como puedo integrarlo en el buscador de un sitio wordpress el tema es sydney athemes.com/documentation/sydney . tengo acceso a todos los datos del sitio. tendria que incluir esos archivos dentro de la ruta donde esta almacenado el buscador? ademas de modificar el codigo. O como podria hacerlo. Muchas gracias

    Respuesta
  • el Dic 2, 2016 a las 8:29 pm
    Permalink

    Como podria hacer lo mismo con una base de datos remota donde pondria el codigo con los datos de conexion?

    Respuesta
  • el Feb 13, 2017 a las 9:38 pm
    Permalink

    Hola quería saber porque me mustra estas advertencias y como puedo solucionarla:
    Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\rl-php-master\buscar.php on line 52
    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\rl-php-master\buscar.php on line 54.
    Además le agregué un include de la conexion con la bbdd.

    Respuesta
  • el May 3, 2017 a las 1:45 am
    Permalink

    Excelente aporte.
    Tengo un problema para querer mostrar imagen que esta almacenada en la base de datos, pero al momento de mostrarla solo me muestra el enlace de la dirección donde esta almacenada.
    ¿No se si tienes alguna idea de como la puedo mostrar?

    Respuesta
  • el Nov 9, 2017 a las 10:52 pm
    Permalink

    alguien me puede decir como llevar este codigo a symfony es que lo es algo nuevo para mi

    Respuesta

Deja un comentario

Tu dirección de correo electrónico no será publicada.