Foros del Web » Programando para Internet » PHP »

Buscador PHP mysql

Estas en el tema de Buscador PHP mysql en el foro de PHP en Foros del Web. Buenas, decir que soy nuevo en el foro, y lo he estado leyendo previamente antes de hacer esta consulta. De momento estoy probando en un ...
  #1 (permalink)  
Antiguo 03/01/2009, 10:58
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 3 meses
Puntos: 1
Buscador PHP mysql

Buenas, decir que soy nuevo en el foro, y lo he estado leyendo previamente antes de hacer esta consulta.

De momento estoy probando en un localhost, cn el appserver, mas tarde ya lo subiria a un host y eso cuando ya "domine" el tema

Vamos ver, mi problema es el siguiente, yo quiero hacer un buscador que busque en mi base de datos y muestre los resultados encontrados ( y sino encuentra pues que lo diga )

por una parte tengo el archivo Index.html cn un formulario:

Código PHP:
<FORM METHOD=POST ACTION="buscar.php">
Buscar: <INPUT TYPE="text" NAME="busqueda">
</
FORM
y por otra parte tengo el archivo buscar.php

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<?php
//cadena de conexion
mysql_connect("Localhost","root","XXX");
mysql_select_db("nombrebasededatos"); 
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if (!empty($_POST['busqueda'])){
$busqueda=$_POST['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
    
$cadbusca="SELECT  REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
      AND DESARROLLO LIKE  '%$busqueda%' OR TITULO LIKE  '%$busqueda%' LIMIT 50"
;
  } elseif (
$numero>1) {
    
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
    //busqueda de frases con mas de una palabra y un algoritmo especializado
    
$cadbusca="SELECT  REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
      AGAINST (  '$busqueda' ) AS Score FROM ARTICULOS WHERE
      MATCH ( TITULO, DESARROLLO ) AGAINST (  '$busqueda' ) ORDER  BY Score DESC LIMIT 50"
;
  }
  
$result=mysql_query($cadbusca) or die (mysql_error());
  While(
$row=mysql_fetch_object($result))
  {
    
//Mostramos los titulos de los articulos o lo que deseemos...
    
$referencia=$row->REFERENCIA;
    
$titulo=$row->TITULO;
    echo 
$referencia." - ".$titulo."<br>";
  }
}
?>  

<body>
</body>
</html>
Luego la base de datos MYSQL la tengo de la siguiente forma, pego foto phpadmin:


Ahora cuando busco desde el index.html y me manda al buscar.php, me sale "Unknown column 'VISIBLE' in 'where clause' ", es lo maximo que he conseguido en una semana, ya que buscando y buscando por todo inet, solo conseguia que me diera fallo el codigo o bien, me salia la pagina en blanco.

Este codigo lo he sacado de un forero de este mismo foro, y de momento es con el que he conseguido avanzar mas.

Espero vuestra ayuda, muchas gracias y disculpar las molestias
  #2 (permalink)  
Antiguo 03/01/2009, 11:24
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Buscador PHP mysql

Te recomiendo sigas mi hilo , pues es mas o menos el mismo problema, lo que pasa que a mi me da resultados con una palabra y no con varias.
Te digo esto por no repetir tema.
http://www.forosdelweb.com/f18/match...-error-658761/
  #3 (permalink)  
Antiguo 03/01/2009, 11:43
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Buscador PHP mysql

encontree esto:

PRIMERO:
Debemos “indexar” la tabla sobre la cual realizaremos la búsqueda.
Si estamos en PHPMYADMIN, nos vamos al botón SQL y esribimos la siguiente sentencia:

Código:
alter table nombre_tabla add fulltext(campo_indexar_1,campo_indexar_2,etc.);
SEGUNDO:

Una vez realizado el procedimiento creamos nuestra consulta SQL, un ejemplo sería algo así:


Código PHP:
$buscar=$_POST[’palabra’];
 
$consulta mysql_query(”select from nombre_tabla where match (campo_indexar_1,campo_indexar_2,etc.) against (’$buscar’ in boolean mode)); (Colocamos Boolean Mode para que podamos usar sintaxis como *,+,% en el criterio de búsqueda

espero que te ayude
  #4 (permalink)  
Antiguo 03/01/2009, 12:47
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Buscador PHP mysql

No creo que sea bueno poner "in boolean mode"; en ese caso estarías tratando con valores verdadero/falso; y los operadores + * % etc no tienen mucho contexto al buscar palabras y frases.

El problema del Unknown column 'VISIBLE' in where clause es porque cuando buscas una palabra tu sentencia es
Código:
SELECT  REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND DESARROLLO LIKE  '%$busqueda%' OR TITULO LIKE  '%$busqueda%' LIMIT 50
Visto de cerca, vemos un WHERE VISIBLE = 1, pero en tu foto de PhpMyAdmin no hay tal columna.
Puedes hacer dos cosas respecto a eso:
1) Añadir la columna (alter table tutabla add column visible tinyint(1) default 1)
2) Borrar el where visible=1
Lo bueno de añadir ese campo es que puedes hacer que ciertos artículos no sean visibles al público (para un control "básico" de los contenidos, de ser necesario).

Espero haber ayudado algo. Un saludo!
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!
  #5 (permalink)  
Antiguo 04/01/2009, 10:13
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Buscador PHP mysql

Vale, muchas gracias, he conseguido buscar xD, pero bueno sigo teniendo algunos problemas, aun que lo basico ya lo he conseguido.

Codigo actualmente

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<?php
//cadena de conexion//CONEXION MYSQL Y BASE DE DATOS
mysql_connect("Localhost","root","XXXX"); //conexion a MYSQL HOST/USUARIO/PASS
mysql_select_db("todotrenty");  //CONEXION a la base de datos exacta
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if (!empty($_POST['busqueda'])){
$busqueda=$_POST['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
    
$cadbusca="SELECT TITULO FROM ARTICULOS WHERE DESARROLLO LIKE  '%$busqueda%' OR TITULO LIKE  '%$busqueda%' LIMIT 50";
  } elseif (
$numero>1) {
    
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
    //busqueda de frases con mas de una palabra y un algoritmo especializado
    
$cadbusca="SELECT  REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO ) AGAINST (  '$busqueda' ) AS Score FROM ARTICULOS WHERE MATCH ( TITULO, DESARROLLO ) AGAINST (  '$busqueda' ) ORDER  BY Score DESC LIMIT 50";
  }
  
$result=mysql_query($cadbusca) or die (mysql_error());
  While(
$row=mysql_fetch_object($result))
  {
    
//Mostramos los titulos de los articulos o lo que deseemos...
    
$desarrollo=$row->DESARROLLO;
    
$titulo=$row->TITULO;
    echo 
$desarrollo." - ".$titulo."<br>";
  }
}
?>  

<body>
</body>
</html>
tengo los siguientes problemas:

Cuando busco con mas de una palabra por ejemplo, en la base de datos tengo Señor de los anillos en "titulo", si pongo "señor", si que me encuentra "el señor de los anillos", pero si pongo el nombre completo la pagina sale en blanco, a que se debe?

Despues, en los resultados, yo quiero que me salga el "desarrollo" y el "titulo", me sale:

busco batman por ejemplo, sale "- batman" en los resultados, yo quiero que salga el Titulo y despues el desarrollo que tenga puesto, tampoco se a que se debe ese "-"

Muchas gracias por todo, me habeis solucionado en horas lo que yo no he podido solucionar en semanas xD

EDITO: se me olvidaba, si me podeis decir el codigo que tengo que poner para cuando no encuentre ningun resultado, por ejemplo, busco "muñeco" y no encuentra nada que contenga la palabra muñeco, yo quiero que ponga algo del estilo "No se han encontrado resultados"

Gracias de nuevo
  #6 (permalink)  
Antiguo 05/01/2009, 08:32
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Buscador PHP mysql

Ya he conseguido arreglar lo de que busque mas de una palabra, simplemente le he quitado la opcion de buscar por palabras y ya esta.
Lo demas no lo consigo de ninguna forma, nose que hcer para que muestre los resultados bien, yo quiero que salga de resultados por ejemplo:

segun lo k se busca,
TITULO - FICHA, tal y como tengo la base de datos

Tampoco se como poner tanto como, sino se escribe nada diga que no se a escrito nada, y si no a encontrado lo que se busca, que diga que no hay resultadas de X palabras.


Codigo actual:
Código PHP:
<?php
//cadena de conexion//CONEXION MYSQL Y BASE DE DATOS
mysql_connect("Localhost","root","XXXXXXX"); //conexion a MYSQL HOST/USUARIO/PASS
mysql_select_db("todotrenty");  //CONEXION a la base de datos exacta
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if (!empty($_POST['busqueda'])){ 
$busqueda=$_POST['busqueda'];
//BUSQUEDA:
    
$cadbusca="SELECT TITULO,FICHA FROM ARTICULOS WHERE ficha LIKE '%$busqueda%' OR TITULO LIKE  '%$busqueda%' LIMIT 50"// Busca sobre los campos ficha y titulo dentro de la tabla ARTICULOS, y limite de 50 resultados
//RESULTADO: 
  
$result=mysql_query($cadbusca) or die (mysql_error());
  While(
$row=mysql_fetch_object($result))
  {
    
//Mostramos los titulos de los articulos o lo que deseemos...
    
$ficha=$row->ficha;
   
$titulo=$row->TITULO;
    
//echo $titulo."<br>";
    
echo $ficha." - ".$titulo."<br>";
  }
}
?>
</p>
</body>
</html>
haber si me podeis ayudar muchas gracias.
  #7 (permalink)  
Antiguo 05/01/2009, 09:53
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Buscador PHP mysql

Sigo con mi autoprogresion xD, he conseguido que muestre los resultados tan y como yo queria:

Código PHP:
<?php
//cadena de conexion//CONEXION MYSQL Y BASE DE DATOS
mysql_connect("Localhost","root","XXxXX"); //conexion a MYSQL HOST/USUARIO/PASS
mysql_select_db("todotrenty");  //CONEXION a la base de datos exacta
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if (!empty($_POST['busqueda'])){ 
$busqueda=$_POST['busqueda'];
//BUSQUEDA:
    
$cadbusca="SELECT * FROM ARTICULOS WHERE ficha LIKE '%$busqueda%' OR TITULO LIKE  '%$busqueda%' LIMIT 50"// Busca sobre los campos ficha y titulo dentro de la tabla ARTICULOS, y limite de 50 resultados
//RESULTADO: 

// por aki tengo k poner k no encuentra resultados creo xd
  
$result=mysql_query($cadbusca) or die (mysql_error ($erroralgo)); 
  
$numregistros mysql_num_rows ($result);
  
  while (
$filasmod mysql_fetch_array ($result)) { 
  
extract ($filasmod); 
  echo 
$titulo." - ".$ficha."<br>";
  

}
?>
</p>
</body>
</html>
ahora bien sigo con las mismas dudas que antes, sino encuentra nada de lo buscado como lo reflejo en el codigo para que lo muestre?

Ahora, yo quiero hacer que el resultado que me muestre, cuando lo encuentre este por el nombre, este directamente vinculado a otra pagina, y la pagina esta en otro campo distinto, haber por ejemplo (esk no se expresarme bien lo siento xD):
BASE DE DATOS:
FILA
campos: titulo - ficha - vinculo

busco:
carmen
resultados:
titulo - ficha
ejemplos:
carmen alvarez (titulo)- 1950 (ficha)
carmen diaz (titulo)- 1970 (ficha)

ESTO esta hecho

Ahora quiero que los resultados TITULO, sean el campo vinculo k esta en la base de datos, nose si me expreso bien >_<
  #8 (permalink)  
Antiguo 05/01/2009, 17:37
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Buscador PHP mysql

Si $titulo y $ficha no te estan mostrando lo que deseas, primero debes saber lo que estas obteniendo en $filasmod

Código PHP:
$result=mysql_query($cadbusca) or die (mysql_error ()); 
$numregistros mysql_num_rows ($result);

while (
$filasmod mysql_fetch_array($result)) {
  
/* ********** BLOQUE DE PRUEBA ******** */
  // Con esto puedes analizar lo que obtienes en $filasmod
  //    y sabras como asignar $titulo y $ficha
  // Despues de probar borra todo este bloque de prueba
  
echo '<pre>';
  
var_dump($filasmod);
  die(
'</pre>');
  
/* ********** FIN BLOQUE DE PRUEBA ******** */
  
extract ($filasmod); 
  echo 
$titulo." - ".$ficha."<br>";
}
if(
$numregistros == 0)
    echo 
"<p>No se encontraron resultados para la búsqueda $busqueda</p>"
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 05/01/2009, 19:50
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Buscador PHP mysql

yo no quiero saber eso, los resultados si que me muestra son los que quiero, es que cuando salga el titulo de una busqueda, ese titulo este VINCULADO, a una ficha, la cual ficha se saca de otro campo de la misma fila llamado: $link

Se me entiende ahora? xD

perdon por expresarme mal pero es que nose como decirlo xD
  #10 (permalink)  
Antiguo 06/01/2009, 08:55
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Buscador PHP mysql

Hola, me gustaría decirte que estoy en busca de insertar la opción de búsqueda en mi página web. Y me gustaría que me instruyeras con tus progresos actuales, con lo que llevas actualmente, el cómo insertar la barra para que se pueda escribir y demás aspectos. Más bien una opción de búsqueda "Similar" a la de 3djuegos.com, que es la que satisface todas las necesidades de búsqueda, y me gustaría que me enseñaras tus progresos. ¿Podrías ayudarme?

Espero una pronta respuesta. Feliz Año nuevo.
  #11 (permalink)  
Antiguo 09/01/2009, 08:55
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Buscador PHP mysql

Insertar una "barra" en la que poder escribir no es tema de PHP. Eso es HTML puro y duro.
Sería algo como
Código HTML:
<form id="buscaform" action="buscar.php" method="GET">
<label for="buscar">Buscar: </label><input type="text" name="buscar" id="buscar" value="" /><input type="submit" name="submit" value="Buscar" />
</form> 
Si además quieres que ofrezca autocompletar y todo eso (como YouTube ahora) pues busca en JavaScript o AJAX.

En PHP lo que harías es, después de tener todo eso, una página (en el ejemplo, buscar.php) que obtenga los datos del formulario y busque —valga la redundancia— en la base de datos.
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!
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 00:10.