Buscador PHP mysql

Estoy haciendo un buscador para una web hecha con PHP y mySQL. Mi problema es el siguiente.
El buscador lo hice tipo google, y tienes que configurarlo para cada base de datos, su dirección, el archivo de conexión... Pero me gustaría que en el formulario de búsqueda apareciesen en una lista desplegable las diversas opciones de búsqueda por secciones: sección 1, 2, 3... Para que el usuarios solo buscase la sección que le interesa y no todas. Aunque también estaría bien que pudiese realizar una búsqueda general en la web.
¿Cómo sería el código del formulario de búsqueda?.
La página de búsqueda (formulario) se llama búsqueda.php y la página que realiza la búsqueda se llama search.php . ¿Es posible hacer esto?
Muchas gracias, espero que sepas ayudarme.
P.d. SI crees que hay otro buscador mejor, que tú hayas hecho o conozcas, no dudes en decírmelo, ya que estoy abierto a múltiples posibilidades.
1

1 respuesta

Respuesta
1
Imagino que tenemos varias secciones cada una de las cuales usa una tabla diferente. Entonces el código podría ser algo así:
<!-- busqueda.php -->
<?
//definición de las secciones para su correspondiente tabla dentro de la bdd
//$secciones['nombre_tabla'] = "Título de la sección"
$secciones['noticias'] = "Noticias";
$secciones['descargas'] = "Descargas";
$secciones['foro'] = "Foro";
//(...)
?>
<form name='buscar' action='busqueda.php' method='POST'>
<input type='text' name='clave'>
<select name='seccion'>
<option value=0>Todas la secciones</option>
<?
//ponemos en el select las secciones definidas en el array con su valor correspondiente
foreach ($secciones as $key=>$value) {
echo "<option value=$key>$value</option>";
}
?>
</select>
<input type='submit' name='buscar' value='Buscar'>
</form>
<!-- search.php -->
<?
//No suelen buscarse coincidencias en todos los campos, sólo en los que contienen
//información útil, p.ej: título, contenido, comentarios, etc...
//Por eso sería importante definir el criterio de búsqueda para cada tabla:
$criterio['noticias'] = "titulo LIKE '%$clave%' OR noticia LIKE '%$clave%' ORDER BY titulo";
$criterio['descargas'] = "nombre LIKE '%$clave%' OR descripcion LIKE '%$clave%' ORDER BY nombre";
//(...) y así para todas las secciones definidas en el select
if(!empty($_POST['buscar'])) { //si se ha sometido el formulario
//eliminamos los espacios en blanco del principio y final de la cadena
$clave = ltrim($_POST['clave']);
$clave = rtrim($_POST['clave']);
if(strlen($_POST['clave']) { //si la clave no está vacía
if($_POST['seccion']) { //si se ha seleccionado buscar en una sola seccion
$tabla = $_POST['seccion'];
$sql = "SELECT * from $tabla WHERE $criterio[$tabla]";
}
else {//buscar en todas las secciones
//aquí podrías definir una consulta que buscase en todas las secciones
//las coincidencias con campos relevantes o bien hacer un bucle con
//los criterios de búsqueda ya definidos. Te recomiendo lo primero
//ya que se ejectutará más rápido porque sólo consulta a mysql 1 vez
}
//Aquí ejecutamos la búsqueda y mostramos los resultados
}
else {
//El campo clave está en blanco, se puede volver a la página anterior,
//mostrar un mensaje de error o lo que sea
}
}
else {
//Se ha accedido a la página directamente, no desde el formulario
//p.ej. se puede redireccionar a la página anterior
}
?>
Esto es sólo un ejemplo sencillo medio improvisado, pero espero que te sirva para comenzar.
Hay muchas formas de implementar un buscador, se trata de ir probando para afinar y acelerar la búsqueda con los criterios y las consultas.
De todas formas hay varios buscadores ya hechos por internet, que en principio sólo se tienen que configurar para la base de datos en concreto. En esta dirección encontrarás algunos, más o menos complejos, aunque no te puedo aconsejar porque no los he probado:
http://www.hotscripts.com/PHP/Scripts_and_Programs/Search_Engines/
Suerte y perdona por la espera. Saludos,
iNphYx

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas