Foros del Web » Programando para Internet » PHP »

buscador que no funciona

Estas en el tema de buscador que no funciona en el foro de PHP en Foros del Web. Pues eso que estaba intentado hacer un buscador para terminar con el proiecto planteado en la clase de programacion y que no tenego por donde ...
  #1 (permalink)  
Antiguo 30/04/2008, 05:16
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
buscador que no funciona

Pues eso que estaba intentado hacer un buscador para terminar con el proiecto planteado en la clase de programacion y que no tenego por donde cogerlo, e creado los fulltext que necesito, el valor lo mando atraves de un formulario, pero no se que falla, si alguien encuentra el error dentro del codigo me seria de gran ayuda, porque yo por mas que lo reviso me parece que esta bien, ando algo perdido ya...


aqui os dejo el formulario (creo que esta perfecto, pero nunca se save)

Código HTML:
<FORM METHOD=POST ACTION="buscar.php">
  <INPUT NAME="busqueda" TYPE="text" value="Buscar...">
</FORM> 
y aqui el "motor" de busqueda.
Código PHP:
<?php
if ($busqueda<>''){
   
$trozos=explode(" ",$busqueda);
   
$numero=count($trozos);
  if (
$numero==1) {
   
$cadbusca="SELECT id,publiser, producto, title2, title3, author, subject, descripcion FROM catalogo WHERE publiser LIKE '%$busqueda%' OR producto LIKE '%$busqueda%' OR title2 LIKE '%$busqueda%' OR title3 LIKE '%$busqueda%' OR author LIKE '%$busqueda%' OR subject LIKE '%$busqueda%' OR descripcion LIKE '%$busqueda%' LIMIT 50";
  } elseif (
$numero>1) {
  
$cadbusca="SELECT id,publiser, producto, title2, title3, author, subject, descripcion ( producto, author, subject, descripcion) AGAINST ( '$busqueda' ) AS Score FROM catalogo WHERE MATCH ( producto, author, subject, descripcion ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("gomila"$cadbusca);
While(
$row=mysql_fetch_object($result))
{
  
$producto=$row->TITULO;
  
$author=$row->REFERENCIA;
         echo 
$producto." - ".$author."<br>";;
}
?>
Espero poder corregirlo y que nos sea de utilidad a todos este pequeño scrip que me parece bastante util para las paguinas web que quieran un buscador, y en mi opinion esta diseñado para ser bastante decente.
  #2 (permalink)  
Antiguo 30/04/2008, 05:20
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: buscador que no funciona

Hola No-name

tienes esos campos de la base de datos en un indice FULLTEXT??

un saludo
  #3 (permalink)  
Antiguo 30/04/2008, 05:24
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: buscador que no funciona

perdon, ya lei que si, que son FULLTEXT

pero no veo que recojasr la variable del form
has de recogerla asi:

Código PHP:
$busqueda $_POST['busqueda']; 
  #4 (permalink)  
Antiguo 30/04/2008, 05:30
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Re: buscador que no funciona

Eso y que en la consulta no veo ningun campo llamado TITULO o REFERENCIA, que son los que intentas leer del objeto de mysql_fetch_object().
  #5 (permalink)  
Antiguo 02/05/2008, 02:35
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Re: buscador que no funciona

corregi los errores que me comentateis, y e incluido los datos de conexion necesarios a la base de datos, pero continua sin funcionar

Código PHP:
<?php
//se recoge la variable de un formulaio
$busqueda $_POST['busqueda'];
//Nos conecdamos
mysql_connect('localhost','user','passwd'); 
//Des piezamos las varibla y la troceamos de forma usando explode, count nos dice el numero de trozos que hay
if ($busqueda<>''){
   
$trozos=explode(" ",$busqueda);
   
$numero=count($trozos);
// una palabra busqueda simple con like (maximo 50 resultados)
  
if
      (
$numero==1) {
   
$cadbusca="SELECT * FROM catalogo WHERE publiser LIKE '%$busqueda%' OR producto LIKE '%$busqueda%' OR title2 LIKE '%$busqueda%' OR title3 LIKE '%$busqueda%' OR autor LIKE '%$busqueda%' OR subject LIKE '%$busqueda%' OR descripcion LIKE '%$busqueda%' LIMIT 50";
  }
// dos palabra busqueda (maximo 50 resultados)
  
else
     (
$numero>=2) {
  
$cadbusca="SELECT * , MATCH(producto, autor, subject, descripcion) AGAINST ( '$busqueda' ) AS Score FROM catalogo WHERE MATCH ( producto, autor, subject, descripcion ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
//elige la bd y ejecuta la cadena de busqueda $cadbusca
$result=mysql("gomila"$cadbusca);
While(
$row=mysql_fetch_object($result))
{
//Los datos que queremos mostrar
  
$producto=$row->producto;
  
$autor=$row->autor;
         echo 
$producto." - ".$autor."<br>";
}
?>
e incluido las explicaciones, para a quien les pueda ayudar en un futuro
  #6 (permalink)  
Antiguo 02/05/2008, 04:15
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: buscador que no funciona

por lo que veo te hace falta decirle al codigo el nombre de la BD a la que quieres conectar y donde estan los datos


Código PHP:
<?php 
//se recoge la variable de un formulaio 
$busqueda $_POST['busqueda']; 
//Nos conecdamos 
mysql_connect('localhost','user','passwd');  

//se selecciona la base de datos que vas a utilizar
mysql_select_db('nombre
_tu_base_datos'
)or die ('Error al seleccionar la Base de Datos: '.mysql_error());


//Des piezamos las varibla y la troceamos de forma usando explode, count nos dice el numero de trozos que hay 
if ($busqueda<>''){ 
   
$trozos=explode(" ",$busqueda); 
   
$numero=count($trozos); 
// una palabra busqueda simple con like (maximo 50 resultados) 
  
if 
      (
$numero==1) { 
   
$cadbusca="SELECT * FROM catalogo WHERE publiser LIKE '%$busqueda%' OR producto LIKE '%$busqueda%' OR title2 LIKE '%$busqueda%' OR title3 LIKE '%$busqueda%' OR autor LIKE '%$busqueda%' OR subject LIKE '%$busqueda%' OR descripcion LIKE '%$busqueda%' LIMIT 50"
  } 
// dos palabra busqueda (maximo 50 resultados) 
  
else 
     (
$numero>=2) { 
  
$cadbusca="SELECT * , MATCH(producto, autor, subject, descripcion) AGAINST ( '$busqueda' ) AS Score FROM catalogo WHERE MATCH ( producto, autor, subject, descripcion ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50"

//elige la bd y ejecuta la cadena de busqueda $cadbusca 
$result=mysql("gomila"$cadbusca); 
While(
$row=mysql_fetch_object($result)) 

//Los datos que queremos mostrar 
  
$producto=$row->producto
  
$autor=$row->autor
         echo 
$producto." - ".$autor."<br>"

?>
  #7 (permalink)  
Antiguo 07/05/2008, 02:44
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Re: buscador que no funciona

Gracias a todos por los aportes y las correciones de errores, pero me sige sin funcionar, y ya no se si es que algo del .htaccess no esta configurado, o que el fulltext no funciona correctamente.

Asi que porfavor si podeis seguir ayudandome seria mas de agradecer todavia, y muchas gracias a todos los que me aveis ayudado.

Aqui os dejo como esta mi full text creado:

Nom. de la clave:busqueda
Tipo:FULLTEXT
Cardinalidad: Ninguna
Campo: producto, title2, title3, autor, descripcion, publisher, subject

Última edición por No-NaMe; 07/05/2008 a las 02:59 Razón: incluir mas info
  #8 (permalink)  
Antiguo 12/05/2008, 17:40
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: buscador que no funciona

Yo uso ese mismo codigo de esta manera:

Código PHP:

$busqueda 
quitar($_POST['palabra']);
if (
$busqueda<>''){ 
  
//CUENTA EL NUMERO DE PALABRAS 
  
$trozos=explode(" ",$busqueda); 
  
$numero=count($trozos); 
  if (
$numero==1) { 
    
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE 
    
$_pagi_sql="SELECT * FROM descargas WHERE description =1 
      AND name LIKE  '%$busqueda%' OR description LIKE  '%$busqueda%' ORDER  BY name ASC"

  } elseif (
$numero>1) { 
    
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST 
   
     
$_pagi_sql="SELECT * , MATCH(name, description) AGAINST ('+$busqueda') as Score FROM descargas
                        WHERE MATCH (name, description) AGAINST ('+$busqueda') ORDER BY Score DESC"
;
 
 
 
  } else{echo 
"no hay resultados";}
  
$_pagi_result mysql_query($_pagi_sql $conexion) or die ( mysql_error() ); 
  #9 (permalink)  
Antiguo 14/05/2008, 02:34
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Re: buscador que no funciona

Tengo una duda porque utilizas el where descrition=1 es para distingir entre contenido publicado y no publicado ?
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 23:17.