Foros del Web » Programando para Internet » PHP »

Ayuda. con buscador php ¿Cómo buscar cadena de texto?

Estas en el tema de Ayuda. con buscador php ¿Cómo buscar cadena de texto? en el foro de PHP en Foros del Web. Hola. si alguien me pudiera ayudar lo agredezco por anticipado. tengo un script buscador en php que me funciona bien. Sólo que quiero que busque ...
  #1 (permalink)  
Antiguo 25/03/2005, 00:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
Ayuda. con buscador php ¿Cómo buscar cadena de texto?

Hola. si alguien me pudiera ayudar lo agredezco por anticipado.
tengo un script buscador en php que me funciona bien.
Sólo que quiero que busque en la base de datos mysql. y despliegue, el texto con cualquiera de las palabras ingresadas en el formulario de búsqueda.

actualmente me despliega sólo la frese exacta. tecleada en el formulario y no presenta nada más.

por ejemplo; si tecleo:
talleres de mecanica.

deseo que me despliegue también:

manuales de mecánica a gasolina
manuales de mecánica a diesel

(debido a que el texto contiene la pálabra "mecánica" que es una de las que se ingresó en el form de búsqueda.)


este es el script buscador completo:

<html><head><title> Buscador </title></head>

<body text="#000000" bgcolor="#cccccc">
<font face="verdana" size=2>

Introduce el texto de búsqueda:

<form action="<?=$PHP_SELF?>" method="post"><p>
<input type="text" name="busca" size="30" maxlength="255">
<input type="submit" name="submit" value="ir">
</form>



<?php

//comprueba que el form no se mande vacio
if(isset($submit))
{
echo "debes especificar una cadena de texto a buscar";
echo "</html></body> \n";
exit;
}
//cierre de comprueba que el form no se mande vacio


//script de conexión
$dbcnx = @mysql_connect("localhost", "piolin", "delrio");
if (!$dbcnx)
{
echo( "<p>No es posible establecer conexión");
exit();
}

if (! @mysql_select_db("piolin_alumnos") )
{
echo( "<p>No es posible conectar con la base de datos.</p>" );
exit();
}
?>
//cierre script de conexión



<?php

//criterios de búsqueda
while(!$result)
{
$result = @mysql_query("SELECT * FROM alumnos WHERE nombre LIKE '%$busca%'");
}

$result = @mysql_query("SELECT * FROM alumnos WHERE nombre LIKE '%$busca%'");

if (!$result)
{
echo("<p>Error performing query: " . mysql_error() . "</p>");
exit();
}
//cierre de criterios de búsqueda


//despliegue de array
while ( $row = mysql_fetch_array($result) )
{
echo("<p><font color=green> título:</font> " .
$row["nombre"] ."<font color=green><br> autor:</font> " .
$row["apellido"] . "<font color=green><br>código:</font> " .
$row["email"] . " <font color=green><br> precio:</font> " .
$row["nacimiento"] . "<br><bR><bR>");
}
//cierre de despliegue de array


$busca=0

?>
</body></html>
  #2 (permalink)  
Antiguo 25/03/2005, 01:43
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
:séveR led onieR le edsed sodulaS

Antetodo Bienvenido al foro!.... Contestando concretamente a tu pregunta... necesitas primero dividir la frase en palabras y hacer la busqueda de todas las palabras... Para dividir puedes utilizar explode() ... luego necesitas gererar tu busque tipo LIKE '%palabra1%' OR LIKE '%palabra2%' ... puedes usar implode()... Un ejemplo sería algo como:
Código PHP:
<?php
$frase
="Taller de mecanica"// donde $frase seria la cadena recibida
$palabrasexplode(" "$frase);
$buscarimplode("%' OR LIKE '%"$palabras);
echo 
"SELECT * FROM alumnos WHERE nombre LIKE '%".$buscar."%'";
?>
... bueno... espero entiendas y eso contestando concretamente a tu pregunta.. más, en el mismo ejemplo... en tu frase tienes la palabra "de" ... que igual se buscará.. entonces sería conveniente hacer antes unas validaciones... podrias ocupar:
strlen() <- que devuelve los caracteres de una cadena (tu palabra) .. así podrias excluir de la consulta palabras "cortar"...
in_array() <- que revisa si un valor existe en una matriz... y así podrias crear un arreglo con palabras "comunes" ...
combinando estas funciones y condicionales tipo if() optimizarias tu buscador... pero bueno, cuestión tuya.

Para consultar estas funciones buscalas en www.php.net ... La mejor de las suertes!

Edito:
Este foro tiene buenas funciones en el editor de mensajes para hacer más fácil la lectura.. como el citar ó iluminar código (lo que hice yo).. date un tiempo para probarlo...
Además te invito a sacarle probecho al buscador del foro; resulta un gran recurso... seguramente alguien habrá de tener tus mismas dudas... si ya se ha planteado un tema seguro lo encontrarás...
Reitero mi bienvenida.. espremos verte seguido.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 25/03/2005 a las 01:50
  #3 (permalink)  
Antiguo 25/03/2005, 14:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
Gracias! es un foro excelente. Recién estoy aprendiendo php. el código buscador viene en el libro, y lo estoy modificando, optimizando para mí. Voy probar más tarde, el trozo de código que me has dado. La exclusión de las freses "de" en los criterios de búsqueda iba a ser una pregunta futura. Gracias por responderla anticipadamente, igual no entiendo las funciones recomendadas, pero las consultaré y seguro daré con el hilo, si no, acudo al foro. Voy navegar por el buscador más tarde, según me recomiendas. a ver que encuentro. Espero algún día poder responder algunas preguntas posteadas en este foro, para ponerme a mano con la ayuda. Y el valioso tiempo de las respuestas de ustedes.
.: [ jam1138 ] :. Gracias, Gracias, Gracias.
  #4 (permalink)  
Antiguo 25/03/2005, 20:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
Hola jam1138. ya coloqué las instrucciones que me diste, he hice algunos cambios una y otra vez y no anda el buscador, seguro hice algo mal.
por otro lado, me interesa buscar cualquier palabra introducida en el form, y no sólo "Taller de mecanica". Podrías iluminarme?
Gracias.

<html><head><title> Buscador </title></head>

<body text="#000000" bgcolor="#cccccc">
<font face="verdana" size=2>

Introduce el texto de búsqueda:

<form action="<?=$PHP_SELF?>" method="post"><p>
<input type="text" name="busca" size="30" maxlength="255">
<input type="submit" name="submit" value="ir">
</form>



<?php

//comprueba que el form no se mande vacio
if(isset($submit))
{
echo "debes especificar una cadena de texto a buscar";
echo "</html></body> \n";
exit;
}
//cierre de comprueba que el form no se mande vacio


//script de conexión
$dbcnx = @mysql_connect("localhost", "piolin", "delrio");
if (!$dbcnx)
{
echo( "<p>No es posible establecer conexión");
exit();
}

if (! @mysql_select_db("piolin_alumnos") )
{
echo( "<p>No es posible conectar con la base de datos.</p>" );
exit();
}
?>
<!--cierre script de conexión-->




<?php

$frase=""; // donde $frase seria la cadena recibida
$palabras= explode(" ", $frase);
$buscar= implode("%' OR LIKE '%", $palabras);
echo "SELECT * FROM alumnos WHERE nombre LIKE '%".$buscar."%'";


//criterios de búsqueda
while(!$result)
{
$result = @mysql_query("SELECT * FROM alumnos WHERE nombre LIKE '%$busca%'");
}

$result = @mysql_query("SELECT * FROM alumnos WHERE nombre LIKE '%$busca%'");

if (!$result)
{
echo("<p>Error performing query: " . mysql_error() . "</p>");
exit();
}
//cierre de criterios de búsqueda


//despliegue de array
while ( $row = mysql_fetch_array($result) )
{
echo("<p><font color=green> título:</font> " .
$row["nombre"] ."<font color=green><br> autor:</font> " .
$row["apellido"] . "<font color=green><br>código:</font> " .
$row["email"] . " <font color=green><br> precio:</font> " .
$row["nacimiento"] . "<br><bR><bR>");
}
//cierre de despliegue de array



$busca=0

?>
</body></html>
  #5 (permalink)  
Antiguo 25/03/2005, 23:46
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... ... así a simple vista no recojes la variable y tienes un error con isset().

... ¿qué versión de PHP usas?? ... porque muchas de las cosas que veo ahí, ya no son válidas para las versiones 4.03 (creo) en adelante...
repito: tienes etiquetas [ PHP] y [ /PHP] (sin espacios) para iluminar código..
Código:
// primero si tu versión es posterior a la 4.03 cambia esto:
// <form action="<?=$PHP_SELF?>" method="post">
// por esto:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">

// posteriormente.. busca las funciones isset() y empty() en www.php.net y ve por qué debes cambiar esto:
// if(isset($submit))
// por esto:
if (empty($_POST['busca']))
// lo mismo, para versiones posteriores a la 4.03... si no es así sigue poniendo solo el nombre de la variable.. Ojo!, comparo el textbox, no el botón submit

// y asignas el valor así
$frase= $_POST['busca']; // donde 'busca' es el name de tu textbox
Espero te ayude...

Consejo.. si eres nuevo pasate por las FAQ.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 25/03/2005 a las 23:48
  #6 (permalink)  
Antiguo 26/03/2005, 13:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
RAMPA, para el tipo de busqueda que tu necesitas te recomiendo que lees lo sigueinte:

http://www.mysql-hispano.org/page.php?id=15
  #7 (permalink)  
Antiguo 26/03/2005, 16:06
 
Fecha de Ingreso: marzo-2005
Ubicación: cd. victoria, tamps, mexico
Mensajes: 53
Antigüedad: 12 años, 8 meses
Puntos: 0
Exclamación

Creo que el error es que debes recojer la variable del formulario y remplazarla por el de la variable que te dieron anteriormente, es decir, si tu campo de busqueda se llama buscar, pues por lo tanto... deberias poner algo asi como...

Código PHP:
$variable $HTTP_POST_VARS["buscar"]; 

¿Porque buscar entre parentesis?
Porque es el nombre del campo de texto que estas utilizando para buscar un texto, ylo recoje, y despues que lo recoje lo debes utilizar para que compara en tus tablas de SQL los resultados coincidentes, como te lo explicaron anteriormente, lo unico que tienes que hacer es que recoja la variable y es todo

saludos!!
  #8 (permalink)  
Antiguo 28/03/2005, 03:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
hola hasta hoy pude entrar al foro, ya copie todas las indicaciones que me dierón y las guarde, voy a trabajar sobre ello, en los próximos días. agradezco a las siguientes personas:
jam1138
pellagofio
ricardo17

que se molestarón en responder a mi mensaje
Gracias Muchachos! luego nos veremos por aquí, a ver como me va con este buscadorcillo. ahorita veo color verde el botoncito que está al lado del nick, creo que jam se ha conectado, no sé que anda haciendo a esta hora, son las 4 de la mañana, a lo mejor anda cargado de trabajo igual que yo. gracias amigo!!
  #9 (permalink)  
Antiguo 28/03/2005, 04:07
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Iniciado por RAMPA
(...) creo que jam se ha conectado, no sé que anda haciendo a esta hora, son las 4 de la mañana, a lo mejor anda cargado de trabajo igual que yo (...)
... aunque no están para saberlo... formatié mi maquina y estoy actualizando ( mi conexión es lenta)... y mientras me pase por el foro, resuelvo unos problemas de cálculo (:-s mañana regreso a clases y tengo 2 exámenes), y navego por la red... http://danielaelastica.blogspirit.com/ <- salió del foro de críticas... y no hago spam ni publicidad....

... como rinde la noche!!! . Saludos! ...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 11:35.