Lenguaje PHPMYSQL La base de datos

Buscador avanzado con PHP y MySQL: Múltiples palabras

Buscador avanzado con PHP y MySQL. En este articulo veremos la implementación de un sistema de búsqueda avanzada escrito en el lenguaje PHP y con el gestor de base de datos MySQL.

La búsqueda con múltiples palabras suele ser complicado para cualquier programador. Sin embargo, en este artículo lo haremos de una manera muy sencilla.

Buscador avanzado con PHP y MySQL: Múltiples palabras

A continuación, veremos una serie de pasos para lograr nuestro anhelado objetivo.

¿Qué recursos usaran en este sistema?

  • a) Lenguaje PHP
  • b) Lenguaje HTML5
  • c) Librería BootStrap
  • d) Base de datos MySQL

¿Qué va a mostrar este artículo?

Mostraremos las técnicas para implementar el motor de búsqueda de palabras clave múltiples en nuestras páginas PHP. Por lo tanto, nuestro objetivo está en buscar una o más palabras clave o incluso frases completas o texto largo especificados por un usuario en el cuadro de texto de búsqueda.

El texto introducido por usuario se buscará en el campo (lenguaje y descripcion) de la tabla MySql con nombre CURSOS y se mostrará el resultado que contenga todas las filas que coincidan con una o más palabras clave.

PASOS PARA INTEGRAR EL BUSCADOR AVANZADO PHP MYSQL

  1. Instalación de la base de datos y la tabla

Para que funcione nuestro buscador se requiere una tabla MySql para poder realizar búsquedas. Por lo tanto, en este ejemplo he creado una tabla muy simple llamada ‘ CURSOS‘ con dos campos llamado ‘ lenguaje‘ y ‘descripcion‘.

CREATE TABLE `cursos` (
  `id` int(11) NOT NULL,
  `lenguaje` varchar(50) NOT NULL,
  `descripcion` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Tabla cursos' ROW_FORMAT=COMPACT;


INSERT INTO `cursos` (`id`, `lenguaje`, `descripcion`) VALUES
(1, 'PHP', 'Aprende como crear una aplicación web completa con PHP.'),
(2, 'OOP', 'Con esta nueva version usted podra gozar de la velocidad con el docente Luis Muñoz'),
(3, 'PHP7', 'A cargo de Doc. Mario Muñoz. PHP es muy intuitivo y muy facil de aprender.'),
(4, 'MYSQL', 'MySQL es muy importante para gestionar su informacion. Aprende de manera muy facil.'),
(5, 'Java', 'La mayoria de programadores crea sus aplicaciones en este robusto lenguaje PHP.');


ALTER TABLE `cursos`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `cursos` ADD FULLTEXT KEY `Buscar` (`lenguaje`,`descripcion`);


ALTER TABLE `cursos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

Recordemos que debemos de agregar registros a nuestra tabla. Sin embargo, para que el ejercicio sea más dinámico les brindare una tabla con sus respectivos registros.

  1. Creación de un formulario HTML5

Nuestro siguiente punto es crear un formulario HTML. En el cual, agregamos una etiqueta, un cuadro de texto (Tipo Input), y un botón para realizar la búsqueda.

Este formulario HTML será vital y permitirá al usuario digitar una o más palabras clave en el cuadro de texto para su posterior procesamiento. El formulario tendrá una apariencia similar a:

Formulario buscador avanzado PHP
Formulario buscador avanzado PHP

La etiqueta formulario tiene dos atributos:  ‘ action ‘ y ‘ method ‘. En el atributo ‘ action ‘ se ha especificado el nombre del fichero donde se mostrará los resultados

El atributo ‘method‘ será el encargado de recoger la información mediante el método POST.

El atributo name del cuadro de texto. Este nombre se usará para extraer valores de cuadro de texto en código PHP.

  1. Conexión con la base de datos MySql

El siguiente código es para conectarse a MySql Server. Por lo tanto, lo llamaremos ‘conexion.php‘.

Este fichero es de vital importancia para nuestro motor de búsqueda y se tendrá que configurar de acuerdo a nuestras credenciales de acceso de tu servidor.

<?php
$servidor= "localhost";
$usuario= "root";
$password = "";
$nombreBD= "php_buscador";
$db = new mysqli($servidor, $usuario, $password, $nombreBD);
if ($db->connect_error) {
    die("la conexión ha fallado: " . $db->connect_error);
}
if (!$db->set_charset("utf8")) {
    printf("Error al cargar el conjunto de caracteres utf8: %s\n", $db->error);
    exit();
} else {
    printf("Conjunto de caracteres actual: %s\n", $db->character_set_name());
}
?>
  1. Construyendo la lógica del buscador avanzado

En el cuarto paso después de crear la interfaz de usuario (UI)(formulario) y especificar la configuración de conexión con el servidor MySql. La lógica PHP que implementaremos será el siguiente:

 $aKeyword = explode(" ", $_POST['PalabraClave']);
      $query ="SELECT * FROM cursos WHERE lenguaje like '%" . $aKeyword[0] . "%' OR descripcion like '%" . $aKeyword[0] . "%'";
      
     for($i = 1; $i < count($aKeyword); $i++) {
        if(!empty($aKeyword[$i])) {
            $query .= " OR descripcion like '%" . $aKeyword[$i] . "%'";
        }

La lógica que usaremos no es tan complicada. Primero tenemos que comprobar si el formulario envía la información de manera correcta.

La palabra clave será almacenada en una variable llamada ‘$aKeyword‘. Sin embargo, usaremos la función explode() para almacenarlo como un arreglo. Lo que conseguiremos separar palabra por palabra.

Ahora una vez que tenemos las palabras separadas lo llevamos al ciclo FOR para realizar búsquedas anidadas.

Nota: Si el sistema no encuentra resultados mostrara el siguiente mensaje.

Buscador avanzado sin resultados
Buscador avanzado sin resultados
  1. Mostrar el resultado de la búsqueda

El resultado se muestra como tabla HTML5. Está compuesta por tres campos, Numero de resultado, lenguaje, descripción.

La siguiente imagen muestra la búsqueda con palabras clave ‘ Robusto‘, ‘lenguaje’, ‘PHP

Resultados buscador avanzado PHP
Resultados buscador avanzado PHP
  1. Conclusión del articulo

Como han podido apreciar, su implementación es realmente sencilla y podemos aplicarlo en diferentes sectores como ser:

  • Buscar más de un valor en el campo base de datos.
  • Para buscar una frase larga en la base de datos y/o tabla.
  • Implementar el cuadro de texto sugerencia automática.
  • En artículos largos con bastantes palabras.
Buscador avanzado con PHP y MySQL Multiples palabras
Buscador avanzado con PHP y MySQL Multiples palabras

DESCARGA DEL SISTEMA

A continuación, les dejare un fichero comprimido para que puedan descargarlo.

 

 

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

39 comentarios

    1. Hola
      Puedes agregar encabezados antes de iniciar el cilo while

          if(mysqli_num_rows($result) > 0) {
              $row_count=0;
              echo "Resultados encontrados: ";
              echo "";
      
      //AQUI COLOCAR EL ENCABEZADO
      
              While($row = $result->fetch_assoc()) {  
      
  1. Hola,
    Estoy realizando un buscador y me ha venido genial tu articulo, pero me aparece el siguiente error al hacer la búsqueda.

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\wamp64\www\dashboard\buscador.php on line 70
    Call Stack
    # Time Memory Function Location
    1 0.0001 410280 {main}( ) …\buscador.php:0
    2 0.0028 576904 mysqli_num_rows ( ) …\buscador.php:70

    Gracias!

    1. Hola Maria

      Este tipo de error suele darse cuando se está combinando enfoques procedimentales y orientados a objetos, cuando solo desea orientados a objetos debes de cambiar de:

      $num=mysqli_num_rows($result);
      

      a

      $num = $stmt->num_rows();
      

      Revise como está planteando su consulta a MySQL.

      Espero haber ayudado

      Saludos

    1. Hola Jose

      Puedes colocar el encabezado antes de iniciar el ciclo while, en la linea 97 del fichero index.php

          if(mysqli_num_rows($result) > 0) {
              $row_count=0;
              echo "Resultados encontrados: ";
              echo "";
      
      //AQUI COLOCAR EL ENCABEZADO
      
              While($row = $result->fetch_assoc()) {   
        
      

      Saludos

  2. Hola estimado Nestor, muy bueno su aporte, pero quería consultar si al momento de que encuentre un resultado podría marcarse con un checked y llevar los resultados de la búsqueda a otro input. Por favor su respuesta sería de gran ayuda.

  3. hola, disculpe como podria poner una condicionante where para que no se repitan los id, por ejemplo haciendo una consulta con tres tablas, pero los resultados me salen repetidos

  4. Hola Nestor,

    Como siempre excelente aporte que son Bocato di cardinale, haces ver esto tan sencillo 🙂
    Nestor quisiera que al presionar el boton buscar me muestre otra página con los resultados, así puedo tener el buscador en mi index y una única sección para búsquedas, tendrían que mandar cada una de los resultados a la otra página o solamente el parámetro que se busca? es que estoy un poco confundido con eso.

    Gracias nuevamente por tu aporte.

  5. Hola, muy buen tutorial. Se agradece mucho la información.

    Quisiera solicitarle ayuda. Al momento de escribir dos palabras en el campos de busqueda me arroja el siguiente error:

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in \Buscador-avanzado-PHP-MySQL\index.php on line 94.
    Como podría solucionarlo? Necesito que el buscador busque por lo menos con tres palabras.

  6. Hola, cómo puede puedo hacer para que los resultados se paginen, porque tengo muchos datos en la base de datos y necesito que despues de un número determinado de resultados muestra pag 1, 2, 3, etc… Gracias.

  7. Buenos días como hago para que me muestre el contenido en vertical y con los títulos de cada resultado ya que solo me muestra los resultados sin encabezado?.
    Saludos

  8. Buenas, Sr. Nestor quisiera preguntar si podría colocar la lista de las aplicaciones completas o un link donde se puedan ver, de las que tiene en venta, me interesa, y para hacer la compra que plataforma usa. Quedo atento a su comentario, Gracias

  9. Saludos, a todos los que han tenido problemas con la descarga les comento que ya esta corregido y el problema radicaba en la cache de la pagina.

    Mil disculpas por los inconvenientes causados.

    1. Estimado Nestor: Muchas gracias por el codigo. Una pregunta, como borrar los resultados de la busqueda? Le agregue unnboton Reset, pero no limpia la busqueda realizada. Es que los resultados se quedan ahi, debe haber un modo de limpar la pantalla.
      Saludos!

  10. Que mentira no hay ninguna descarga gratis, creo que hay que hacer el pago, entonces para que pide que le den like, es una estafa viejo hpta coja oficio, lo voy a poner en la lista negra de buscadores, al igual su sitio. Y pobres los pelotones que cayeron.

    1. Gracias por el comentario, solo le comento que nadie le obliga a que compre el script o le de like para la descarga. Si no te gusta te puedes ir derechito por donde viniste.

      Saludos

  11. El Paso numero 4 es poco explícito, pues no se sabe a donde va agregado este fragmento de codigo. No se sabe el nombre de la caja de texto del buscador. En definitiva, no puedo terminar de armar el buscador.

  12. Gracias por el tutorial. Aunque intenté bajar el código completo, no pude. Le día a me gusta , via facebook, y no apareció el descargador.

  13. Muy bueno y el código a disposición de los usuarios
    Tengo un problema si selecciono una columna de una base de datos por ejemplo marca de coche en la segunda selección me muestra los modelos de todas las marcas
    Me gustaría que me mostrara solo los modelos de la marca seleccionada

  14. buen articulo, tengo una duda si se requiere que aparezca un encabezado en el que indique cual es el resultado por ejemplo que diga # en la columna de numero lenguaje en la columna del tip ode lenguaje y descripcion en la ultima columna como se agregaria

  15. Excelente articulo muchas gracias lo estaba buscando tengo una consulta.
    De esta manera muestra toda la información que tengas
    Ejemplo: si hay dos andres en la bd con diferentes apellido

    Si buscas 1 con nombre y apellido sale el otro tambien

    Como hacer por lo menos para ordenarlo por el que se realizo la busqueda?

  16. Para los que no tenemos Facebook se nos hace un poco difícil darle al like. Sugerencia: Podrías habilitar una mencion en Twitter o Google+??? Seria de gran ayuda.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba