Foros del Web » Programando para Internet » PHP »

Resaltar palabra buscada

Estas en el tema de Resaltar palabra buscada en el foro de PHP en Foros del Web. Hola a todos... Por favor, si alguien me puede ayudar u orientar en esto: Tengo este buscador de mi base de datos y quiero implementar ...
  #1 (permalink)  
Antiguo 14/01/2008, 12:02
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Pregunta Resaltar palabra buscada

Hola a todos...

Por favor, si alguien me puede ayudar u orientar en esto:

Tengo este buscador de mi base de datos y quiero implementar un resaltador de la palabra buscada, es decir, que la presente con un fondo de color como sucede en este foro cuando se busca algo.

Si no me equivoco, por mi situación de novato, se haría con "str_replace". El asunto es de que no me doy cuenta de como implementarlo en este caso de mi buscador... he buscado pero no logro hacerlo.

Gracias y salu2.-

Código:
<div class="buscador">
<form style="margin:0px;" action="buscador.php" method="get">
    <input name="nombre"/>
    <input type="submit" name="buscador" value="Buscar"/>
</form><br />
</div>

<?php
if ( isset( $_REQUEST['nombre']) )
{
    // Tomamos el valor ingresado
    $nombre = trim( $_REQUEST['nombre'] );
}

// Si está vacío, lo informamos, si no, realizamos la búsqueda
if(empty($nombre))
{
    echo "No se ha ingresado Nombre o Apellido";
}else{
    // Conexión a la base de datos y seleccion de registros
    $con = mysql_connect("localhost","root","contraseña");
    mysql_select_db("NombreBD", $con);

    $_pagi_sql = "SELECT
    Apellido,
    Nombre,
    DATE_FORMAT(Nacimiento,'%d-%m-%Y')AS Nacimiento,
    DATE_FORMAT(Fallecimiento,'%d-%m-%Y')AS Fallecimiento,
    (YEAR(fallecimiento) - YEAR(nacimiento)) - (RIGHT(fallecimiento,5) < RIGHT(nacimiento,5)) AS Edadfallece,
    (YEAR(CURRENT_DATE) - YEAR(Fallecimiento)) - (RIGHT(CURRENT_DATE,0) < RIGHT(Fallecimiento,0)) AS Tiempofallece,
    (YEAR(CURRENT_DATE) - YEAR(nacimiento)) - (RIGHT(CURRENT_DATE,5) < RIGHT(nacimiento,5)) AS Edadhoy,
    Url
    FROM listape WHERE Apellido like '%$nombre%' OR Nombre like '%$nombre%' ORDER BY apellido,nombre ASC";


    //cantidad de resultados por página (opcional, por defecto 20)
    $_pagi_cuantos = 20;

    //Incluimos el script de paginación. Éste ya ejecuta la consulta automáticamente
    include("../../estilo/paginator.inc.php");

    //Propagamos la variable $nombre
    $_pagi_propagar = array('nombre');

    // Tomamos el total de los resultados
    // Imprimimos los resultados
    if ( $_pagi_totalReg >= 1 )
    {
        echo "Usted buscó: $nombre";
    ?>

    <table class="listape" summary="Tabla pagina Lista Apellidos">
        <caption>Listado de la Búsqueda</caption>
        <thead>
        <tr>
            <th>APELLIDO</th>
            <th>NOMBRE</th>
            <th>NACE</th>
            <th>FALLECE</th>
            <th>EDAD</th>
            <th>AÑOS</th>
            <th>EDAD HOY</th>
            <th>Info</th>
        </tr>
        </thead>
        <tbody>

    <?php
    //Leemos y escribimos los registros de la página actual
    while($row = mysql_fetch_array($_pagi_result))
    {
        printf("
        <tr>
            <th>%s</th>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
        </tr>
              ",
        $row["Apellido"],
        $row["Nombre"],
        $row["Nacimiento"],
        $row["Fallecimiento"],
        $row["Edadfallece"],
        $row["Tiempofallece"],
        $row["Edadhoy"],
        $row["Url"]
        );
       }
       mysql_free_result($_pagi_result);
       mysql_close($link);
    ?>
        </tbody>
    </table>

    <?php
    echo"Mostrando resultados ".$_pagi_info;
    ?>
    <div class="paginator">
    <?php
    //Incluimos la barra de navegación
    echo"".$_pagi_navegacion."";
    ?>
    </div>
    <?php
    } else {
        // En caso de no encontrar resultados
        echo "No se encontraron resultados para: $nombre";
    }
}
?>
  #2 (permalink)  
Antiguo 14/01/2008, 12:19
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Resaltar palabra buscada

$row = mysql_fetch_array($_pagi_result)

intenta
$resultado=str_replace("$palabra","<font color='#ff000'>$palabra</font>",$row[texto])

echo $resultado
  #3 (permalink)  
Antiguo 14/01/2008, 12:34
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: Resaltar palabra buscada

Gracias nes24 por responder...

Pero no da resultado de esa forma, se me pone el buscador en blanco, salvo que yo lo esté ubicando mal... es que no tengo mucha habilidad con esto!!!

Gracias por tu tiempo.-
  #4 (permalink)  
Antiguo 14/01/2008, 12:53
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Resaltar palabra buscada

¿Se supone que el resultado de tu búsqueda está dentro de las filas de la tabla, cierto? (donde pones Apellido, Nombre, etc...).
Es allí donde debes usar el str_replace.
Personalmente no trabajo con el printf(), así que no estoy segura de dónde allí debiera ir la función de reemplazo. Viendo el código pensé que podría ir algo así:

Código PHP:
    //Leemos y escribimos los registros de la página actual
    
while($row mysql_fetch_array($_pagi_result))
    {
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"printf("
        <tr>
            <th>%s</th>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
        </tr>
              "
,
        
$row["Apellido"],
        
$row["Nombre"],
        
$row["Nacimiento"],
        
$row["Fallecimiento"],
        
$row["Edadfallece"],
        
$row["Tiempofallece"],
        
$row["Edadhoy"],
        
$row["Url"]
        );
       }
       
mysql_free_result($_pagi_result);
       
mysql_close($link); 
Pero yo igual lo hallo medio extraño, como te dije, no sé cómo funciona esta printf()... Yo cuando hago esto me voy campo por campo mostrando, y a cada cual le aplicaría la str_replace, algo como:

Código PHP:
    //Leemos y escribimos los registros de la página actual
    
while($row mysql_fetch_array($_pagi_result))
    {
        print
"  <tr>\n";

        
// Aplico el reemplazo al resultado Campo por Campo 
        // y de paso lo voy imprimiendo en su respectiva celda:
        
for ($i 0$i count(mysql_num_fields($_pagi_result)); $i++)
        {   print
"    <td>".str_replace($nombre"<span class='resaltado'>$nombre</span>"$row[$i])."</td>\n";  }

            print
"  </tr>\n";

       } 
//---Fin del While---

       
mysql_free_result($_pagi_result);
       
mysql_close($link); 
PD: Importante al usar el método que muestro al final es que los campos de la consulta estén en el mismo orden que cómo los mostrarás en tu tabla, claro.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #5 (permalink)  
Antiguo 14/01/2008, 13:41
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: Resaltar palabra buscada

No hay caso quinqui... no puedo lograrlo de esa forma

Habría que saber como incorpora "printf" el "str_replace" o si usa otra forma...

Salu2.-
  #6 (permalink)  
Antiguo 14/01/2008, 14:13
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Resaltar palabra buscada

Uh, qué mal :(
Yo uso el str_replace para miles de cosas y me va bien :(
Espero que encuentres la solución :) Suerte!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #7 (permalink)  
Antiguo 14/01/2008, 14:36
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Resaltar palabra buscada

Prueba así:
Código PHP:
  //Leemos y escribimos los registros de la página actual
 
$salida "<table>";
 
    while(
$row mysql_fetch_array($_pagi_result))
    {
 
$salida .= "<tr>
            <th>"
.$row["Apellido"]."</th>
            <td>"
.$row["Nombre"]."</td>
            <td>"
.$row["Nacimiento"]."</td>
            <td>"
.$row["Fallecimiento"]."</td>
            <td>"
.$row["Edadfallece"]."</td>
            <td>"
.$row["Tiempofallece"]."</td>
            <td>"
.$row["Edadhoy"]."</td>
            <td>"
.$row["Url"]."</td>
        </tr>"
;
}
 
$salida .= "</table>";
 
mysql_free_result($_pagi_result);
mysql_close($link);
// Pintemos
$salida str_replace($nombre"<span class='resaltado'>$nombre</span>",$salida);
 
print 
$salida



Me cuentas.
Saludos
  #8 (permalink)  
Antiguo 14/01/2008, 14:49
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: Resaltar palabra buscada

Hola usermax...

No, lo probé y queda el buscador en blanco... es que si no aparece el "printf"... no hay caso y tampoco se si el printf acepta el str_replace, o si el str_replace va en esa posición.

Saludos.-
  #9 (permalink)  
Antiguo 14/01/2008, 15:15
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Resaltar palabra buscada

Mira, la forma en que no debiera fallarte (porque la acabo de probar en mi equipo) es esta: es muy latosa, porque tienes que aplicar la str_replace a cada valor recibido...

Código PHP:
    //Leemos y escribimos los registros de la página actual
    
while($row mysql_fetch_array($_pagi_result))
    {
        
printf("
        <tr>
            <th>%s</th>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
            <td>%s</td>
        </tr>
              "
,
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Apellido"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Nombre"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Nacimiento"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Fallecimiento"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Edadfallece"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Tiempofallece"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Edadhoy"]),
        
str_replace($nombre"<span class='resaltado'>$nombre</span>"$row["Url"])
        );
       }
       
mysql_free_result($_pagi_result);
       
mysql_close($link); 
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #10 (permalink)  
Antiguo 14/01/2008, 15:27
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: Resaltar palabra buscada

Muchas gracias quinqui...

Si, es latosa, pero efectivamente funciona... además, no se me ocurre como podría ir de una forma más limpia, el inconveniente,supongo yo, está en el "printf"

Nuevamente muchas gracias por tu tiempo!!!

Un saludo grande.-
  #11 (permalink)  
Antiguo 14/01/2008, 15:31
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Resaltar palabra buscada

Qué bueno que resultó entonces :D!
Saludos para ti también :P
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
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 03:13.