Foros del Web » Programando para Internet » PHP »

buscador---paso a paso---

Estas en el tema de buscador---paso a paso--- en el foro de PHP en Foros del Web. Hola a todos/as. estoy haciendo un buscador y pretendo ir paso a paso a fin de que pueda servir a todos/as. la primera duda con ...
  #1 (permalink)  
Antiguo 28/08/2008, 06:23
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
buscador---paso a paso---

Hola a todos/as. estoy haciendo un buscador y pretendo ir paso a paso a fin de que pueda servir a todos/as. la primera duda con la que me encuentro es esta.

como os digo estoy haciendo un buscador. hay una base de datos sobre la que se consulta y una tabla llamada alimentos. para simplificar diremos que esta tabla tiene tres campos:

alimentoid-----autonumerico
alimento-------alimento en cuestion
categoria------categoria a la que pertenece

bien. hacemos un form que será el form de búsqueda del buscador. y tenemos:

Código PHP:
<form name="form" action="procesar.php"  METHOD="POST">


<!-- 
nombre -->

<
LABEL for=nombre>Nombre del Producto</LABEL><br
<
INPUT id=nombre  size=20 name=nombre> <SPAN>&nbsp;</SPAN> <BR><br>
<
input type="submit" name="Submit" value="Enviar" 
pasamos a la página procesar.php. este es el código:

Código PHP:
$nombre=$_POST['nombre']; 
$sql =     "SELECT     * FROM     productos WHERE nombre LIKE '%$nombre%' ORDER BY    nombre ASC";
$result mysql_query($sql) or die (mysql_error());  

$datos mysql_num_rows($result);

if(
$datos<=0){ 
echo 
"No hay resultados coincidentes con tu búsqueda";
}    
else
{    
echo 
"<b>".$datos["nombre"]."</b><BR>";

Bien. que hago con esto? pues que me busque en los alimentos cualquier palabra que yo ponga en el campo input. incluso si pongo la letra 'a', me buscará todos los registros que en alimentos tengan la letra 'a'. pero cual es el problema? pues que si yo pongo 'PAN MOLDE' el me busca los registros que contengan PAN y/o MOLDE y me da un resultado por ejemplo: PAN DE MOLDE BIMBO
Pero en cambio si pongo 'MOLDE PAN' me dice que no hay resultados. Alguna idea de por qué?

una vez solucionado esto iré complicando el buscador.

gracias por vuestra ayuda
  #2 (permalink)  
Antiguo 28/08/2008, 07:06
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: buscador---paso a paso---

Lo que se puede hacer es al obtener los criterio de búsqueda dividirlos en sus respectivas palabras:
Código PHP:
//por ejemplo
if($criterio1 != ""){
$listaCriterio1 explode(' ',$criterio1); 

//y con ello formar la condición de búsqueda:
//si hubiera criterios anteriores hay que comprobarlos por si hay que añadir AND a la claúsura WHERE: 

if($sqlCriterioAnterior != ""  ){$sqlCriterio1 "AND (";}
else{
$sqlCriterio1 "(";}

for(
$i 0$i<count($listaCriterio1); $i++){
if(
$i>0){$sqlCriterio1.="OR ";}
$sqlCriterio1 .= "Criterio1 REGEXT '$listaCriterio1[$i]' ";
}
$sqlCriterio1.=") ";
$criterioAnterior.=$sqlCriterio1;

Donde REGEXP podemos verlo explicado aquí: http://dev.mysql.com/doc/refman/5.0/es/regexp.html

$sqlCriterioAnterior se refiere al criterio
Los paréntesis es porque hacemos queremos que coincidan todos los criterios pero también que en cada uno aparezca al menos una de las expresiones:

(a || b || c ...)&&( d || e || f...).... donde (a || b || c ...) es un criterio de búsqueda.
(esta fórmula se puede sustituir por la que se quiera)

Y por último componer la consulta:

$sqlTotal="Select * FROM ... WHERE $criterioAnterior....;
  #3 (permalink)  
Antiguo 28/08/2008, 07:47
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Respuesta: buscador---paso a paso---

Aqui puedes ver toda una explicacion de como hacer consultas para un buscador, todo bien explicado
http://dev.mysql.com/doc/refman/5.0/...xt-search.html

@ilie, buen link sobre expreciones regulares

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:07.