Ver Mensaje Individual
  #14 (permalink)  
Antiguo 05/05/2007, 12:16
Avatar de Panino5001
Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 22 años, 5 meses
Puntos: 834
Re: Remarcar palabras en una búsqueda

En ese caso, para no complicar las cosas, podrías probar así:
Código PHP:
<?php
    
include('bdconex.php'); // Este archivo contiene los datos de conexión a la BD
    
    // creamos una función que resaltará todas las palabras que coincidan con la búsqueda realizada
    
if(!function_exists('str_ireplace')) {
    function 
str_ireplace($search,$replace,$subject) {
    
$search = preg_quote($search, "/");
    return 
preg_replace("/".$search."/i", $replace, $subject); } }
    
    function 
resaltar($palabra, $texto) {
         return 
str_ireplace($palabra,'<strong>'.$palabra.'</strong>',$texto);
    }
    
    
// iniciamos el proceso de búsqueda
    
if (isset($_POST["buscar"])) {
        if(
$_POST['palabra'] == '') {
            echo 
"No has ingresado ninguna palabra a buscar <a href='javascript:history.back()'>Regresar</a>";
        }else {
            
$tabla = "noticias";
            
$campo = "titulo";
            
            
// quitamos cualquier código malicioso de $_POST['palabra']
            
$palabra = stripslashes($_POST['palabra']);
            
$palabra = strip_tags($palabra);
            
            
// hacemos la consulta a la base de datos según la palabra encontrada
            
$query = mysql_query("SELECT * FROM $tabla WHERE $campo LIKE '%".$palabra."%'");
            
$mostrar = mysql_num_rows($query); // obtenemos la cantidad de coincidencias encontradas
            
if(mysql_num_rows($query) == "0") {
                echo 
"No hay coincidencias encontradas para <strong>".$palabra."</strong> <a href='javascript:history.back()'>Regresar</a>";
            }else {
?>
                Se han encontrado <strong><?=$mostrar?></strong> coincidencias para <strong><?=$palabra?></strong>
<?php            
                
while($datos = mysql_fetch_array($query)) {        
                    
$str = $datos["titulo"];
                    
//$pal = array($palabra);
?>            
                <ul>
                    <li><?=resaltar($palabra, $str)?></li>
                </ul>
<?php
                
}
            }
        }
    }else {
?>
    <form action="buscar.php" method="post">
        <input name="palabra" type="text" />
        <input name="buscar" type="submit" value="Enviar" />
    </form>
<?php
    
}
?>
La desventaja es que no se conserva el formato original de la cadena. Igual, se podría modificar la otra función para que haga todos los reemplazos manteniendo la palabra en el formato original, sólo que ahora no tengo tiempo como para ver cómo lograrlo ;)