5.May.2007
Recomienda este artículo Versión imprimible

Publicado por MijT en PHP y MySQL | 2768 Lecturas | 4 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!.

Enlaces relacionados

Avatar de prueba prueba comentó:
El 23 de Feb. del 2008 a las 00:23
Cita:
esta es una cita citar

•Hola
•Mundo

prueba
al centro

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....!!!

Guía BBCode

Comentar este artículo


COMPÁRTELO

Enviar a Del.icio.us Enviar a Technorati Enviar a Barrapunto Floréalo Menéalo Enviar a Webéame Enviar a Digg Enviar a Fresqui Enviar a Blogmemes Enviar a Furl Enviar a NeoDiario Enviar a LinkRoll

VALORARARTÍCULO

VEATAMBIÉN






PRONTO EN CANALPERU

Si deseas saber más, entra a CanalPeru.NET

Suscríbete y recibe nuestras noticias en tu Email:

Delivered by FeedBurner

Feedburner

BÚSQUEDAS

GALERÍA

Censurado en la China... What!! DJ Tiesto Gustavo Cerati. El Último concierto. Soda Stereo.
Soda Stereo "Me verás volver" Aguante Soda!! Mi compu y otros cachibaches xD Evanescence en París 2004

SÍGUEME EN TWITTER

Cuando un geek muere, su tumba -obviamente- se debe diferenciar de las otras http://www.rarurl.com/tumbageek xD

@TheGhost 2 semanas desconectado del mundo y me vuelvo a enfermar, creo que el internet me afecta, habrá "Kaspersky" en pastillas? xD

Por enésima vez... agripado!!!

Firefox 3... un desastre!! http://rarurl.com/jEYIwL

Nuestra bandera ya está en 1er lugar, a seguir votando!! http://www.rarurl.com/9UOzz

que rico estuvo el estofado!

@TheGhost amén

@TheGhost admiro tu fé en esa tira de inútiles xD

Nace RarURL, otra alternativa para comprimir URLs extensas http://www.rarurl.com/q0GQ

TwitterCounter, cuántos te siguen en Twitter http://www.rarurl.com/ZwU6Lh

Agrégame en Twitter

CATEGORÍAS


ENCUESTAS

¿Quién crees que fue o es el "Rey del Rock" a nivel mundial?
Elvis Presley
Freddy Mercury(Queen)
Mick Jagger(Rolling Stones)
Steven Tyler(Aerosmith)
Bono(U2)
Jon Bon Jovi(Bon Jovi)
Jimi Hendrix
Ozzy Osborne
Eric Clapton
David Bowie
Jimmy Page(Led Zeppelin)

VIDEO MÁS VISTO EN CANALPERÚ


PUBLICIDAD


DIRECTORIO

VISITAS

Estadísticas de visitas

USUARIOSONLINE

Registrados: 0
Invitados: 46
Total: 46

ENLACES

Monetize your web site

SINDICACIÓN

  • Sindicación RSS
  • Suscribir con Bloglines
  • Agregar a Mi Yahoo!
  • Agregar a Google
  • Agregar a Live.com
  • Agregar a Netvibes
  • Agregar a My AOL
  • Agregar a tus favoritos de Technorati


Últimos comentarios

  • penetrador: hola karen agregame si amor coyote74_150
  • penetrador: hola dejame decirte q eres loa mujer mas
  • Esther: como hackear el ipod con la version 1.1.
  • iTorke: Bueno, a ver, yo quiero actualizar a la
  • MijT: [cita]A pesar de la rica publidad me ked
  • lois : A pesar de la rica publidad me kedo con
  • luisraygoza: por favor!!! Se los ruego diganme con qu
  • JAY: hola, ojala puedan ayudarme por favor..
  • tribilin: Muy bonita la chica lastima que le guste
  • CARITO: soy orgullosa de ser peruana hasta la mu


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