Búsqueda avanzada usando PHP y MySQLi
Búsqueda avanzada usando PHP y MySQLi. En el tema de realizar búsquedas avanzada de php tenemos muchas alternativas claras para filtrar los datos almacenados en una base de datos MySQL. En este artículo veremos cómo realizar búsquedas desde diferentes perspectivas, desde una simple búsqueda hasta utilizar criterios avanzados de filtro. Sin embargo, generalmente se realizan búsquedas de un campo y en este ejemplo mostraremos la búsqueda con varios criterios en la consulta.
Búsqueda avanzada usando PHP y MySQLi
En el formulario de búsqueda avanzada, tenemos entradas para buscar con respecto
- Palabra exacta dada
- Cualquier palabra de la frase
- Excluir palabras de la cadena dada
- También podemos elegir una columna de base de datos en la que se desea hacer la búsqueda.
-
Creación de la base de datos
Necesitamos una base de datos con su respectiva tabla llamada «BUSQUEDA» y 3 columnas, veamos el ejemplo a continuación.
CREATE TABLE IF NOT EXISTS `busqueda` ( `id` int(11) NOT NULL, `titulo` varchar(200) DEFAULT NULL, `descripcion` varchar(200) DEFAULT NULL, `vinculo` varchar(100) DEFAULT NULL ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -- -- Volcado de datos para la tabla `busqueda` -- INSERT INTO `busqueda` (`id`, `titulo`, `descripcion`, `vinculo`) VALUES (1, 'La vaca rosada', 'Mi vaca rosada esta contenta', 'http://yahoo.com'), (2, 'El mono carlos', 'Mi mono carlos esta feliz con su banana', 'http://google.com'); -- -- Índices para tablas volcadas -- -- -- Indices de la tabla `busqueda` -- ALTER TABLE `busqueda` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT de la tabla `busqueda` -- ALTER TABLE `busqueda` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
-
La conexión con la base de datos
Necesitamos crear un fichero llamado conexion.php, en la cual albergara las funciones y variables propias para realizar una conexión.
<?php $conn = mysqli_connect("localhost", "root", "root", "php_avanzada"); $with_any_one_of = ""; $with_the_exact_of = ""; $without = ""; $starts_with = ""; $search_in = ""; $advance_search_submit = ""; ?>
-
Creación del formulario HTML
Para realizar búsquedas necesitamos apoyarnos de un formulario y que se puedan enviar las palabras claves mediante el método POST.
<form name="Busqueda_Avanzada" method="post" action="index.php"> <input type="hidden" id="advance_search_submit" name="advance_search_submit" value="<?php echo $advance_search_submit; ?>"> <span id="busqueda_avanzada" onClick="VerOcultarBusquedaAvanzada()">Busqueda Avanzada</span> <div class="caja_busqueda"> <label class="search-label">Con una de las palabras:</label> <div> <input type="text" name="search[with_any_one_of]" class="form-control" value="<?php echo $with_any_one_of; ?>" /> </div> <div style="margin-top:10px;"> <input type="submit" name="busqueda" class="btn btn-success" value="Buscar"> </div> </div> </form>
-
Procesamiento de la información
En esta sección necesitamos implementar códigos PHP para que muestre las informaciones de la base de datos y lo imprima en el navegador.
<?php if (isset($_POST["busqueda"])){ $number=0; while($row = mysqli_fetch_assoc($result)) { $number++;?> <div> <div><strong><?php echo $number;?>. <?php echo $row["titulo"]; ?></strong></div> <div class="verde"><strong><?php echo $row["vinculo"]; ?></strong></div> <div class="resultado_descripcion"><?php echo $row["descripcion"]; ?></div> </div> <?php } ?> <?php $total = mysqli_num_rows($result); if($total==0){ echo 'No hay resultados encontrados'; }else{ echo '<hr><b>Hay un total de '.$total.' resultados en su busqueda</b>'; } ?> <?php }else{ echo"<div><strong>Ingrese la palabra clave a buscar.</strong></div>"; } ?>
-
Crear una condición php
Este código recibe el envio del formulario y verifica si realmente el usuario presiono en botón buscar, caso contrario muestra una leyenda «ingrese la palabra clave a buscar».
También, si no hay resultados imprime una leyenda «No hay resultados», caso contrario cuenta los resultados y muestra las cantidades de resultados encontrados de acuerdo a su criterio de búsqueda.
CONCLUSIÓN
Es muy recomendable implementar este código porque hace que nuestro sistema busque bajo cualquier criterio de filtro en nuestro sistema web. Haciendo, que nuestro trabajo sea eficiente.
Oooh, gracias por responder Nestor. Yo siempre he utilizado «utf8_spanish_ci».
Saludos!
Da problema de acentos, a pesar de que está activa la opcion utf-8. Los resultados muestras signos raros en donde va el acento. La base de datos utilizada fue en diseñada con el mismo estandar UTF-8 spanish-ci.
Alguna sugerencia de solución?
Hola Luis
Para controlar las tildes, eñes, etc, en la base de datos recomiendo el cotejamiento «utf8mb4_unicode_ci» tanto para la base de datos, tabla y columna en MySQL. Sin embargo, lo puedes cambiar en el gestor phpMyAdmin.
El cotejamiento que recomiendo es mas preciso para albergar caracteres especiales e incluso emojis.
Saludos cordiales
Nota: Siempre saca una copia de seguridad cuando desees alterar una BD
buenas tardes me gustaria que me pudieras ayudar con un inconveniente para realizar algo necesito hacer lo mismo que hace google en su pagina principal.
tengo un buscador en la pagina principal y otro buscador en la pagina donde aparecen los resultados, necesito que cuando realize una busqueda en el buscador principal este haga la busqueda me mande los resultados a la pagina de resultados pero que en el otro buscador aparezca el texto que busque en el primer buscador y que si quiero realizar una nueva busqueda no sea necesario volver a la pagina principal solo borrar lo que esta escrito y listo
hola amigo me gustaria ponerme con tacto con usted me podria dejar su email o tu whatssap