Foros del Web » Programando para Internet » PHP »

Problema con buscador que resalta resultados

Estas en el tema de Problema con buscador que resalta resultados en el foro de PHP en Foros del Web. Hola necesitaba que me ayuden. Mas abajo les muestro un código que obtuve en esta pagina [URL="http://www.forosdelweb.com/f18/remarcar-palabras-busqueda-487357/"]http://www.forosdelweb.com/f18/remarcar-palabras-busqueda-487357/[/URL]. El problema en mi código es que muestra ...
  #1 (permalink)  
Antiguo 26/09/2013, 21:29
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 3 meses
Puntos: 0
Problema con buscador que resalta resultados

Hola necesitaba que me ayuden.
Mas abajo les muestro un código que obtuve en esta pagina [URL="http://www.forosdelweb.com/f18/remarcar-palabras-busqueda-487357/"]http://www.forosdelweb.com/f18/remarcar-palabras-busqueda-487357/[/URL].
El problema en mi código es que muestra la leyenda " Se han encontrado coincidencias para" pero después de la palabra "encontrado" tendria que mostrar los datos de la base de datos (<strong><?=$mostrar?></strong>) y despues de "para" tendria que mostrar la palabra ingresada en el formulario (<strong><?=$palabra?></strong>).
Lo he revisado varias veces pero no descubro porque no funciona correctamente.

Código PHP:
<?php 
    
require_once('Connections/MiSitio.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) { 
        
$aux=$reemp=str_ireplace($palabra,'%s',$texto); 
        
$veces=substr_count($reemp,'%s'); 
        if(
$veces==0)return $texto
        
$palabras_originales=array(); 
        for(
$i=0;$i<$veces;$i++){ 
              
$palabras_originales[]='<strong>'.substr($texto,strpos($aux,'%s'),strlen($palabra)).'</strong>'
              
$aux=substr($aux,0,strpos($aux,'%s')).$palabra.substr($aux,strlen(substr($aux,0,strpos($aux,'%s')))+2); 
        } 
        return 
vsprintf($reemp,$palabras_originales); 
  }  
     
    
// 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 "videos"
            
$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="Untitled-1.php" method="post"> 
        <input name="palabra" type="text" /> 
        <input name="buscar" type="submit" value="Enviar" /> 
    </form> 
<?php 
    

?>
Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 26/09/2013, 21:38
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: Problema con buscador que resalta resultados

cambia el '=' por echo

Código PHP:
Ver original
  1. Se han encontrado <strong><? echo $mostrar?></strong> coincidencias para <strong><? echo $palabra?></strong>
  #3 (permalink)  
Antiguo 27/09/2013, 06:16
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Problema con buscador que resalta resultados

No tiene que cambiar nada, solo agregar el ; despues de la variable
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #4 (permalink)  
Antiguo 27/09/2013, 12:29
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Problema con buscador que resalta resultados

Muchas gracias starfix y SkAr88 por sus sugerencias.
Pero ninguna de las 2 opciones me sirvió, solo logre que apareciera un punto negro resaltado después de la palabra "para"
Seguiré intentando ......espero encontrar el error, supongo que debe estar en las variables pero no me doy cuenta.
  #5 (permalink)  
Antiguo 27/09/2013, 13:24
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: Problema con buscador que resalta resultados

Hola, veo muchas cosas malas.

Recomendaciones.
Esto no hace lo que tu crees que hace. Cambialo.
Usa por lo menos mysql_real_escape_string().
Código PHP:
Ver original
  1. $palabra = stripslashes($_POST['palabra']);
  2.             $palabra = strip_tags($palabra);

Usa una revision de errores de la sentencia sql.
mysql_error().

Intenta cambiar a mysqli.

Saludos

Etiquetas: favor, formulario, mysql, resaltar, resultado, select, sql, tabla
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 20:16.