Foros del Web » Programando para Internet » PHP »

script p/buscador

Estas en el tema de script p/buscador en el foro de PHP en Foros del Web. me da esto Buscando "cables" en Hay 0 coincidencia(s) el codigo es Código PHP: // nombre de la base de datos $DBNAME = "nombre de bd"; $link = mysql_connect(localhost, us, pass); // variable que contara las coincidencias $coincidencias = 0; // caracteres minimos permitidos para la busqueda $num_car_minimo = 2; if(strlen($q) <= $num_car_minimo) {  ?>  <script type="text/javascript"> ...
  #1 (permalink)  
Antiguo 10/08/2005, 22:14
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 13 años, 6 meses
Puntos: 4
script p/buscador

me da esto

Buscando "cables" en


Hay 0 coincidencia(s)

el codigo es
Código PHP:
// nombre de la base de datos
$DBNAME = "nombre de bd";


$link = mysql_connect(localhost, us, pass);

// variable que contara las coincidencias
$coincidencias = 0;
// caracteres minimos permitidos para la busqueda
$num_car_minimo = 2;


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="file:///C|/DOCUME%7E1/Sergio/CONFIG%7E1/Temp/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="file:///C|/DOCUME%7E1/Sergio/CONFIG%7E1/Temp/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("contenido");

// 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("public_html");

// 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("cables.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$icount($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]), 060) . "...";
                          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 == 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($fptrfilesize($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_nohtmlstrpos($texto_nohtml,$q[0]), 200) . "...";?></td>
                    </tr>
                    
                    <tr>
                        <td><img src="file:///C|/DOCUME%7E1/Sergio/CONFIG%7E1/Temp/imagenes/punto.gif">&nbsp;<a class="dai" href="file:///C|/DOCUME%7E1/Sergio/CONFIG%7E1/Temp/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;
}

?>
como lo hago?
  #2 (permalink)  
Antiguo 10/08/2005, 22:16
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 13 años, 6 meses
Puntos: 4
Código:
<form name="formBuscar" action="buscador1-1.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>
este es el formulario

el script lo bajé de webtaller y el autor es [email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.