Código PHP:
/**************************************************************************************************/
// 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;
//echo $tablas;
// sacamos el numero de campos y los nombres ke tiene esa tabla
$result = mysql_db_query($DBNAME, "SELECT * FROM $tablas[$numElemento] WHERE 1", $link);
//echo $result;
$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="ver.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;
}
?>
El deberia buscar la palabra, y las palabras del formuario pero no coloca el titulo o contenido de la BD en que esta la palabra (s), solo sale esto:
Código PHP:
Buscando "nacionales" en TODAS
Búsqueda en nacionales
1 -> aqui deberia aparecer el contenido con la palabra que biene del formulario
1 -> aqui deberia aparecer el contenido con la palabra que biene del formulario
Búsqueda en regionales
Sin resultados
Búsqueda en politica
Sin resultados
Hay 2 coincidencia(s)
Sugerencia plisssss