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
-
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.
-
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:
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.
-
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()); } ?>
-
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.
-
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
‘
-
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.
DESCARGA DEL SISTEMA
A continuación, les dejare un fichero comprimido para que puedan descargarlo.
Descargar buscador múltiples palabras PHP
Hola buenas noches . Como le hago para poner encabeza a las búsquedas
Hola
Puedes agregar encabezados antes de iniciar el cilo while
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!
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:
a
Revise como está planteando su consulta a MySQL.
Espero haber ayudado
Saludos
Cómo hago para poner encabezado a la tabla?
Hola Jose
Puedes colocar el encabezado antes de iniciar el ciclo while, en la linea 97 del fichero index.php
Saludos
excelente muchas gracias me sirvio muchisimo
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.
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
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.
Me gusto demasiado tu tema Gracias, Un saludo
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.
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.
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
Mucgas gracias Nestor por el buscador, Saludos desde Santo Domingo!
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
Gracias por su aporte, muy agradecido, y por compartir su conocimiento mas que todo con los que estamos empezando.
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.
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!
Hola Luis,
Podrias colocar un boton con un enlace para que cargue el inicio del buscador.
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.
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
No funciona el botón de descarga
DOnde esta el archivo?
Hola! estoy intentando dar like para acceder a la descarga pero no funciona el botón
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.
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.
Graciass.
No se puedo descargas el Fichero de Buscador avanzado con PHP y MySQL Multiples palabras..
Puedes enviarlo por email.
Saludos.
Muy buen aporte de código…
Muy bueno el aporte, pero no me estaría funcionando con lo que quiero hacer si podrás darme un ayudin te lo agraderia Muchas gracias saludos!.
Hola Ignacio,
Primeramente agardecerte por tu comentario y dime como te puedo ayudar si es que es factible
Saludos
Gracias por el aporte
Hola Amf
Perfecto, me alegra que el ejemplo te haya servido.
Saludos a la distancia y que tengas un excelente día.
Buen articulo, solo tengo una duda como le pongo un header en los resultados para identificar cada columna
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
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
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?
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.