Avatar Image
Usuario habitual
Usuario habitual

Saludos, tengo un buscador y me gustaria que en los resultados de la busqueda aparezca en negritas las coincidencias con las palabras que fueron ingresadas en el campo de busqueda.

Es decir, que en los resultados muestre en negritas las palabras que escribio el usuario.

Espero entiendan a lo que me refieron.

Avatar Image
Usuario habitual
Usuario habitual

Sustituye el texto a buscar con el texto+los tags HTML de negritas.

Por ejemplo, si estás buscando el contenido de la variable $palabra_a_buscar dentro de la variable $texto...

$texto=str_replace ( $palabra_a_buscar, '<b>'.$palabra_a_buscar.'</b>', $texto);

Saludos.

Avatar Image
Usuario habitual
Usuario habitual

Hola caid, gracias por tu respuesta, pero creo que sigo sin arreglar el problema, podrias por favor darme un ejemplo, un codigo uqe peuda ayudarme a ver mas claro el asutno, es que lo hice asi como me dices y pues no me muestra nada.

Por favor, explicame un poco mas claro, a ver si entiendo si?

Muchisimas gracias.

Avatar Image
Usuario habitual
Usuario habitual

Bueno, imagina que el usuario introduce las palabras de búsqueda desde un formulario. Tu almacenas esas palabras en la variable $palabra_a_buscar. Supón que el usuario ha introducido 'Hola'

Tu buscador hace una búsqueda de mensajes en la BBDD. Encuentra un mensaje que contiene 'Hola', y lo almacena en la variable $texto. Supón que $texto='Hola que tal'

Bien, pues ahora hay que mostrarle el resultado de la búsqueda al usuario. Una forma de hacerlo sería esta:

echo "<p> Mensaje que contienen $palabra : $texto </p>"

Esto escribiría "<p>Mensajes que contienen Hola: Hola que tal</p>". Para poner el segundo "Hola" en negritas, hay que introducir los tags de html <b> y </b> alrededor de la palabra "Hola". La forma más sencilla de hacer esto es sustituir "Hola" por "<b>Hola</b>".

$texto=str_replace ( $palabra_a_buscar, '<b>'.$palabra_a_buscar.'</b>', $texto);
echo "<p> Mensaje que contienen $palabra : $texto </p>"

Esto sacaría "<p>Mensajes que contienen Hola: <b>Hola</b> que tal</p>" ; es decir, los resultados de la búsqueda con la palabra buscada en negritas.

Saludos.

Avatar Image
Usuario habitual
Usuario habitual

Hola Caid, muchisimas gracias por tu ayuda, ya gracias a ti he podido solucionar el problema. Ya las coincidencias aparecen en negritas, o bueno, como quiero que aparezcan, las pongo que aprezcan en azul y negrita.

Ademas lo arregle para el titulo de las webs, es que tengo un motor de busqueda y pues, me faltaba ese toque. De verdad muchisimas gracias man.

Aunque no se si se puede arreglar otro inconveniente, Es que no tome en cuenta las minusculas y mayusculas, es decir, si el usuario escribe "Hola Mundo" y en la BBDD esta "hola mundo", pues no lo marca, hay alguna forma de hacerlo?

Si la hay estaria bien. Pero de todas formas gracias man.

Un saludo.

Avatar Image
User 390661
@man / @woman
@man / @woman

si es una base de datos pues modificas el query
where campo_donde_buscas like '%$words%'

Avatar Image
Usuario habitual
Usuario habitual

Para eso tendrás que usar expresiones regulares. Cambia la orden str_translate por :

$texto= preg_replace ("/($palabra_a_buscar)/i", "<b>$1</b>", $texto);

Tienes otra alternativa. Las últimas versiones de PHP 5 incorporan la función str_ireplace. Hace lo mismo que str_replace pero ignora la diferencia entre mayúsculas, y es más rápida que preg_replace. Lo malo es que no está disponible en PHP 4

Saludos.

PD1 Usando expresiones regulares puedes hacer cualquier cosa con una cadena, aunque su sintaxis es un infierno.

Avatar Image
Usuario habitual
Usuario habitual

Hola Caid!!!

Muchas gracias man, mi buscador ahora esta de lujos Muchas risas.

Me funciona perfectamente con este nuevo código. Ahora me cambiar al formato que deseo y toma en cuenta mayusculas o minusculas o si todas estan mayusculas. Todo perfecto man.

Gracias de nuevo.

Una coriosidad man, sabrias algo sobre como utilizar un diccionario para si el usuario se equivoca ofrecerle algo como "Quiso decir ....?

Bueno, esto si está dificil, pero si tienes por lomenos alguna idea genial.

Muchisimas gracias por tu ayuda.

Un saludo.

Avatar Image
Usuario habitual
Usuario habitual

Sí, se puede hacer y no es muy difícil, aunque si es algo lento.

¿Sabes lo que es la distancia de Levenshtein entre dos cadenas de texto? Es el número de caracteres que hay que insertar, modificar y/o borrar para transformar una cadena en otra. Por decirlo de otra forma, es lo que se parece una cadena de texto a otra.

Bien, pues eso puedes calcularlo en PHP usando la función levenshtein(cadena1, cadena2)

Entonces, ¿cómo puedes sacar las coincidencias similares a lo que ha introducido el usuario?. Muy sencillo:

1- Usando un select, cargas TODAS las cadenas de texto donde quieres buscar.

2- Usando un bucle, vas comparando la palabra a buscar que ha metido el usuario con cada una de las cadenas de texto que recuperaste en el paso 1.

Aquellas cuya distancia de Levenshtein (levenshtein($palabra_a_buscar, $texto) ) sea menor que un valor determinado, puedes sacarlo como "quiso decir...".

Saludos.

Avatar Image
Usuario habitual
Usuario habitual

Hola de nuevo Caid!!!

He leido tu explicacion muchas veces y creo que ya entendi, ahora solo me falta conseguir un diccionario e introducirlo en la base de datos.

Aunque sería mas conveniente utilizar un archivo de texto para sacar la palabra a mostrar en el "Quiso decir...?"

Esta opcion ya complica un el codigo PHP para hacer funcionar el sistema, aunque seria lo mas conveniente para no cargar mucho la base datos con miles de palabras.

Pero antes de poner a funcionar esta opcion, creo que se me ha presetado otro inconveniente en el buscador. Sucede que al buscar una palabra, pues funciona bien, pero solo con una, si introduzco en el campo de busqueda una cadena de texto, a saber "Hola gente de todo el mundo", pues no me marca en negrita las coincidencias, por ejemplo "mundo", "gente", etc.

Solo me marca en negrita cuando escribo "gente" solamente, es decir, si escribo una PALABRA funciona bien, pero si escribo una cadena de texto me muestra todos los resultados normales, pero no me marca en negritas las coincidencias.

Hay alguna forma de arreglar este problema? Talvez cambiando la forma de hacer el query en la BBDD??

Un saludo.

Avatar Image
Usuario habitual
Usuario habitual

Bueno, realmente no necesitas un diccionario. Con comparar entre lo que ha metido el usuario, y el texto donde quieres buscar (por ejemplo, entre los mensajes de un foro) , vale.

Lo de que no te ponga en negritas cada una de las palabras ... pues claro Sonrisa Usa la función explode() para separar las palabras de $palabra_a_buscar, y luego usa un bucle para poner en negritas cada una de esas palabras.

angela_henao
Usuario Novato
Usuario Novato
hola a todos, soy nuevo en esto de las consultas a las besas de datos loco y quisiera saber como hago o donde puedo conseguir información buena y rápida para crear una pagina que muestre consultas de usuarios a una base de datos en mi servidor, yo uso Linux Mandrake 9.0, gracias de antemano (los campos son muy faciles como: salon viedobean profesor reservado etc.) gracias de antemano por cualquier sugerencia Sonrisa Gigante
Avatar Image
Usuario habitual
Usuario habitual
Escrito originalmente por speetean
hola a todos, soy nuevo en esto de las consultas a las besas de datos loco y quisiera saber como hago o donde puedo conseguir información buena y rápida para crear una pagina que muestre consultas de usuarios a una base de datos en mi servidor, yo uso Linux Mandrake 9.0, gracias de antemano (los campos son muy faciles como: salon viedobean profesor reservado etc.) gracias de antemano por cualquier sugerencia Sonrisa Gigante


Pues yo te aconsejeria que postes tu mensje como un nuevo tema. ya que sale de contexto con el tema original. A proposito de tu problema, vas a necesitar mucho codigo para solucionar tu problema.
ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Opciones:
Ir al subforo:
Permisos:
TU NO PUEDES Escribir nuevos temas
TU NO PUEDES Responder a los temas
TU NO PUEDES Editar tus propios mensajes
TU NO PUEDES Borrar tus propios mensajes
Temas similares
No se han encontrado temas similares