encontre este buscador en webtaller:
Código PHP :
<? /******************************************************************** buscador.php - Programado por carlos arjona - [email protected] Notas: el buscador pide 2 variables pasadas por GET, y son las siguientes: $sec -> esta define la seccion en la que buscaremos. Si se desea buscar en todas las secciones hay que pasarle $sec = "TODAS" $q -> esta variable es una cadena que contiene el texto de busqueda Espero que este codigo te sea de ayuda, y si tienes algun problema no dudes en contactar conmigo o simplemente en dejar un comentario en mi pagina. De todos modos debo decirte que el codigo que aquí ves es exactamente el mismo que utilizo para mi buscador, así que si a ti te falla en alguna parte es probable que a mi tambien. Debo hacer un apunte, y es que si el valor de $q es '%' lo que pasara es que el buscador sacara todos los registros de todas las tablas en las que tu permitas buscar, asi que te aconsejo que controles esto :) ********************************************************************/ // nombre de la base de datos $DBNAME = "byte1024"; // esta variable conecta con la base de datos, y requiere el nombre del host al que se desea // conectar, el usuario y el password (sustituye las 3 variables por el valor correspondiente) $link = mysql_connect($DBHOST, $DBUSER, $DBPASS); // variable que contara las coincidencias $coincidencias = 0; // caracteres minimos permitidos para la busqueda $num_car_minimo = 2; // estas variables se usan para enviar un email cuando se ha realizado una búsqueda // Si $notificar es TRUE enviara el email. $notificar = TRUE; $email_dest = "[email protected]"; $asunto = "Búsqueda en byte1024"; if(strlen($q) <= $num_car_minimo) { ?> <script type="text/javascript"> alert('El texto de consulta debe superar los <?echo $num_car_minimo;?> carácteres'); history.back(); </script> <? } else { // enviamos el email si $notificar es cierto if($notificar == TRUE) mail($email_dest,$asunto,$q); ?> <table width="100%" cellpadding="0" cellspacing="2"> <tr> <td><img src="imagenes/icono_buscar.gif" border="0"> <td width="90%"> <p class="titulo" align="center">Buscando "<i><?echo $q?></i>" en <b><?echo strtoupper($sec);?></b></p> </td> <td><img src="imagenes/icono_buscar.gif" border="0"> </tr> </table> <br> <? /**************************************************************************************************/ // en este array guardaremos las tablas en las que permitiremos que se realice la busqueda // por si los hackers... :o $tablas = array("articulos","comentarios","codfuente","noticias"); // este array guarda simplemente las carpetas en las que el buscador puede acceder. Si al comprobar // todos los elementos no encuentra ninguno igual a $sec, no busca // esta variable solo la utiliza la funcion fileSearch() $dirs = array("dai","articulos"); // en esta variable definiremos argumentos especiales que requiera la pagina php encontrada // por ejemplo en las noticias siempre direccionaremos a noticias.php?sec=2&id=lokesea // pues bien, tenemos que definir ese $sec de alguna forma // el id=lokesea lo añade el buscador al generar el enlace $paginas = array("articulos.php?sec=1&", "comentarios.php?sec=1&", "codfuente.php?sec=ALL&", "noticias.php?sec=2&"); // esta otra variable definira (con un valor numerico) que campo es el que define la descripcion // que saldra en el enlace final que genera el buscador $descs = array(1,4,2,2); // esta variable definira cual es el identificativo de toda tabla. Por lo normal siempre sera // el 0, pero pueden darse casos contrarios $keys = array(0,0,0,0); // aqui guardamos las extensiones de los ficheros que dejaremos que el buscador lea. // Es recomendable restringir los ficheros .php o los que guarden cosas que no queremos que se vean // pongo un ejemplo: si alguien busca "mysql_db_query" y aqui permitimos buscar en los ficheros .php // nos habrán capturado el password $valid_ext = array("html","txt","htm"); /**************************************************************************************************/ // transformamos el texto de busqueda a un array // para poder tratar las palabras por separado $q = explode(" ", $q); // la busqueda se debe realizar en cada item de $tablas if(strtoupper($sec) == "TODAS") { // buscamos en una tabla $tabla_query = $tablas; for($i=0; $i < count($tabla_query); $i++) dbSearch($i); // buscamos en un directorio for($i=0; $i< count($dirs); $i++) fileSearch($dirs[$i]); } else { // en este caso la consulta ataca a una tabla. Si se pone un valor para $sec // que no se encuentre en $tablas, simplemente no encontrara nada (ni buscara) for($i=0; $i<count($tablas); $i++) { if(strtoupper($tablas[$i]) == strtoupper($sec)) dbSearch($i); } // recorremos el array dirs buscando la coincidencia del valor de $sec con el // valor de cada item del array for($i=0; $i<count($dirs); $i++) { if($dirs[$i] == $sec) fileSearch($dirs[$i]); } } ?> <p align="center"><?echo "<b>Hay $coincidencias coincidencia(s)</b>";?></p> <? } // esta funcion busca el texto definido por el array $q sobre la tabla definida por $numElemento, // que se correspondera a un elemento del array $tablas function dbSearch($numElemento) { // es necesario llamar a estas variables externas global $q; global $DBNAME, $link; global $tablas, $paginas, $keys, $descs; global $coincidencias; // sacamos el numero de campos y los nombres ke tiene esa tabla $result = mysql_db_query($DBNAME, "SELECT * FROM $tablas[$numElemento] WHERE 1", $link); $num_fields = mysql_num_fields($result); $fields = mysql_fetch_field($result); ?> <table width="100%" align="center" cellspacing="0" cellpadding="0"> <tr> <td bgcolor="#3c82b5" style="color:#FFFFFF; font-weight:bold; "> <?echo "Búsqueda en $tablas[$numElemento]";?> </td> </tr> <tr> <td style="border: 1px solid #bbbbbb;" bgcolor="#f0f0f0"> <table width="100%" cellspacing="3" cellpadding="0"> <? // realizamos la consulta SQL y escribimos los resultados $select = "SELECT *"; $from = "FROM $tablas[$numElemento]"; $where = "WHERE "; // construimos la clausula WHERE for($word = 0; $word < count($q); $word++) { $where .= "("; for($field=0; $field < $num_fields; $field++) { $where .= mysql_field_name($result, $field) . " LIKE '%$q[$word]%'"; if($field < $num_fields-1) $where .= " OR "; } $where .= ")"; if($word < count($q)-1) $where .= " AND "; } // construimos la consulta entera $query = $select . " " . $from . " " . $where; $result = mysql_db_query($DBNAME, $query, $link); if(mysql_num_rows($result) > 0) { $coincidencias += mysql_num_rows($result); // imprimimos resultados for($row=0; $reg = mysql_fetch_array($result); $row++) { // generamos todo el enlace $desc = sprintf("%d",$descs[$numElemento]); // acortamos la descripcion si sobrepasa de los 60 caracteres if(strlen(nohtml($reg[$desc])) > 60) $desc = substr(nohtml($reg[$desc]), 0, 60) . "..."; else $desc = nohtml($reg[$desc]); // valor y nombre del campo clave (id) // (ver variable $keys, arriba) $key = sprintf("%d",$keys[$numElemento]); $key_name = mysql_field_name($result, $key); // definimos con que color pintaremos el fondo de la celda // Este color se alterna if($row % 2 == 0) $bgcolor = "#f8f8f8"; else $bgcolor = "fefefe"; ?> <tr> <td bgcolor="<?echo $bgcolor;?>"> <? // esto es especial para los comentarios, ya ke el link ke se crea // tiene ke apuntar al comentario indicado por #id if($tablas[$numElemento] = "comentarios") $posicion = "#" . $reg[$key]; echo "<img src='imagenes/punto.gif'> <a class='dai' href='$paginas[$numElemento]$key_name=$reg[0]$posicion'>$desc</a>";?> </td> </tr> <? } } else echo "<tr><td bgcolor='#f8f8f8' style='font-size: 10px; font-family: tahoma;'>Sin resultados</td></tr>"; ?> </table> </td> </tr> </table> <br> <? } // esta funcion busca en un fichero coincidencias con cada elemento // del array $q (texto de busqueda) function fileSearch($dir) { global $q, $coincidencias; $dptr = opendir($dir); while($file = readdir($dptr)) { if ($file != "." && $file != "..") { // es un directorio, llamamos recursivamente a la misma funcion para leer // el directorio if(is_dir($dir . "/" . $file)) fileSearch($dir . "/" . $file); // es un fichero else { // es un fichero de datos con extension legible // (estas extensiones se definen en el array $valid_ext if(grant_ext($file) == TRUE) { // leemos el fichero $fichero = $dir . "/" . $file; $fptr = fopen($fichero, "r"); $texto = fread($fptr, filesize($fichero)); $texto_nohtml = nohtml($texto); // buscamos el texto en el fichero for($word_found=0, $i=0; $i < count($q); $i++) { if(is_integer(strpos(strtoupper($texto_nohtml), strtoupper($q[$i])))) $word_found++; } // hemos encontrado todas las palabras, asi que insertamos el enlace hacia // la pagina solicitada if($word_found == count($q)) { ?> <table width="100%" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#3c82b5" style="color: #ffffff;"><b>Búsqueda en</b> <?echo $dir . "/" . $file;?> </td> </tr> <tr> <td style="border: 1px solid #dedede;"><?echo substr($texto_nohtml, strpos($texto_nohtml,$q[0]), 200) . "...";?></td> </tr> <tr> <td><img src="imagenes/punto.gif"> <a class="dai" href="incluir.php?loc=<?echo $dir;?>&file=<?echo $file;?>">ver página</a></td> </tr> </table> <? echo "<br>"; $coincidencias++; } fclose($fptr); } } } } closedir($dptr); } // esta funcion controla si el fichero que intentamos leer // tiene una extension definida en el array $valid_ext (ver arriba) function grant_ext($fichero) { global $valid_ext; $file_members = explode(".", $fichero); for($i=0; $i<count($valid_ext); $i++) { if($file_members[1] == $valid_ext[$i]) return TRUE; } return FALSE; } // esta funcion transforma un texto con tags HTML a texto plano function nohtml($string) { for($conta = 0, $tag = 0; $conta < strlen($string); $conta++) { switch($string[$conta]) { case "<": $tag++; break; case ">": $tag--; break; default: if($tag == 0) $copia .= $string[$conta]; break; } } return $copia; } ?>
y esta es la explicacion de su uso:
yo escribió:
Crea un formulario para el envío de la consulta e introdúcelo en el lugar donde quieres que salga el cuadro de texto y el botón de buscar, algo parecido a esto:
<form name="formBuscar" action="buscador.php" method="get">
<input type="text" name="q">
<select name=”sec”>
<option value=”TODAS”>En todas</option>
<option value=”dai”>Ciclo dai</option>
<option value=”codfuente”>Código fuente</option>
</select>
<input type="submit" value="buscar!">
</form>
2.- Ahora tendrás que configurar algunas variables para el perfecto funcionamiento del buscador. Dichas variables se encuentran en el fichero "buscador.php".
Línea 31: la variable coincidencias simplemente cuenta el número de coincidencias que ha tenido la búsqueda. No se debe modificar su valor.
Línea 33: la variable $num_car_minimo es la encargada de controlar si una cadena de búsqueda tiene el número de caracteres mínimo requerido para considerarse como válida. El valor predeterminado es 2 caracteres.
Línea 37-39: Estas variables se usan para notificar vía e-mail las cadenas de búsqueda que introducen los usuarios.
Si el valor de $notificar es igual a TRUE, se enviará un e-mail. Si de lo contrario es FALSE no se realizará dicha acción.
Antes que nada debo aclarar que este buscador abarca tanto los directorios de tu cuenta ftp, como las tablas de tu base de datos mysql (si la tienes). A continuación explicaré como configurar todo esto
• Con base de datos:
o Línea 24: encontrarás una variable llamada $DBNAME, a la que debes asignarle el nombre de tu base de datos. Dicho nombre te lo facilitarán cuando crees tu cuenta de usuario.
o Línea 28: encontrarás una variable llamada $link, que es la encargada de conectar con la base de datos. Sustituye los valores de $DBHOST, $DBUSER y $DBPASS por el servidor mysql al que quieras conectar (por lo general “localhost”), el usuario y el password de tu cuenta respectivamente.
o Línea 72: Esta variable array guarda los nombres de las tablas de la base de datos en las que permitiremos la búsqueda.
El formato es el siguiente:
$tablas = array(“tabla1”,”tabla2”,…)
o Línea 83: esta es quizás la parte más difícil de la configuración del buscador. También se trata de un array ($paginas) que será el que guardará la URL o dirección de destino a la que hará referencia la coincidencia que genere el buscador. Por ejemplo, si hay una coincidencia en un registro de la tabla noticias, el buscador escribirá el campo título de la noticia y creará un enlace a la página que nosotros le digamos (“noticias.php?sec=2&”)
Debo apuntar algo muy importante, y es que al generarse el enlace se concatenará el nombre del campo identificativo del registro encontrado junto al valor de éste, con el valor del array $paginas perteneciente a la tabla en la que estamos buscando.
Explico esto a continuación. Siguiendo con el ejemplo anterior, el buscador generaría un enlace del tipo “<a href=”noticias.php?sec=2&id=X”, donde “id” se corresponde al nombre del campo identificativo de la tabla noticias (en el caso de byte1024 coincide que se llama “id”) y donde X es el valor de ese campo en el registro donde ha encontrado la coincidencia.
o Línea 87 y 91: Estas dos variables array están íntimamente ligadas con la variable $paginas.
La variable $descs guarda el número del campo al que irá a leer el buscador para sacar un texto descriptivo (en el caso de byte1024 el campo para los artículos es el 1, para las noticias el 4, etc…)
La variable $keys guarda el número del campo que se corresponde al identificativo de la tabla en la que estamos buscando (en el caso de byte1024 todos los campos identificativos se corresponden con el primero de la tabla, el 0)
• Sin base de datos:
Si no utilizas base de datos en tu sitio te será muchísimo más fácil configurar el buscador. Simplemente tienes que deshabilitar o borrar las líneas 72, 83, 87 y 91.
• Búsqueda en ficheros:
Configurar esta parte te resultará sumamente sencillo, ya que sólo tienes que tocar 2 variables, las situadas en las líneas 77, 97.
La variable array $dirs guarda los nombres de los directorios en los que permitiremos que el buscador realice sus búsquedas. La sintaxis es exactamente igual a la de la variable $tablas:
$dirs = array(“directorio1”, “directorio 2”, “directorio 3”, …)
La variable array $valid_ext es MUY IMPORTANTE que esté bien configurada, ya que de lo contrario podemos estar abriendo un gran agujero a nuestro código sin darnos cuenta. Explico esto: en esta variable guardaremos las extensiones de ficheros que permitiremos que abra el buscador.
Yo recomiendo fervientemente no incluir la extensión .php. Las extensiones .html, .txt, .htm se pueden incluir sin peligro alguno.
La sintaxis de este array es la misma que la de los arrays $dirs y $tablas.
Nota importante:
En el formulario de envío hay un campo llamado “sec”. Éste campo será el que definirá en que tabla de la base de datos y/o en qué directorio queremos buscar. Si no quieres que el usuario pueda definir una sección en concreto, ya sea porqué prefieres no dividirlo en secciones o por el motivo que sea sustituye el código de arriba:
<select name=”sec”>
<option value=”TODAS”>En todas</option>
<option value=”dai”>Ciclo dai</option>
<option value=”codfuente”>Código fuente</option>
</select>
Por este otro:
<input type=”hidden” name=”sec” value=”TODAS”>
siguiendo las indicaciones del tutorial llegue hasta este punto
pagina de prueba clic aqui para ver el buscador en casi funcionamiento ñ_ñ
y tristemente ahi me quede, no pasa mas alla de la verificacion de las palabras y no hace nada
En el tutorial (que esta en el link de descarga) comienzo a ver todo nublado desde la linea 72 y tambien otro problema es mi base de datos yo la hice en access y quedo asi (recuerden que es solo de prueba no se rian)

amablemente neocesar (integrante de este foro) me dijo que bajara toad for mysql, pero yo baje MySQL Workbench y llego a crear el archivo y sus tablas, pero como hago para colocarle el contenido
redondeando
me podrian guiar? porfis
Saludos =)
