5.May.2007
Publicado por MijT en PHP y MySQL | 2768 Lecturas | 4 comentarios
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.
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!.
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
El 23 de Feb. del 2008 a las 00:23
Cita:
esta es una cita citar
esta es una cita citar
•Hola
•Mundo
prueba
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
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]));
}
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
PRONTO EN CANALPERU
Si deseas saber más, entra a CanalPeru.NET
BÚSQUEDAS
GALERÍA
|
|
|
|
|
|
|
|
|
|
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
CATEGORÍAS
- Actualidad (11)
- AJAX (0)
- CelulaWeb.NET (7)
- Cine y TV (40)
- CSS (2)
- Deportes (63)
- Descargas (16)
- Diseño (7)
- Eventos (7)
- Gadgets (75)
- Informática (105)
- Internet (173)
- Juegos y Consolas (19)
- Multimedia (2)
- Música (22)
- Off Topic (29)
- PHP y MySQL (6)
- Seguridad (37)
- Software Libre (19)
- XHTML (1)
BLOGROLL
ENCUESTAS
¿Quién crees que fue o es el "Rey del Rock" a nivel mundial?
VIDEO MÁS VISTO EN CANALPERÚ
- Título: Telekinesis
- Álbum: Soda Stereo
- Intérprete: Soda Stereo
- 2616 visitas | 0 comentarios
- 98 votos recibidos | 912 puntos























