HTML5 Demostración y EjemplosLenguaje PHP

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.
Busqueda avanzada php mysql
Busqueda avanzada php mysql
  1. 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;
  1. 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 = "";
?>
  1. 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>
  1. 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>";
} ?>
busqueda avanzada php
busqueda avanzada php
  1. 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.

Búsqueda avanzada usando PHP y MySQLi
Búsqueda avanzada usando PHP y MySQLi

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.

DESCARGAS DEL CÓDIGO FUENTE

Descargar Código Fuente

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!.

5 comentarios

  1. 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?

    1. 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

  2. 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

Deja una respuesta

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

Botón volver arriba