Comunidad de diseño web y desarrollo en internet online

Me ayudan con este buscador plissss

Citar            
MensajeEscrito el 28 Nov 2009 08:49 pm
hola, yo otra vez :D

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; ">
         &nbsp;<?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'>&nbsp;<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">&nbsp;<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ó:

Tutorial para la configuración del buscador de byte1024.

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 :cry:
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) :P



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 :ownz: ya estoy viendo estrellitas porque no logro que funcione :sueno:

redondeando ^^ como hago para que el archivo buscador.php (que esta en el link de descarga) se vincule a mi base de datos?

me podrian guiar? porfis

Saludos =)

Por Verys

67 de clabLevel



Genero:Femenino  

Argentina

firefox
Citar            
MensajeEscrito el 01 Dic 2009 10:06 pm
pues facil hija, aqui voy a tu rescate de nuevo, en el script PHP que bajaste entre las primeras lineas existen 3 variables que debes reemplazar por los valores inherentes a tu servidor MySQL esas variables son:
$DBHOST = Aqui coloca el nombre de tu host, lo normal es que aqui pongas "localhost"; ojo con comillas y punto y coma incluidos
$DBUSER = Cuando instalaste WAMP te debio pedir que pongas un nombre de usuario para MySQL si no paso asi entonces el usuario es "root";
$DBPASS = Aqui el pass de tu base de datos, si no lo has seteado entonces apurate y setealo, esto lo puedes hacer desde PHPmyAdmin de tu WAMP, ojo despues de hacerlo deberas de modificar el archivo de config.inc.php ubicado en el directorio
<unidad de disco>:\wamp\apps\phpmyadmin.3.2.0.1\config.inc.php (ojo en 3.2.0.1 puede variar deacuerdo al a version que tengas instalada) dentro de ese archivo ubica la linea que dice

Código PHP :

$cfg['Servers'][$i]['password'] = '';

y cambiala por

Código PHP :

$cfg['Servers'][$i]['password'] = 'aqui_pon_tu_pass';

entonces tenemos generar un pass via PHPmyAdmin, actualizar el archivo config.inc.php y establecer el mismo valor par la variable $DBPASS de tu script con tooodo eso tu script se conectara a tu base de datos
(Nota mental: hacer un tuto de instalacion de WAMP XD)
Comenta tb que quieres saber como ñadir registros, por eso te dije que bajes Toad for MySQL es mucho mas facil de usar que el Workbech, pero para el caso usa el phpmyadmin para añadir tus registro cualquier cosa me avisas por esta via

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

firefox
Citar            
MensajeEscrito el 01 Dic 2009 10:15 pm
:ownz: ok voy a bajar toad, lo baje e instale y cuando lo corri me decia que el periodo de prueba habia terminado, lo buscare nuevamente

y leere con mas detenimiento lo que escribiste :alabado:

gracias

Saludos =)

Por Verys

67 de clabLevel



Genero:Femenino  

Argentina

firefox
Citar            
MensajeEscrito el 01 Dic 2009 10:18 pm
checa bien hay una version FREE del toad

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.