Recomienda este artículo Versión imprimible Resaltar palabras en una búsqueda a MySQL
Publicado por MijT en PHP y MySQL | 3237 Lecturas | 3 comentarios
(3.25 ptos. de 4 votos.)
El día de ayer se me ocurrió realizar un script para hacer búsquedas en una tabla de MySQL que permitiera resaltar las palabras ingresadas, algo parecido a lo que hacen Google y otros búscadores y pues empecé a buscar algo de información para llevarlo a cabo, sin resultados satisfactorios, claro, quizás no sea muy bueno buscando cosas, lo acepto, pero de tanto buscar me aburrí y empecé a hacer uno por mi cuenta, logré conseguir hacer algo, pero no funcionaba al 100% es decir que cuando realizaba una búsqueda me resaltaba las palabras escritas exactamente igual a como lo había escrito en el formulario de búsqueda.

Muchos expertos al leer este artículo -si es que lo llegaran a leer- dirán, pero porqué no usar la función str_ireplace() de PHP para hacerlo si esta función como lo dice el manual "devuelve una cadena o una matriz con todas las ocurrencias de busqueda en asunto (ignorando mayúsculas y minúsculas) sustituidas por el reemplazo dado". Sí, es verdad pero esa función sólo está disponible para PHP5 y mis proyectos corren en un servidor externo con PHP 4.x y pues tuve que ingeniármelas y crear una función para lograr lo que quería. Fue así que entré en ForosdelWeb.com una comunidad de desarrolladores web en la que frecuento y expuse mi duda, ahí surgió un usuario de nick panino5001 a quien también conozco de la web PHP-Hispano.NET y me ayudó a optimizar la función de resaltado de texto para obtener lo que quería con este script que ahora lo pongo a disposición de aquellos que también se encuentran buscando algo parecido.

<?php
    
include('bdconex.php'); // Este archivo contiene los datos de conexión a MySQL
    
    // Creamos una función que resaltará todas las palabras que coincidan con la búsqueda realizada. Gracias a panino5001 de forosdelweb.com por ayudarme a optimizarla
    
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 "nombre_tabla"// aquí pones el nombre de la tabla a la que deseas consultar
            
$campo "nombre_campo"// aquí pones el nombre del campo de la tabla a la que deseas consultar
            
            // 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 enviada
            
$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"];
?>            
                <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
    
}
?>


Ahí lo tienen, lo que hace el script es realizar una búsqueda a una tabla y campo determinados y devolver los resultados encontrados con las palabras ingresadas resaltadas en negrita(también se le puede colorear) de una manera similar a los resultados de Google, es lógico que este script se puede mejorar, pero tal como está ahora funciona muy bien, agradezco nuevamente a panino5001(Forosdelweb.com) o panino(PHP-Hispano.NET) por ayudarme a optimizar la función de resaltado de texto, te pasaste brother!.
Compártelo:
Enviar a Del.icio.us Enviar a Technorati Enviar a Barrapunto Floréalo Enviar a Menéame Enviar a Facebook Enviar a Google Bookmarks Enviar a Yahoo! Enviar a Bitacoras Enviar a Webéame Enviar a Digg Enviar a Fresqui Enviar a Furl Enviar a NeoDiario

Enlaces relacionados

3 Comentarios a: Resaltar palabras en una búsqueda a MySQL
Avatar de Carlos Enrique P Carlos Enrique P comentó:
El 23 de Oct. del 2007 a las 00:27
Como hago tengo problemas ya que mi motor de busquedas debe ser con acentos y no logro que la funcion las relaciones ejemplo América, america dice que son palabras distintas como hago yo estoy usando la funcion FULLTEXT de mysql que me permite buscar sin tomar encuenta los acentos por ende no tengo problemas
Avatar de damian damian comentó:
El 31 de Ago. del 2007 a las 20:51
esto no es lo mimso ??


for($result->MoveFirst();!$result->eof;$result->MoveNext()){
$i++;
if($result->field('rslt')!=0){
$resumen[$i]=$result->field('notResumen');
for($a=0;$a<count($Busqueda);$a++){
$resumen[$i]=str_replace(strtolower($Busqueda[$a]),"<span class=\"busqueda\">".ucfirst($Busqueda[$a])."</span>",strtolower($resumen[$i]));
}
Avatar de Adex Adex comentó:
El 31 de Ago. del 2007 a las 09:23
Gracias maestro por este material, ami me sirve a chorros la neta.. no se como agradecerte ya me daré un tiempo para escrbirte un MP

Saludos y gracias nuevamente....!!!
Comenta este artículo

Nos encantaría que dejaras tu comentario acerca de esta entrada, pero para ello debes tener en cuenta lo siguiente:

  • No escribas todo el texto en mayúsculas.
  • Procura que tus comentarios estén relacionados con lo que se ha publicado en esta entrada.
  • Respeta a los demás lectores de este blog. Si hay algún comentario que no es de tu agrado, expón tus ideas de forma alturada.
  • No utilices groserías en tus comentarios.

Los comentarios que incumplan los puntos mencionados serán eliminados inmediatamente.

Para escribir tu comentario dispones de un editor de texto para agregar negrita, cursiva, subrayado, links, etc. Si no sabes cómo usarlo, entra aquí

Valorar Artículo
Vea también
Búsquedas

Suscríbete y recibe noticias en tu Email:

Delivered by FeedBurner

OtrosProyectos
  • CanalPeru.NET: Foros, Noticias, Encuestas, Galería de fotos y mucho más
  • RarURL - Comprime URLs extensas fácilmente
  • Cinespectaculo.Com
  • Desorbitados: La nueva televisión
Encuestas
¿Cuál es la marca de tu celular?
Alcatel
Apple (iPhone)
Blackberry
HTC
LG
Motorola
Nokia
Palm Treo
Samsung
Siemens
Sony Ericsson
No tengo celular
Publicidad

Visitas
Estadísticas de visitas
UsuariosOnLine
Registrados: 0
Invitados: 16
Total: 16



Últimos comentarios

  • pablo: eta bueno para saber con que clase de chicas nos v
  • cuervo: muy bueno te agradezco por la ayuda ya que algunos
  • miguel palomino : hola Karen ,sabes..................aparte de ser u
  • juan noriega: mi recomendacion son : it - ese payaso si que d
  • MijT: Hola Brenda, la verdad que no sé exactamente a qué


Login Subir
© 2007 CélulaWeb.NET | Desarrollado por César Aquino(MijT) | Agradecimiento a PHP-Hispano.NET