Implementación de un buscador sencillo con PHP
En muchas Webs es necesario disponer de un buscador efectivo para que los usuarios puedan localizar de forma directa lo que están buscando.
En PHP podemos programar fácilmente un buscador que realizará una búsqueda en los registros de la base de datos.
En el ejemplo que vamos a ilustrar, veremos como localizar artículos de un blog mediante consulta a la base de datos y mostrar los resultados.
En el <body> de nuestra página está claro que vamos a necesitar un formulario. Lo podríamos hacer como el siguiente:
<form action="index.php" method="POST"> Palabras clave <input type="text" id="keywords" name="keywords" size="30" maxlength="30"> <input type="submit" name="search" id="search" value="Buscar"> </form>
Como puedes ver, el formulario para implementar un buscador puede ser muy sencillo, aunque podría ser mucho más complejo, como por ejemplo poder fijar unas fechas de inicio y fin, poder elegir la categoría del artículo entre otros.
En este caso, simplemente vamos a capturar las palabras clave a buscar. Tenemos un botón tipo Submit que al pulsarlo se envían los datos mediante el método POST.
Seguidamente, tendremos el código PHP que se encarga de procesar los datos enviados.
<?php //Si se ha pulsado el botón de buscar if (isset($_POST['search'])) { //Recogemos las claves enviadas $keywords = $_POST['keywords']; //Conectamos con la base de datos en la que vamos a buscar $conexion = mysql_connect("localhost", "USUARIO", "PASSWORD"); mysql_select_db("NOMBRE_BASE_DE_DATOS", $conexion); $query = "SELECT fecha, titulo, DATE_FORMAT(post_date, '%d-%m-%Y') as fecha FROM TABLA WHERE status = '1' AND (contenido LIKE '%" . $keywords . "%' OR titulo LIKE '%" . $keywords . "%') ORDER BY fecha desc"; $query_searched = mysql_query($query, $conexion); $count_results = mysql_num_rows($query_searched); //Si ha resultados if ($count_results > 0) { echo '<h2>Se han encontrado '.$count_results.' resultados.</h2>'; echo '<ul>'; while ($row_searched = mysql_fetch_array($query_searched)) { //En este caso solo mostramos el titulo y fecha de la entrada echo '<li><a href="#">'.$row_searched['titulo'].' ('.$row_searched['fecha'].')</a></li>'; } echo '</ul>'; } else { //Si no hay registros encontrados echo '<h2>No se encuentran resultados con los criterios de búsqueda.</h2>'; } } ?>
Como puedes ver, si estás familiarizado con el código PHP queda un código muy simple. La complejidad del asunto diría que recae en la query realizada que selecciona los datos necesarios de una tabla de artículos utilizando el comando LIKE %{keyword}% buscando en los campos titulo y contenido de las entradas.
Mi caso es el siguiente: Dentro del formulario tengo nombres y quiero que por ejemplo quiero encontrar ERNESTO como lo hago ? ademas quiero que el puntero se quede en el primero que encuentre.
Hola buenos días,
Quizá te pueda servir esto:
https://www.jose-aguilar.com/blog/select2/
O algo así:
https://www.jose-aguilar.com/blog/buscador-con-sugerencias-elegantes-en-prestashop/
Saludos
gracias por el post amigo, una pregunta ya lo implemente y me funciona, pero cuando hago una consulta con mas de una palabra que no este en el orden en que esta registrado en la base de datos no me consulta nada es decir si ne la base de datos tengo escrito un ejemplo: «la casa es de color blanca» y si hago la búsqueda con «la casa» me busca bien, pero si pongo «casa blanca» ya me dice que no hay resultados
Hola,
Ese detalle lo dejamos en vuestras manos y espero encontréis una solución.
Un simple idea es captar las palabras introducidas en el campo de búsqueda, guardarlas en un array y luego recorrer ese array para ejecutar la consulta de búsqueda por cada palabra.
Saludos
Muy buen script de busqueda, me gusto lo sencillo y facil de implementar, lo unico que le hace falta creo es una validacion para que en caso de que no lleve valor, no realice la busqueda y te marque error, voy a ver si con los parametros de html5 se suple esta parte.
Saludos
cool story bro
Soy deme!! El manager y le exijo compromiso con el club!!! Actualizeee los puntos
demetrio dice? no es el sitio para reclamar…