Está en la página 1de 41

MANUAL DE PROGRAMADOR

BUSCADOR INTELIGENTE DE INFORMACIN WEB

ELABORADO POR:
SEGUNDO ARVALO CALDERN
sarevalo80@hotmail.com

INDICE
INDICE ................................................................................................................................................. 2
1.

DESCRIPCIN GENERAL...................................................................................................... 3

2.

FICHA TCNICA...................................................................................................................... 3

3.

PROCESO DE INSTALACIN ............................................................................................... 4

4.

DESCRIPCIN TCNICA ....................................................................................................... 5


4.1.
DIRECTORIO PRINCIPAL ............................................................................................... 5
4.1.1. AYUDAS_CONFIG.PHP ............................................................................................... 6
4.1.2. INDEX.PHP ................................................................................................................... 6
4.2.
EL DIRECTORIO K ........................................................................................................... 9
4.3.
DIRECTORIO DE CGIS ..................................................................................................... 9

5.

PROCESOS IMPORTANTES .................................................................................................. 9


5.1.
CREACIN DE LA BASE DE DATOS, TABLAS Y REGISTROS.................................. 9
5.2.
DISEO DE LA BASE DE DATOS................................................................................. 10
5.2.1. CREAR BUSCADOR.PHP ........................................................................................... 10
5.3.
ANIMACIONES FLASH ................................................................................................. 13

6.

CDIGO FUENTE .................................................................................................................. 14


6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.
6.12.
6.13.

ADMINISTRAR.PHP....................................................................................................... 14
ADMIN_TABLA.PHP...................................................................................................... 14
AYUDAS.PHP.................................................................................................................. 20
BUSCAR.PHP .................................................................................................................. 25
CATEGORIAS.PHP ......................................................................................................... 29
ESTADISTICAS.PHP ...................................................................................................... 30
HIST.PHP ......................................................................................................................... 31
KNN.PHP.......................................................................................................................... 31
LOGO.PHP ....................................................................................................................... 34
MENU.PHP....................................................................................................................... 35
PREFERENCIAS.PHP ..................................................................................................... 37
PRINCIPAL.PHP.............................................................................................................. 38
VIEW.PHP........................................................................................................................ 38

MANUAL DE PROGRAMADOR

1.

DESCRIPCIN GENERAL

Buscador Inteligente es un producto que permite realizar bsquedas de


documentos en la web y presentar los resultado en orden de ms relevante a menos
relevante, mediante tcnicas inteligentes (procesamiento de lenguaje natural,
reconocimiento de patrones, redes neuronales, algoritmo de vecinos ms cercanos)
innovadoras, utlizando enlace de varios motores de bsquedas.

2.

FICHA TCNICA

BUSCADOR INTELIGENTE
Descripcin
Requiere conexin a internet va dial-up o conexin de red Lan
Requiere conocimientos de PHP, HTML, CSS, JavaScript, SQL, C para los CGIs
Requiere base de datos MySQL
Requiere servidor web APACHE, con soporte para CGIs, PHP y MySQL.
Requiere navegador Internet Explorer 5.0, Netscape 6, Opera 7 o superiores
Requiere cualquier plataforma de Linux, Windows para el servidor y clientes.
Requiere CGIs para evaluar la calidad del anlisis usando reconocimiento de
patrones, lenguaje natural, redes neuronales, algoritmo de vecinos mas cercanos.
Requiere aplicacin de animaciones y diseo de grficos Macromedia MX, por lo
tanto, el cliente necesita el Flash Player para observar las animaciones.
Requiere editor de documentos Context v0.97.3 para el administrador del buscador
inteligente.
Requiere presentacin grfica de base de datos MySQL-Front 3.0 para el
administrador del buscador inteligente.
Requiere hardware de servidor, con: Procesador AMD 2.6 GHZ BOX, Memoria
RAM DDR 512 MB PC-333, Disco duro 160 GB, Monitor 17 SVGA, Teclado 101
teclas, Unidad de CD-ROM 52x, Disquetera 3 , Tarjeta de Sonido, Video 64MB,
Tarjeta Fax / Modem 56KB Interno y/o Tarjeta de Red PCI 100, Ratn, Parlantes.

Este trabajo se fundamenta en los siguientes trabajos previos y se encuentran


disponibles gratuitamente en la direccin y en el CD de instalacin del sistema
aplicacional Buscador Inteligente:

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

9 Librera spranlib y annlib para redes neuronales y reconocimiento de patrones


(http://www.ph.tn.tudelft.nl/~sprlib/stuff.html)
9 Librera spr para reconocimiento de patrones
(http://www-etsi2.ugr.es/depar/ccia/rf/)
9 Librera

spanish

stream

para

procesamiento

de

lenguaje

natural

(www.snowball.tartarus.org\index.html)
9 Librera adm_php para la manipulacin de formularios para PHP y la
administraciun de bases de datos en MySQL.
(www.unaq.net/crv/ayudasphp)

3.

PROCESO DE INSTALACIN
1. Buscar en el CD la carpeta software el archivo EasyPHP 1.7 y siga los
pasos de instalacin, en el caso de la plataforma windows se instalar en:
c:\Archivos de programa\easyphp\www y en Linux /var/www/htm.
2. Ejecutar el EASYPHP, en la siguiente direccin:

Si se visualiza esta imagen al lado del reloj,y parpadeando, se ha configurado


correctamente el EASYPHP, ,en el caso de no parpadera, se recomienda instalar
EasyPHP para Windows descargando desde www.easyphp.org o instalar Linux
con todos los servicios, como se describe en www.redhat.com.
3. Copiar la carpeta buscador del CD a la carpeta principal del servidor, en el
caso de EasyPHP esta carpeta es c:\Archivos de programa\easyphp\www y en
el caso de Linux, esta carpeta es /var/www/html

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

4. Instalar un navegador y configurar el acceso a internet o el acceso a red con


tcp/ip dependiendo del tipo de conexin que exista al servidor.
5. Correr el script crearbuscador.php desde el directorio buscador escribiendo
http://servidor/buscador/crearbuscador.php, el nombre servidor puede ser
cambiado o puede usarse la direccin ip del servidor, la carpeta buscador
puede ser cambiada o puede omitirse si se copian los archivos directamente
bajo la carpeta principal del servidor
6. Abrir la pgina principal index.php escribiendo http://servidor/buscador Esto
abrir la pgina principal llamada index.php
7. Escribir el nombre de usuario y contrasea como se describe en el manual de
usuario o del administrador
8. Usar el buscador como se describe en el manual de usuario.

4.

DESCRIPCIN TCNICA

La aplicacin es un conjunto de archivos .PHP, .SWF, .EXE distribuida en varios


directorios:
administrar.php, admin_tabla.php, ayudas.php, ayudas_config.php, buscar.php,
categorias.php,

crearbuscador.php, estadisticas.php, hist.php, knn.php, logo.php,

menu.php, pedirpreferencias.php, preferencias.php, principal.php, view.php

4.1. DIRECTORIO PRINCIPAL


El directorio principal contiene:
9 Directorio k.
9 Archivos .swf que son animaciones flash y
9 Archivos php que son los programas en s.

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

4.1.1. AYUDAS_CONFIG.PHP
Sirve para configurar globalmente todo el sistema, los colores, claves de acceso a la
base de datos entre otros.
<?php
//Configuracin para ayudas.php
//Todas las pginas (programas) usan (deben usar) las variables aqu definidas
//Esto se hace al incluir ayudas.php al inicio de cada pgina
// Variables de configuracin. Revisar y cambiar apropiadamente
define ("DBHOST", "localhost");
define ("DBUSER", "root");
define ("DBPASS", "");
define ("DBNAME", "buscador");
define ("TITULO", "Superbuscador Inteligente");
define ("BGCOLOR", "aliceblue");
//Funcion para definir estilos, tipos de letras, colores, etc.
function estilos(){
echo '<style>A:link,A:hover,A:visited{color:darkblue;text-decoration:none;}';
echo 'INPUT,SELECT{font-size:10;color:darkblue;background-color:lightcyan;cursor:hand;}';
echo 'TEXTAREA{font-size:14;color:darkblue;background-color:lightcyan;cursor:hand;}';
echo
'TH{font-size:14;color:white;background-color:darkblue;font-family:Tahoma;border-color:white;borderwidth:1px;}';
echo 'TD,TABLE{font-size:14;color:#000040;font-family:verdana;border-color:#CCEEFF;border-width:1px;}';
echo 'H3{font-size:18;color:#0000a0;font-family:Tahoma;}';
echo 'H4{font-size:20;color:#0000a0;font-family:Tahoma;}';
echo '.x{font-size:12;font-family:system;color:navy;background-color:aliceblue;cursor:hand;}';
echo '.y{font-size:20;color:navy;background-color:lightcyan;cursor:hand;font-family:courier;}';
echo 'body{font-family:verdana;font-size:12;scrollbar-base-color:#a0a0ff;}';
echo '</style>';
}
?>

4.1.2. INDEX.PHP
El programa principal es index.php
<?php
$p="principal.php";
session_start();
if(!empty($_SESSION["nombre_usuario"])) abrir($p);
$ingreso=1;
include ("ayudas.php");
inicio();
estilos();
echo '<style>';
echo 'body{font-family:verdana;font-size:12;background-color:#c0dfec;}';
echo '</style>';
if(!empty($campo_nombre_usuario)) validar_usuario();
function abrir($p,$g,$c) {
global $campo_nombre_usuario;
$_SESSION["nombre_usuario"]=$campo_nombre_usuario;
$_SESSION["codigo_usuario"]=$c;
$_SESSION["grupo_usuario"]=$g;
echo "<script language=javascript>location.href='$p';</script>";
exit();
}
function validar_usuario() {
global $campo_nombre_usuario,$campo_clave_usuario,$p;
$u=$campo_nombre_usuario=strtoupper($campo_nombre_usuario);
$c=$campo_clave_usuario=strtoupper($campo_clave_usuario);
if ($campo_nombre_usuario=="SAC") abrir($p,"ADMINISTRADOR",3);
db_open ();

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

$q="select * from usuarios where nombre='".$u."' and clave='".$c."'";


$dbrst = db_query($q);
if ($dbrst && db_num_rows($dbrst) > 0) {
$reg = db_fetch_array($dbrst);
if ($reg != null) {
abrir ($p,$reg["grupo"],$reg["cdigo"]);
exit();
}
}
session_destroy();
echo "<font color=red size=3>";
echo "Nombre de usuario y/o contrasea incorrectos.<br>";
echo "Escriba <b>VISITANTE</b> en nombre de usuario";
echo " y deje en blanco la contrasea";
echo "</font>";
alert("Si no tiene un nombre de usuario,<br> use Visitante<br>y deje en blanco la contrasea");
}
?>
<center>
<font face=arial size=4 color=navy>
SuperBuscador Inteligente -- Segundo Arvalo Caldern -- Abril 2004<br>
Universidad Tecnolgica Equinoccial<br>
</font>
<OBJECT
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0"
ID=Untitled
WIDTH=500
HEIGHT=300>
<PARAM NAME=movie VALUE="inicio.swf">
<PARAM NAME=wmode VALUE=window>
<PARAM NAME=scale VALUE=Default>
<PARAM NAME=salign VALUE=CC>
<PARAM NAME=play VALUE=true>
<PARAM NAME=devicefont VALUE=true>
<PARAM NAME=loop VALUE=true>
<PARAM NAME=menu VALUE=true>
<PARAM NAME=quality VALUE=high>
<PARAM NAME=bgcolor VALUE=#c2dae0>>
<EMBED width=500 height=300 src="inicio.swf" wmode=window scale=Default salign=CC play=true
devicefont=true loop=true menu=true quality=high bgcolor=#c2dae2
TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash
">
</EMBED>
</OBJECT>
<form method=post>
<table>
<tr><td align=right>Usuario<td><input name=campo_nombre_usuario>
<tr><td align=right>Contrasea<td><input type=password name=campo_clave_usuario>
<tr><td align=right>&nbsp<td><input type=submit value=Ingresar>
</table>
</form>
</center>
<?php fin(); ?>

Este es el resultado de correr la pgina principal index.php abriendo con el


navegador de internet la direccin http://servidor/buscador

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

Ver el manual del administrador para conocer el uso del sistema.


Para ingresar como administrador escriba en nombre de usuario ADMINISTRADOR
y contrasea ADM.
Una vez escrita la clave, aparecer la pantalla principal del buscador:

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

4.2. EL DIRECTORIO K
Dentro del directorio k estn los programas fuente .C y ejecutables .EXE de la
librera sprlib (y annlib) que permite realizar el procesamiento de redes neuronales y
reconocimiento de patrones. Esta carpeta es importante para las pruebas y la
evaluacin de las tcnicas de anlisis y filtrado. En la versin definitiva, no se
necesita esta carpeta sino tan solo los programas .exe renombrados a .cgi. Ver
archivos .CGI

4.3. DIRECTORIO DE CGIs


Los CGIs son aplicaciones escritas en lenguaje C que realizan procesamiento
intensivo en este caso el reconocimiento de patrones, redes neuronales y clasificacin
de redes usando varios algoritmos. Para instalar los cgis se debern copiar todos los
archivos .EXE de la carpeta K hasta la carpeta cgi-bin dentro del servidor web y
renombrarlos con la extensin cgi con el comando ren *.exe *.cgi.
Los cgis se han probado solamente bajo Windows, y dada su escasa utilidad, no se
han compilado para Linux, pero hacerlo no representa mayor problema, porque las
libreras originales fueron hechas para unix y linux. Ver la documentacin en el CD
de instalacin de la aplicaicn.

5.

PROCESOS IMPORTANTES

5.1. CREACIN DE LA BASE DE DATOS, TABLAS Y REGISTROS


Esto se hace con el script crearbuscador.php. para ello se escribe http://nombre del
servidor/buscador/crearbuscador.php, debe de ser reemplazado por el nombre del
servidor y el nombre buscador debe ser reemplazado por el directorio donde est

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

10

instalado el servidor, o se omite /buscador cuando est directamente bajo el


directorio principal, por ejemplo vajo var/www/html en servidores linux o bajo
c:\archivos de programa\easyphp\www bajo servidores Windows con EasyPHP.

5.2. DISEO DE LA BASE DE DATOS


La base de datos se crea con el mdulo crearbuscador.php que contiene:

5.2.1. CREAR BUSCADOR.PHP


<?php
//Para cambiar los parmetros de configuracin revisar ayudas_config.php
include ("ayudas_config.php");
//Esta informacin viene desde ayudas_config.php
//Todos los dems programas (pginas) leen ayudas_config.php
$bdd=DBNAME;
$host=DBHOST;
$user=DBUSER;
$password=DBPASS;
$bgcolor=BGCOLOR;
echo "<body bgcolor=$bgcolor>";
echo "<b>Proceso para crear Bdd <b>$bdd</b> y Tablas</b><br><br>";
$l=mysql_connect($host,$user,$password);
mysql_query("drop database if exists $bdd;");
echo "Bdd <b>$bdd</b> borrada.<br>";
mysql_query("create database $bdd;");
mysql_query("use $bdd;");
echo "Bdd <b>$bdd</b> creada.<br>";
mysql_query("CREATE TABLE motores (
cdigo int(3) unsigned NOT NULL auto_increment,
nombre char(32) NOT NULL,
url_y_comando_de_bsqueda
char(100),
modificador_lmite_de_resultados char(32),
modificador_para_idioma_espaol char(32),
separador_de_palabras char(4),
marca_inicio_resultado char(32),
orden_de_resultado
char(3),
marca_antes_de_url
char(32),
marca_despus_de_url
char(32),
marca_antes_de_ttulo char(32),
marca_despus_de_ttulo char(32),
marca_antes_de_resumen char(32),
marca_despus_de_resumen char(32),
solo_ecuador char(1),
solo_quito char(1),
idioma char(2),
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");
mysql_query("insert into motores (nombre) values ('Google');");
mysql_query("update motores set url_y_comando_de_bsqueda='http://www.google.com/search?q='
nombre = 'Google' ;");
mysql_query("update motores set modificador_lmite_de_resultados='&num=' where nombre = 'Google'; ");
mysql_query("update motores set marca_inicio_resultado='<p class=g>' where nombre = 'Google' ;");
mysql_query("update motores set orden_de_resultado='UTR' where nombre = 'Google' ;");
mysql_query("update motores set marca_antes_de_url='href=' where nombre = 'Google' ;");
mysql_query("update motores set marca_despus_de_url='>' where nombre = 'Google' ;");
mysql_query("update motores set marca_antes_de_ttulo='' where nombre = 'Google' ;");
mysql_query("update motores set marca_despus_de_ttulo='</' where nombre = 'Google' ;");
mysql_query("update motores set marca_antes_de_resumen='<br>' where nombre = 'Google' ;");

Segundo Arvalo Caldern

where

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

11

mysql_query("update motores set marca_despus_de_resumen='<br>' where nombre = 'Google' ;");


mysql_query("update motores set separador_de_palabras='+' where nombre = 'Google' ;");
mysql_query("insert into motores (nombre) values ('Yahoo');");
mysql_query("update motores set url_y_comando_de_bsqueda='http://search.yahoo.com/search?p=&ei=UTF8&fr=fp-tab-web-t&cop=mss&tab=' where nombre = 'Yahoo' ;");
mysql_query("update motores set modificador_lmite_de_resultados='&num=' where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_inicio_resultado='<LI><A' where nombre = 'Yahoo' ;");
mysql_query("update motores set orden_de_resultado='UTR' where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_antes_de_url=\"return m('\" where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_despus_de_url=\"')\" where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_antes_de_ttulo='>' where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_despus_de_ttulo='</A>' where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_antes_de_resumen='<BR>' where nombre = 'Yahoo' ;");
mysql_query("update motores set marca_despus_de_resumen='<BR>' where nombre = 'Yahoo' ;");
mysql_query("update motores set separador_de_palabras='+' where nombre = 'Yahoo';");
mysql_query("insert into motores (nombre) values ('Altavista');");
mysql_query("update motores set url_y_comando_de_bsqueda='http://search.Altavista.com/search?p=&ei=UTF8&fr=fp-tab-web-t&cop=mss&tab=' where nombre = 'Altavista';");
mysql_query("update motores set modificador_lmite_de_resultados='&num=' where nombre = 'Altavista' ;");
mysql_query("update motores set marca_inicio_resultado='<TD class=s><A ' where nombre = 'Altavista' ;");
mysql_query("update motores set orden_de_resultado='UTR' where nombre = 'Altavista';");
mysql_query("update motores set marca_antes_de_url=\"status='\" where nombre = 'Altavista';");
mysql_query("update motores set marca_despus_de_url=\"';\" where nombre = 'Altavista' ;");
mysql_query("update motores set marca_antes_de_ttulo='\">' where nombre = 'Altavista' ;");
mysql_query("update motores set marca_despus_de_ttulo='</A>' where nombre = 'Altavista' ;");
mysql_query("update motores set marca_antes_de_resumen='class=s>' where nombre = 'Altavista' ;");
mysql_query("update motores set marca_despus_de_resumen='<BR>' where nombre = 'Altavista' ;");
mysql_query("update motores set separador_de_palabras='+' where nombre = 'Altavista' ;");
echo "Tabla motores creada.<br>";
mysql_query("CREATE TABLE categoras (
cdigo int(10) unsigned NOT NULL auto_increment,
nombre char(100) NOT NULL,
_tab_usuarios int(10) NOT NULL,
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");
mysql_query("insert into categoras values (NULL,'- Todo -',1);");
mysql_query("insert into categoras values (NULL,'Hardware',1);");
mysql_query("insert into categoras values (NULL,'Software',1);");
mysql_query("insert into categoras values (NULL,'Autos' ,1);");
mysql_query("insert into categoras values (NULL,'Ofertas' ,1);");
mysql_query("insert into categoras values (NULL,'Compras' ,1);");
mysql_query("insert into categoras values (NULL,'Programacin orientada a objetos' ,2);");
mysql_query("insert into categoras values (NULL,'Inteligencia Artificial' ,2);");
mysql_query("insert into categoras values (NULL,'Deportes' ,3);");
echo "Tabla categoras creada.<br>";
mysql_query("CREATE TABLE parmetros (
nombre varchar(80) default '',
descripcin varchar(80)
) TYPE=MyISAM;");
mysql_query("INSERT
INTO
parmetros
VALUES
('UNIVERSIDAD
TECNOLGICA
EQUINOCCIAL','SuperBuscador Inteligente');");
echo "Tabla parmetros creada.<br>";
mysql_query("CREATE TABLE usuarios (
cdigo int(3) NOT NULL auto_increment,
nombre varchar(30) NOT NULL default '',
clave varchar(30) default '',
grupo enum('administradores','visitantes','operadores') default 'visitantes',
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");
mysql_query("Insert into usuarios values (NULL,'ADMINISTRADOR','ADM','administradores');");
mysql_query("Insert into usuarios values (NULL,'VISITANTE','','visitantes');");
mysql_query("Insert into usuarios values (NULL,'SEGUNDO ARVALO','SA','administradores');");
mysql_query("Insert into usuarios values (NULL,'V2','V2','visitantes');");
mysql_query("Insert into usuarios values (NULL,'V3','V3','visitantes');");
mysql_query("Insert into usuarios values (NULL,'OP','OP','operadores');");
echo "Tabla usuarios creada.<br>";
mysql_query("CREATE TABLE lugares (
cdigo int(10) unsigned NOT NULL auto_increment,
nombre char(100) NOT NULL,
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

12

) TYPE=MyISAM;");
mysql_query("insert into lugares values (NULL,'- Todo el mundo -');");
mysql_query("insert into lugares values (NULL,'Ecuador');");
mysql_query("insert into lugares values (NULL,'Quito');");
mysql_query("insert into lugares values (NULL,'Guayaquil');");
mysql_query("insert into lugares values (NULL,'Cuenca');");
mysql_query("insert into lugares values (NULL,'Pichincha');");
mysql_query("insert into lugares values (NULL,'Guayas');");
echo "Tabla lugares creada.<br>";
mysql_query("CREATE TABLE bsquedas (
cdigo int(10) unsigned NOT NULL auto_increment,
nombre char(32),
_tab_usuarios int(10) NOT NULL,
texto_a_buscar varchar(100),
_tab_preferencias int(10),
_tab_categoras int(5),
_tab_lugares int(5),
solo_en_espanol int(1),
frase_exacta int(1),
buscar_solamente int(1),
fecha
date,
PRIMARY KEY
(cdigo)
) TYPE=MyISAM;");
echo "Tabla bsquedas creada.<br>";
mysql_query("CREATE TABLE resultados (
cdigo int(10) unsigned NOT NULL auto_increment,
_tab_usuarios int(10) NOT NULL,
_tab_bsquedas int(10) NOT NULL,
motor char(32),
ttulo varchar(100),
url varchar(100),
resumen varchar(255),
PRIMARY KEY (cdigo)
) TYPE=MyISAM;");
echo "Tabla resultados creada.<br>";
mysql_query("CREATE TABLE elementos (
cdigo int(3) NOT NULL auto_increment,
nombre varchar(30) NOT NULL default '',
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");
mysql_query("insert into elementos values (1,'Artculo');");
mysql_query("insert into elementos values (2,'Pronombre');");
mysql_query("insert into elementos values (3,'Sustantivo');");
mysql_query("insert into elementos values (4,'Verbo');");
mysql_query("insert into elementos values (5,'Adverbio');");
mysql_query("insert into elementos values (6,'Preposicin');");
mysql_query("insert into elementos values (7,'Conjuncin');");
mysql_query("insert into elementos values (8,'INFORMTICA');");
echo "Tabla elementos del lenguaje creada.<br>";
mysql_query("CREATE TABLE diccionario (
cdigo int(10) NOT NULL auto_increment,
nombre varchar(30) NOT NULL default '',
_tab_elementos int(3),
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");

mysql_query("insert into diccionario values (NULL,'BUSCAR',4);");


mysql_query("insert into diccionario values (NULL,'CORRER',4);");
mysql_query("insert into diccionario values (NULL,'JUGAR',4);");
mysql_query("insert into diccionario values (NULL,'COMER',4);");
mysql_query("insert into diccionario values (NULL,'DORMIR',4);");
mysql_query("insert into diccionario values (NULL,'ENCONTRAR',4);");
mysql_query("insert into diccionario values (NULL,'UN',1);");
mysql_query("insert into diccionario values (NULL,'UNO',1);");
mysql_query("insert into diccionario values (NULL,'UNA',1);");
mysql_query("insert into diccionario values (NULL,'EL',1);");
mysql_query("insert into diccionario values (NULL,'LA',1);");
mysql_query("insert into diccionario values (NULL,'LOS',1);");
mysql_query("insert into diccionario values (NULL,'LAS',1);");

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

13

mysql_query("insert into diccionario values (NULL,'Y',7);");


mysql_query("insert into diccionario values (NULL,'O',7);");
mysql_query("insert into diccionario values (NULL,'AYER',5);");
mysql_query("insert into diccionario values (NULL,'AHORA',5);");
mysql_query("CREATE TABLE preferencias (
cdigo int(10) unsigned NOT NULL auto_increment,
nombre char(100) NOT NULL,
trminos_separados_por_comas_ char(255),
_tab_usuarios int(10) NOT NULL,
nivel int(2),
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");
mysql_query("insert into preferencias values (NULL,'- Ninguna -','',1,1);");
mysql_query("insert into preferencias values (NULL,'Deportes Masivos','Futbol,Basquet',1,1);");
mysql_query("insert into preferencias values (NULL,'Informtica','IA,Programacin,Software,Hardware',1,1);");
mysql_query("insert into preferencias values (NULL,'Inteligencia Artificial','Sistema Experto,Sistemas
Expertos,Reconocimiento de Patrones, Red Neuronal',1,2);");
mysql_query("insert into preferencias values (NULL,'Sistemas Expertos','Reglas',1,3);");
mysql_query("insert into preferencias values (NULL,'Reconocimiento de Patrones','KNN',1,3);");
mysql_query("insert into preferencias values (NULL,'Software','Lenguaje C,ADA',1,2);");
mysql_query("insert into preferencias values (NULL,'Lenguaje C','Informtica,Software',1,3);");
mysql_query("CREATE TABLE trminos (
cdigo int(3) NOT NULL auto_increment,
nombre varchar(30) NOT NULL default '',
PRIMARY KEY (cdigo),
UNIQUE KEY (nombre)
) TYPE=MyISAM;");
echo "Tabla diccionarios creada.<br>";
echo "Tablas creadas.<br>";
echo "<br>Fin del proceso para crear Base de Datos y Tablas<br><br>";
echo '<input type=button value="Refrescar Pantalla"
onclick="window.open(\'hist.php\',\'hist\',\'\');history.go(-1);">';
?>

5.3. ANIMACIONES FLASH


Esta es la animacin inicio.swf

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

14

Esta es la animacin logosbi.swf

6.

CDIGO FUENTE
Contenido de todos los archivos .PHP.

6.1. ADMINISTRAR.PHP
<?php
include("ayudas.php");
inicio();
estilos();
echo "<center>";
echo "<br><br>";
echo "<a href=crearbuscador.php>Clic aqu para Borrar BDD y Tablas, Crear BDD y Tablas</a><br>";
echo "<br><br>";
echo "<h3>Elija la tabla que desea ver/modificar:</h3>";
echo "<br>";
echo "<a href=admin_tabla.php?t=parmetros>Parmetros</a><br>";
echo "<a href=admin_tabla.php?t=categoras>Categoras</a><br>";
echo "<a href=admin_tabla.php?t=lugares>Lugares</a><br>";
echo "<a href=admin_tabla.php?t=motores>Motores</a><br>";
echo "<a href=admin_tabla.php?t=usuarios>Usuarios</a><br>";
echo "<br>";
echo "<a href=admin_tabla.php?t=preferencias>Preferencias</a><br>";
echo "<br>";
echo "<a href=admin_tabla.php?t=elementos>Elementos de Lenguaje</a><br>";
echo "<a href=admin_tabla.php?t=diccionario>Diccionario</a><br>";
echo "<br>";
echo "<a href=admin_tabla.php?t=bsquedas>Bsquedas</a><br>";
echo "<a href=admin_tabla.php?t=resultados>Resultados</a><br>";
echo "</center>";
fin();
?>

6.2. ADMIN_TABLA.PHP
<?php
// admin_tabla.php versin 2004.4.11 - Abril 2004
// Administra dinmicamente los registros de una tabla bdd
// $t es el nombre de la tabla
// $w es la clusula where para filtrar registros en tabla administrada
// Esta versin no necesita que las tablas tengan clave primaria
// Si no hay clave primaria, se usa el primer campo para identificar registros
// Las tablas relacionadas necesitan tener un campo llamado 'nombre'
define ("MAXLONGHORIZ",35); // Mxima longitud campo registro formato horizontal
define ("MAXLONGVERTI",80); // Mxima longitud campo registro formato vertical
define ("MINLONGCAMPO",80); // Mnima longitud de campo para relleno
include ("ayudas.php");
global $t;

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

15

if (empty($t)) { echo 'No ha indicado tabla o versin incorrecta de ayudas.php'; exit(); }


$t=urldecode($t);
if(!empty($wt))$wt=urldecode($wt);
if(!empty($wv))$wv=urldecode($wv);
inicio ();
estilos();
db_open();
if (isset($botonlistar )) forma_listar_registro($t);
if (isset($botoncambiar)) forma_modificar_registro($t);
if (isset($botonagregar)) forma_agregar_registro($t);
if (isset($botonborrar )) query_borrar_registro($t);
if (isset($botonupdate )) query_update_registro($t);
if (isset($botoninsert )) query_insert_registro($t);
forma_admin_tabla($t);
fin();
// Borra un registro dado un cdigo del formulario
function query_borrar_registro ($tab){
global $campocodigo;
if (!empty($campocodigo)) db_borrar_registro($tab,$campocodigo);
}
//Construye el query update con los valores del formulario
function query_update_registro($tab){
global $campocodigo; // En el formulario modificar
if (empty($campocodigo)) return;
$rs=db_query("select * from $tab limit 1");
$nc=db_num_fields($rs);
$q="update $tab set ";
for ($c=0;$c<$nc;$c++) {
$nom=db_nombre_campo($tab,$c);
$con=$GLOBALS[$nom];
$q=$q."$nom='$con'";
if ($c<($nc-1)) $q=$q.', ';
}
$nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab));
$q=$q." where $nombrecodigo='$campocodigo';";
$r=db_query ($q);
if($r!=1) { echo 'Error al grabar cambios en $tab '; db_error(); }
}
//Construye el query insert con los valores del formulario
function query_insert_registro($tab){
$rs=db_query("select * from $tab limit 1");
$nc=db_num_fields($rs);
$q="insert into $tab values (";
for ($c=0;$c<$nc;$c++) {
$nom=db_nombre_campo($tab,$c);
$con=$GLOBALS[$nom];
if(db_campo_auto_increment($tab,$c)) $q=$q.'NULL'; else $q=$q."'$con'";
if ($c<($nc-1)) $q=$q.', ';
}
$q=$q.");";
$r=db_query ($q);
if($r!=1) { echo 'Error al insertar registro en $tab '; db_error(); }
}
//Formulario para administrar una tabla
function forma_admin_tabla($tabla) {
//Construye la clusula where y muestra filtro al inicio de la tabla
//Aumentado Abril 9 para filtrar categoras por usuario
global $wt,$wv;
if(empty($wt) || empty($wv))$p=$w=""; else {
$w=" where $wt=$wv";
$nom=$wt;
$i=substr($wt,0,5);
$lnk=($i=='_tab_'||$i=='_all_'||$i=='_fld_'||$i=='_lnk_');
if ($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
$etiq=ucfirst(singular($ntab));
$wv=nombre($ntab,$wv);
}

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

16

else
$etiq=ucfirst(singular($nom));
$p="<br>para $etiq=$wv";
}
$rs=db_query("select * from $tabla$w;");
if($rs==null) { nohaytabla($tabla); return; }
$nc=db_num_fields($rs);
$nr=db_num_rows($rs);
$nk=db_num_campo_primary_key($tabla);
echo "<center><h4>Contenido de Tabla $tabla$p</h4>";
echo '<form name=forma_admin_tabla method=post>';
if($nr>0)
echo "<select name='campocodigo' size='12' class='y'>";
for ($i=0; $i<$nr; $i++) {
$reg=db_fetch_array($rs);
$t='';
for($c=0;$c<$nc;$c++){
$con=contenido_campo($tabla,$c,$reg[$c]);
$lon=db_longitud_campo($tabla,$c);
if($lon>MAXLONGHORIZ) $lon=MAXLONGHORIZ;
if(strlen($con)>MAXLONGHORIZ) {
$con=substr($con,0,MAXLONGHORIZ);
}
if($lon<=MINLONGCAMPO&&strlen($con)<$lon)
$con=str_pad($con,$lon," ");
$con=str_replace(" ","&nbsp;",$con);
$t=$t.$con;
if ($c<($nc-1)) $t=$t.' | ';
}
echo '<option value='.$reg[$nk].($i==0?' selected>':'>').$t.' ';
}
if($nr>0) {
echo '</select><br><br>';
boton_listar();
boton_cambiar();
boton_borrar();
}
boton_agregar();
echo '<br>';
boton_regresar();
echo '</form></center>';
}
//Visualiza el registro con cdigo campocodigo
function forma_listar_registro($tab){
global $campocodigo;
if (empty($campocodigo)) return;
echo "<center><h4>Visualizando registro en $tab</h4>";
echo '<form method=post name=forma_admin_tabla>';
$nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab));
$rs=db_query("select * from $tab where $nombrecodigo='$campocodigo'");
$nc=db_num_fields($rs);
$reg=db_fetch_row($rs);
echo '<table border=0 cellpadding=0 cellspacing=0>';
for ($c=0;$c<$nc;$c++) {
$con=detalles_y_contenido_campo($tab,$c,$nom,$etiq,$lon,$lnk,$reg[$c]);
if($nom==$nombrecodigo) continue;
mostrar_campo_para_ver
($tab,$c,$nom,$etiq,$lon,$lnk,$con);
}
echo '</table><br><br>';
echo "<input type=hidden name='campocodigo' value='$campocodigo'>";
boton_cambiar();
boton_cancelar();
echo '</form></center>';
exit;
}
//Modifica el registro con cdigo campocodigo
function forma_modificar_registro($tab){
global $campocodigo;
if (empty($campocodigo)) return;
echo "<center><h4>Modificando registro en $tab</h4>";
echo '<form method=post name=forma_admin_tabla>';
$nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab));
$rs=db_query("select * from $tab where $nombrecodigo='$campocodigo'");

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

17

$nc=db_num_fields($rs);
$reg=db_fetch_row($rs);
echo '<table border=0 cellpadding=0 cellspacing=0>';
for ($c=0;$c<$nc;$c++) {
$con=detalles_y_contenido_campo($tab,$c,$nom,$etiq,$lon,$lnk,$reg[$c]);
mostrar_campo_para_modificar ($tab,$c,$nom,$etiq,$lon,$lnk,$reg[$c]);
}
echo '</table><br><br>';
echo "<input type=hidden name='campocodigo' value='$campocodigo'>";
boton_update();
boton_cancelar();
echo '</form></center>';
exit;
}
//Muestra un formulario para agregar registros a una tabla
function forma_agregar_registro($tab){
echo "<center><h4>Agregando registro en $tab</h4>";
echo "<form method=post name=forma_admin_tabla>";
$rs = db_query("select * from $tab limit 1");
$nc = db_num_fields($rs);
echo '<table border=0 cellpadding=0 cellspacing=0>';
for ($c=0; $c<$nc; $c++) {
detalles_campo
($tab,$c,$nom,$etiq,$lon,$lnk);
mostrar_campo_para_agregar ($tab,$c,$nom,$etiq,$lon,$lnk);
}
echo '</table><br><br>';
boton_insert();
boton_cancelar();
echo '</form></center>';
exit;
}
//Convierte de plural a singular
function singular($t) {
$r = $t;
if (substr ($t,strlen($t)-4,4) == 'ones'){ // Coloca tildes
return substr($t,0,strlen($t)-4).'n';
}
$f=substr ($t,strlen($t)-3,3);
// funciones debe eliminar y dejar funcion
if ($f != "ores" && // Indicadores
$f != "les" &&
$f != "mes" &&
$f != "tes" &&
substr ($t,strlen($t)-2,2) == "es")
$r = substr ($t,0,strlen($t)-2);
else if (substr ($t,strlen($t)-1,1) == "s")
$r = substr ($t,0,strlen($t)-1);
$r=str_replace("_"," ",$r);
return $r;
}
function boton_cambiar(){
echo "<input type=submit class=x name='botoncambiar' value='Cambiar'>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
}
function boton_listar(){
echo "<input type=submit class=x name='botonlistar' value='Ver'>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
}
function boton_borrar(){
echo "<input type=submit class=x name='botonborrar' value='Borrar'>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
}
function boton_agregar(){
echo "<input type=submit class=x name='botonagregar' value='Agregar'><br>";
}
function boton_insert(){
echo "<input type=submit class=x name='botoninsert' value='Grabar'>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
}
function boton_update(){
echo "<input type=submit class=x name='botonupdate' value='Grabar'>";

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

18

echo "&nbsp;&nbsp;&nbsp;&nbsp;";
}
function boton_cancelar(){
echo "<input type=submit class=x name='botonvolver' value='Cancelar'>";
}
//Solamente permite ver el contenido del campo.
function mostrar_campo_para_ver($tab,$c,$nom,$etiq,$lon,$lnk,$con){
echo "<tr><td width='30%' align=right>$etiq : <td width=30>&nbsp;";
echo "<td width='68%'><input size='$lon' name='$nom' value='$con' readonly>";
}
//Devuelve nombre, longitud y contenido del campo
function detalles_y_contenido_campo($tab,$c,&$nom,&$etiq,&$lon,&$lnk,$v) {
detalles_campo($tab,$c,$nom,$etiq,$lon,$lnk);
if ($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
return nombre($ntab,$v);
}
return contenido_campo($tab,$c,$v);
}
//Devuelve nombre y longitud del campo
function detalles_campo($tab,$c,&$nom,&$etiq,&$lon,&$lnk) {
$nom=db_nombre_campo($tab,$c);
$i=substr($nom,0,5);
$lnk=($i=='_tab_'||$i=='_all_'||$i=='_fld_'||$i=='_lnk_');
if ($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
$tab=$ntab; $c=db_num_campo($tab,'nombre');
$etiq=ucfirst(singular($ntab)).' '.$e;
}
else
$etiq=ucfirst(singular($nom));
$lon=db_longitud_campo($tab,$c);
if($lon>MAXLONGVERTI)$lon=MAXLONGVERTI;
}
//Devuelve contenido del campo
function contenido_campo($tab,$c,$v) {
$nom=db_nombre_campo($tab,$c);
$con=htmlentities($v);
return $con;
}
//Para facilitar la construccin de opciones y seleccionar opcion activa
function mostrar_opcion($c,$n,$a=''){
$s=($c==$a)?" selected":"";
return "<option value='$c'$s>$n";
}
//Pide el contenido de un campo para agregar un nuevo registro
function mostrar_campo_para_agregar($tab,$c,$nom,$etiq,$lon,$lnk){
global $wt, $wv;
$ro="";
if (db_campo_auto_increment($tab,$c)) $ro=' readonly';
$nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab));
if($nom!=$nombrecodigo)
echo "<tr><td width='30%' align=right>$etiq : <td width=30>&nbsp;";
if (isset($wt) && $wt==$nom) {
$str="<input size='$lon' name='$nom' value='$wv' readonly>";
if($nom==$nombrecodigo)
$str="<input type=hidden name='$nom' value='$wv'>";
else
if($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
$str="<select name='$nom' readonly>";
$nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab));

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

19

$rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab where cdigo=$wv");


$nr=db_num_rows($rs);
$reg=db_fetch_row($rs);
$str.=mostrar_opcion($wv,$reg[1],$wv);
$str.="</select>";
}
}
else {
$str="<input size='$lon' name='$nom'$ro>";
if($nom==$nombrecodigo)
$str="<input type=hidden name='$nom' value='$wv'>";
else
if($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
$str="<select name='$nom'$ro>";
$nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab));
$rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab");
$nr=db_num_rows($rs);
$str.=mostrar_opcion("","");
for($i=0;$i<$nr;$i++) {
$reg=db_fetch_row($rs);
$str.=mostrar_opcion($reg[0],$reg[1]);
}
$str.="</select>";
}
}
echo "<td width='68%'>$str";
}
//Permite modificar el contenido de un campo
function mostrar_campo_para_modificar($tab,$c,$nom,$etiq,$lon,$lnk,$con){
global $wt, $wv;
$ro=(db_campo_auto_increment($tab,$c)||db_campo_primary_key($tab,$c))
?' readonly':'';
$nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab));
if($nom!=$nombrecodigo)
echo "<tr><td width='30%' align=right>$etiq : <td width=30>&nbsp;";
if (isset($wt) && $wt==$nom) {
$str="<input size='$lon' name='$nom' value='$con' readonly>";
if($nom==$nombrecodigo)
$str="<input type=hidden name='$nom' value='$wv'>";
else
if($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
$str="<select name='$nom' readonly>";
$nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab));
$rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab where cdigo=$wv");
$nr=db_num_rows($rs);
$reg=db_fetch_row($rs);
$str.=mostrar_opcion($wv,$reg[1],$con);
$str.="</select>";
}
}
else {
$str="<input size='$lon' name='$nom' value='$con'$ro>";
if($nom==$nombrecodigo)
$str="<input type=hidden name='$nom' value='$wv'>";
else
if($lnk){
$n=substr($nom,5,60);
$ntab=$n; $e='';
if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2);
$str="<select name='$nom'$ro>";
$nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab));
$rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab");
$nr=db_num_rows($rs);
$str.=mostrar_opcion("","",$con);
for($i=0;$i<$nr;$i++) {
$reg=db_fetch_row($rs);
$str.=mostrar_opcion($reg[0],$reg[1],$con);

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

20

}
$str.="</select>";
}
}
echo "<td width='68%'>$str";
}
?>

6.3. AYUDAS.PHP
<?php
//
include("ayudas_config.php");
if(empty($ingreso)) {
session_start();
//Verifica que haya ingresado con nombre de usuario y contrasea
if (empty($_SESSION["nombre_usuario"])) { inicio(); estilos(); exit(); }
}
// Sirve para evitar el uso de register_globals = on
// Y para facilitar el uso de argumentos y variables de sesin
register_globals($_GET);
register_globals($_POST);
register_globals($_ENV);
if(empty($ingreso)) register_globals($_SESSION);
function register_globals(&$a) {
foreach($a as $n => $v){$GLOBALS[$n]=$v;}
}
//Construye el encabezado
function inicio ($archivo='',$bgcolor=BGCOLOR) {
echo '<!doctype html public "-//w3c//dtd html 4.0 transitional//es">'."\n"
."<html>\n"
."<head>\n"
."<title>".TITULO."</title>\n"
.'<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'."\n"
.'<meta http-equiv="Content-Script-Type" content="text/javascript">'."\n"
.'<meta http-equiv="cache-control" content="no-cache">'."\n"
.'<meta http-equiv="pragma" content="no-cache">'."\n"
."</head>\n<body bgcolor=$bgcolor>";
}
//Funcion para terminar la pgina
function fin(){
echo "\n</body>\n</html>\n";
exit;
}
// Dibuja el botn cerrar
function boton_cerrar() {
echo '<input type=button value="Cerrar" onclick="window.close();">';
}
// Dibuja el botn regresar
function boton_regresar() {
echo '<input type=button value="Pantalla Anterior" onclick="history.go(-1);">';
}
// Abre la base de datos
function db_open ($db=DBNAME) {
$l=mysql_connect(DBHOST, DBUSER, DBPASS);
if (!$l) {
print "<br><b>Activar MySQL y revisar usuario/contrasea.<br>";
print " MySQL no est corriendo o error en nombre de usuario y contrasea.<br>";
echo 'Revise el archivo ayudas.php y modifique usuario y password<br>';
db_error();
return;
}
if($db=='') {
echo 'Revise el archivo ayudas.php y modifique el nombre de la base de datos<br>';
db_list_databases();
return;
}
$r = mysql_select_db($db, $l);
if (!$r) {
echo "<br><b>No fue posible conectar con base de datos $db<br>";
echo "Revisar el nombre de la bdd y si tiene los permisos de acceso.</b><br>";

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

21

db_error();
db_list_databases();
}
}
// Lista las bases de datos
function db_list_databases(){
$rs=db_list_dbs();
$nr=db_num_rows($rs);
echo "Existen $nr bases de datos<br>";
for ($i=0;$i<$nr;$i++) {
$reg=db_fetch_row($rs);
echo $reg[0].'<br>';
}
}
// Lista las tablas de la base de datos seleccionada
function db_list_tables() {
$rs=db_query("show tables");
if ($rs==null) {echo 'error '; return; }
$nr=db_num_rows($rs);
echo "Existen $nr tablas<br>";
for ($i=0;$i<$nr;$i++) {
$reg=db_fetch_row($rs);
echo 'Tabla <b>'.$reg[0].'</b><br>';
db_list_fields($reg[0]);
}
}
// Lista los campos de una tabla
function db_list_fields($tabla) {
$rs=db_query("show fields from $tabla");
if ($rs==null) {echo 'error '; return; }
$nr=db_num_rows($rs);
echo "$tabla tiene $nr campos<br>";
for ($i=0;$i<$nr;$i++) {
$reg=db_fetch_row($rs);
echo db_nombre_campo ($tabla,$i).' ';
echo db_longitud_campo($tabla,$i).' ';
echo $reg[1].' '.$reg[2].' '.$reg[3].' '.'<br>';
}
}
// Lista los registros de una tabla en formato horizontal
function db_list($tabla,$extras='') {
global $desdecampo;
if (empty($desdecampo)) $desdecampo=0;
$rs=db_query("show fields from $tabla");
if ($rs==null) {echo 'error '; return; }
$nc=db_num_rows($rs);
echo "<center><table border=1 cellpadding=0 cellspacing=0>";
echo "<tr>";
for ($i=$desdecampo;$i<$nc;$i++) {
$reg=db_fetch_row($rs);
echo '<th>';
echo strtoupper(etiqueta(db_nombre_campo ($tabla,$i)));
echo '</th>';
}
echo '</tr>';
$rs=db_query("select * from $tabla $extras");
$nr=db_num_rows($rs);
echo "<tr>";
for ($n=0;$n<$nr;$n++) {
$reg=db_fetch_row($rs);
for ($i=$desdecampo;$i<$nc;$i++) {
$x=$reg[$i];
// Caso especial, campos en blanco
if (empty($x))$x='&nbsp;';
// Caso especial, campos tipo fecha
if (strstr(db_nombre_campo ($tabla,$i),'fecha'))
echo '<td align=right>'.fecha($x).'</td>';
else echo '<td>'.$x.'</td>';
}
echo '</tr>';
}
echo '</table></center>';
}

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

22

// Lista los registros de una tabla en formato vertical


function db_list_vertical($tabla,$extras='') {
global $desdecampo;
if (empty($desdecampo)) $desdecampo=0;
$rs=db_query("show fields from $tabla");
if ($rs==null) {echo 'error '; return; }
$nc=db_num_rows($rs);
$rs=db_query("select * from $tabla $extras");
$nr=db_num_rows($rs);
echo "<center><table border=1 cellpadding=0 cellspacing=0>";
for ($n=0;$n<$nr;$n++) {
$reg=db_fetch_row($rs);
for ($i=$desdecampo;$i<$nc;$i++) {
$nom=db_nombre_campo ($tabla,$i);
echo "<tr><td width=200 align=right>";
echo ucfirst(etiqueta($nom));
echo "<td width=10>";
$x=$reg[$i];
if (empty($x))$x='&nbsp;';
if (strstr($nom,'fecha'))
echo '<td align=right>'.fecha($x).'</td>';
else echo '<td>'.$x.'</td>';
echo '</tr>';
}
}
echo '</table></center>';
}
// Devuelve el nombre de un campo
function etiqueta($n) {
$i=substr($n,0,5);
$f=substr($n,5,100);
if($i=='_lnk_') return $f;
if($i=='_tab_') return $f;
if($i=='_fld_') return $f;
if($i=='_all_') return $f;
return $n;
}
// Devuelve el nombre de un campo n de una tabla con nombre
function db_nombre_campo($tabla,$numerocampo) {
$rs=db_query("select * from $tabla limit 1");
if ($rs==null) {echo 'error '; return; }
return mysql_field_name($rs,$numerocampo);
}
// Devuelve la longitud de un campo n de una tabla con nombre
function db_longitud_campo($tabla,$nc) {
$rs=db_query("select * from $tabla limit 1");
if ($rs==null) {echo 'error '; return; }
return mysql_field_len($rs,$nc);
}
// Devuelve el tipo de un campo n de una tabla con nombre
function db_tipo_campo($tabla,$numerocampo) {
$rs=db_query("select * from $tabla limit 1");
if ($rs==null) {echo 'error '; return; }
return mysql_field_type($rs,$numerocampo);
}
// Devuelve flags de un campo n de una tabla con nombre
function db_flags_campo($tabla,$numerocampo) {
$rs=db_query("select * from $tabla limit 1");
if ($rs==null) {echo 'error '; return; }
return mysql_field_flags($rs,$numerocampo);
}
//Indica si un campo es autoincremental
function db_campo_auto_increment($t,$c) {
$f=db_flags_campo($t,$c);
return strstr($f,'auto_increment');
}
//Indica si un campo es clave primaria
function db_campo_primary_key($t,$c) {
$f=db_flags_campo($t,$c);
return strstr($f,'primary');
}
//Indica el nmero de campo dado un nombre

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

23

function db_num_campo($t,$n) {
$rs=db_query("select * from $t limit 1");
if ($rs==null) {echo 'error '; return; }
$nc=db_num_fields($rs);
for ($c=0;$c<$nc;$c++){
$f=db_nombre_campo($t,$c);
if ($f==$n) return $c;
}
return 0;
}
//Indica el nmero de campo de clave primaria o 0 si no existe
function db_num_campo_primary_key($t) {
$rs=db_query("select * from $t limit 1");
if ($rs==null) {echo 'error '; return; }
$nc=db_num_fields($rs);
for ($c=0;$c<$nc;$c++){
$f=db_flags_campo($t,$c);
if (strstr($f,'primary')) return $c;
}
return 0;
}
// Llama a la funcion de sql
function db_list_dbs () {
return mysql_list_dbs ();
}
// Llama a la funcion de sql
function db_error () {
return mysql_error ();
}
// Llama a la funcion de sql
function db_free_result ($r) {
return mysql_free_result ($r);
}
//Realiza una consulta sin chequear error
function db_query_no_check ($q) {
$r = mysql_query ($q);
return $r;
}
// Llama a la funcion de sql
function db_query ($q) {
$r = mysql_query ($q);
if ($r == null)
echo "<br><b>Error en query $q</b><br>".db_error()."<br>\n";
return $r;
}
// Llama a la funcion de sql
function db_num_rows ($r) {
if (empty($r)) { echo "Error. Recordset vaco."; return 0; }
return mysql_num_rows ($r);
}
// Llama a la funcion de sql
function db_num_fields ($r) {
if (empty($r)) { echo "Error. Recordset vaco."; return 0; }
return mysql_num_fields ($r);
}
// Llama a la funcion de sql
function db_fetch_row ($r) {
if (empty($r)) { echo "Error. Recordset vaco."; return ""; }
return mysql_fetch_row ($r);
}
//Lee un registro de una tabla dado su cdigo
function db_leer_registro($tabla,$codigo) {
$q="select * from $tabla where cdigo='$codigo';";
echo $q;
$rs=db_query_no_check($q);
if ($rs==null) return null;
if (db_num_rows($rs) < 1) return null;
return db_fetch_array($rs);
}
//Borra un registro de una tabla, dando el cdigo
function db_borrar_registro($tabla,$codigo) {
$nombrecodigo=db_nombre_campo($tabla,db_num_campo_primary_key($tabla));
$q="delete from $tabla where $nombrecodigo='$codigo';";
$r=db_query($q);

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

24

if ($r!=1) echo "<br>Error en el programa. Intente de nuevo.<br>";


}
// Llama a la funcion de sql
function db_fetch_array ($r) {
if (empty($r)) { echo "Error. Recordset vaco"; return ""; }
return mysql_fetch_array ($r);
}
// Inserta un registro en una tabla
function db_insert ($tabla, $contenido) {
if($contenido=='') {
echo 'Falta contenido para insert tabla $tabla<br>';
echo 'ejemplo: db_insert ("estudiantes","\'Juan Prez\',123");<br>';
return;
}
$q="insert into $tabla values ( $contenido );";
db_query ($q);
}
// Borra uno o mas registros en una tabla
function db_delete($tabla, $where='') {
if($where=='') {
echo 'Falta clusula where para delete tabla $tabla<br>';
echo 'ejemplo: db_delete ("estudiantes","where nombre=\'Juan Prez\'");<br>';
return;
}
$q="delete from $tabla $where;";
u_db_query ($q);
}
// Actualiza los campos de un registro de una tabla
function db_update($tabla, $valores='', $where='') {
if($valores=='') {
echo 'Faltan valores para update tabla $tabla<br>';
echo 'ejemplo: db_update ("estudiantes","nombre=\'Juan Prez\'","where cedula=123");<br>';
return;
}
if($where=='') {
echo 'Falta clusula where para update tabla $tabla<br>';
echo 'ejemplo: db_update ("estudiantes","nombre=\'Juan Prez\'","where cedula=123");<br>';
return;
}
$q="update $tabla set $valores $where;";
u_db_query ($q);
}
//Devuelve los minutos de diferencia entre dos horas inicio y salida
//Devuelve valor negativo si inicio es mayor que salida
function diferencia_tiempo($hi,$hs) {
list($hhi,$hmi)=explode(":",$hi); // Descompone en horas y minutos
list($hhs,$hms)=explode(":",$hs); // Descompone en horas y minutos
$m = (mktime($hhs,$hms,0,1,1,2004) - mktime($hhi,$hmi,0,1,1,2004)) / 60;
return $m;
}
function fecha($v){
if(substr($v,4,1)!='-' && substr($v,8,1)!='-') return 'fecha incorrecta '.$v;
$aa=substr($v,0,4);
$mm=substr($v,5,2);
$dd=substr($v,8,2);
$dia = $mes = $v = "";
if ($aa != 0 AND $mm != 0 AND $dd != 0) {
$dn = date("w",mktime(0,0,0,$mm,$dd,$aa));
$dia = "Dom";
if ($dn == 1) $dia = "Lun"; if ($dn == 2) $dia = "Mar";
if ($dn == 3) $dia = "Mi"; if ($dn == 4) $dia = "Jue";
if ($dn == 5) $dia = "Vie"; if ($dn == 6) $dia = "Sb";
if ($mm == 1) $mes = "Ene"; if ($mm == 2) $mes = "Feb";
if ($mm == 3) $mes = "Mar"; if ($mm == 4) $mes = "Abr";
if ($mm == 5) $mes = "May"; if ($mm == 6) $mes = "Jun";
if ($mm == 7) $mes = "Jul"; if ($mm == 8) $mes = "Ago";
if ($mm == 9) $mes = "Sep"; if ($mm == 10) $mes = "Oct";
if ($mm == 11) $mes = "Nov"; if ($mm == 12) $mes = "Dic";
$v=' '.$dia.' '.$dd.'-'.$mes.'-'.$aa;
}
return $v;
}
function nohaytabla($t){
echo "No existe tabla $t<br>Falta configurar los parmetros del sistema<br>";

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

25

db_error();
exit;
}
function nohayregistros($t){
echo "Tabla $t no tiene registros<br>Falta crear registros.<br>";
db_error();
exit;
}
//Devuelve un campo dado su cdigo
function nombre($t,$cod) {
$rs=db_query("select nombre from $t where cdigo='$cod';");
if($rs==null) nohaytabla($t);
$rec=db_fetch_row($rs);
return $rec[0];
}
//Devuelve un campo dado un cdigo. Se usa para relacionar tablas
function nombre_desde_codigo($t,$campodeseado,$campocodigo,$v) {
$rs=db_query("select $campodeseado from $t where $campocodigo='$v';");
if($rs==null) nohaytabla($t);
$rec=db_fetch_row($rs);
return $rec[0];
}
function alert($s) {
$s=str_replace("<br>","\\n",$s);
echo "<script language=javascript>alert('$s');</script>";
}
?>

6.4. BUSCAR.PHP
<?php
include ('ayudas.php');
inicio();
db_open();
//Graba la bsqueda en la base de datos
$espanol = ($solo_en_espanol =='on'?1:0);
$exacta = ($frase_exacta =='on'?1:0);
$analizar = ($buscar_solamente
?0:1);
//Se incluy campo nombre para facilitar las consultas en tabla bsquedas
$q="insert into bsquedas values (NULL,"
."'$texto_a_buscar'," // Este es el campo nombreen campo nombre
."'$codigo_usuario',"
."'$texto_a_buscar',"
."'$preferencias',"
."'$categoria_a_buscar',"
."'$donde_buscar',"
."$espanol,"
."$exacta,"
."$analizar,"
."'".date("Y-m-d h:m:s")."'"
.");";
db_query($q);
//Recoge el valor del campo cdigo (campo declarado como autoincrement)
$codigo_de_busqueda=mysql_insert_id();
//Muestra la pgina de historial
echo "<script language=javascript>
window.open('hist.php','hist','');
</script>";
//Busca en la bdd la tabla motores
$rsm=db_query('select * from motores');
if($rsm == null) {echo '<br>ERROR: no existe tabla motores. Debe crearla el administrador.'; exit;}
$nrm=db_num_rows($rsm);
// En estas variables se guarda la informacin del motor
global $reg,$url_motor,$nombre_motor,$numero_de_resultados,$errorgrave;
$errorgrave=0;
//Llama a los motores de bsqueda registrados en la bdd, graba los resultados.
for ($i=1;$i<=$nrm; $i++) {
$reg=db_fetch_array($rsm);
$url_motor = $reg ['url_y_comando_de_bsqueda'];
$nombre_motor = $reg ['nombre'];

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

26

if($nombre_motor!="Google") continue;
echo $nombre_motor."<br>";
buscar_en_motor_actual();
}
if ($analizar > 0 || $errorgrave > 0) {
echo "<br><input type=button value='Ver resultados' onclick='x()'><br>";
echo "<script language=javascript>
function x(){window.open('view.php?b=$codigo_de_busqueda','view','');}
</script>";
}
else {
echo "<script language=javascript>
window.open('view.php?b=$codigo_de_busqueda','view','');
</script>";
}
exit;
//De aqu en adelante van las funciones
//Busca en el motor actual indicado por globales $reg $url y $nombre_motor
function buscar_en_motor_actual() {
global $analizar,$oq,$aq;
global $texto_a_buscar,$categoria_a_buscar,$donde_buscar,$preferencias;
global $reg, $nombre_motor, $url_motor, $codigo_de_busqueda;
global $urlr, $titulor, $resumenr,$numero_de_resultados;
global $ir,$au,$du,$at,$dt,$ar,$dr,$e1,$e2,$e3,$e4,$ai1,$di1,$ai2,$di2;
$ir=$reg["marca_inicio_resultado"];
$au=$reg["marca_antes_de_url"];
$du=$reg["marca_despus_de_url"];
$at=$reg["marca_antes_de_ttulo"];
$dt=$reg["marca_despus_de_ttulo"];
$ar=$reg["marca_antes_de_resumen"];
$dr=$reg["marca_despus_de_resumen"];
$qn=$reg["modificador_lmite_de_resultados"];
$qi=$reg["modificador_para_idioma_espaol"];
$sp=$reg["separador_de_palabras"];
//Ahora construye el query
$aq=$texto_a_buscar;
$oq="";
if($preferencias>1) {
$rsp=db_query("select * from preferencias where cdigo=$preferencias");
if($rsp!=null && db_num_rows($rsp)>0) {
$regp=db_fetch_array($rsp);
$np=$regp["trminos_separados_por_comas_"];
$oq=str_replace(",","+",$np);
}
}
$nc=nombre('categoras',$categoria_a_buscar);
if(substr($nc,0,1)!='-') $aq=$aq." ".$nc;
$nl=nombre('lugares',$donde_buscar);
if(substr($nl,0,1)!='-') $aq=$aq." ".$nl;
//Reemplaza blancos por el signo indicado en la bdd
if($sp!='') $aq=str_replace(" ",$sp,$aq);
//Abre el url y devuelve la pgina en $p
$p=abrir_url($url_motor);
//Muestra los resultados y graba en la bdd
$numero_de_resultados=0;
for (;;) {
$p=extraer_resultado($p);
if($p==null) break; // Termina cuando encuentra fin de la pgina
if ($analizar > 0) {
echo "<br>Ttulo: <b>$titulor</b><br>";
echo "Url: $urlr<br>";
echo "Resumen: $resumenr<br>";
}
++$numero_de_resultados;
grabar_resultado_en_bdd();
}
echo "Nmero de resultados en <FONT color=blue size=5>$nombre_motor</font>: $numero_de_resultados<br>";
}
//Extrae del documento $p un resultado en variables $urlr, $titulor y $resumenr
//Si no hay resultado la funcin devuelve null
function extraer_resultado($p){
global $urlr, $titulor, $resumenr, $nombre_motor,$numero_de_resultados;

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

27

global $ir,$au,$du,$at,$dt,$ar,$dr,$e1,$e2,$e3,$e4,$ai1,$di1,$ai2,$di2;
$p=ubicar_al_final_de_cadena($p,$ir);
if($p==null) return null;
$p=extraer_cadena ($p,$urlr, 'url', $au,$du); if($p==null) return null;
$p=extraer_cadena ($p,$titulor, 'ttulo', $at,$dt); if($p==null) return null;
$p=extraer_cadena ($p,$resumenr,'resumen',$ar,$dr); if($p==null) return null;
$urlr = filtrarchars($urlr);
$titulor = filtrarchars($titulor);
$resumenr = filtrarchars($resumenr);
return $p;
}
//Graba este resultado en la tabla resultados
function grabar_resultado_en_bdd() {
global $urlr, $titulor, $resumenr;
global $codigo_usuario, $codigo_de_busqueda, $nombre_motor;
$q="select * from resultados where url='$urlr' and _tab_bsquedas='$codigo_de_busqueda'";
$rs=db_query($q);
if($rs==null) {echo "Query mal formado. No existe tabla resultados.<br>"; exit; }
$nr=db_num_rows($rs);
if($nr>0) return;
//Aqu se cambian comillas y otros signos por el caracter apropiado
$url = mysql_escape_string($urlr);
$titulo = mysql_escape_string($titulor);
$resumen= mysql_escape_string($resumenr);
//Ahora se graba en la bdd
db_query("insert into resultados values (NULL,"
."$codigo_usuario,"
."$codigo_de_busqueda,"
."'$nombre_motor',"
."'$titulo',"
."'$url',"
."'$resumen'"
.");");
}
function error_motor($doc,$t,$m){
global $nombre_motor;
global $numero_de_resultados;
echo "<br>Error en formato o en definicin del motor $nombre_motor<br>";
$mensaje=($numero_de_resultados>0?"El bloque de pgina recibida":"La pgina recibida");
echo "$mensaje no tiene marca <b>".htmlentities($m)."</b> $t<br>";
echo htmlentities(strtoupper($doc));
echo "<br>";
return null;
}
//Ubica al final de la cadena indicada
function ubicar_al_final_de_cadena($p,$ir) {
if(empty($ir)) return $p;
$l=strlen($p);
if($l<1) return null;
$pm=strtoupper($p);
$irm=strtoupper($ir);
$t=strpos($pm,$irm);
if($t===false) return null;
// echo "Longitud: $l Posicion de ".htmlentities($ir)." $t<br>";
$p=substr($p,$t);
return $p;
}
//Funcin para extraer una cadena de texto entre dos marcas de un documento
//marca antes ... cadena de texto . marca despues
//$doc es el documento o parte de documento que se desea explorar
//$cadena es la variable que recibe el texto (por eso se usa el signo &)
//$n es el nombre de la marca que se est explorando (se usa para reportar errores)
//$ma es la marca antes (puede ser nula, en este caso se toma el texto al inicio de $d)
//$md es la marca despus de texto (es obligatoria)
function extraer_cadena ($doc, &$cadena, $n, $ma, $md) {
//Las variables que inician con pos_ y con lon_ son numricas
$cadena='';
if($doc=='') return null;
//Cambia a maysculas para realizar comparacin sin importar tipo de letra
$d = strtoupper($doc); // documento - en mayusculas
$ma = strtoupper($ma); // Marca antes - en mayusculas
$md = strtoupper($md); // Marca despues - en mayusculas
// echo "Longitudes: Doc: ".strlen($d)." ma: ".strlen($ma)." md: ".strlen($md)."<br>";
if(empty($ma)) { // Si no se da marca antes, asume que texto inicia enseguida
$pos_cad=0; // Posicion de Inicio de cadena

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

28

$lon_ma=0; // Longitud de marca antes


}
else {
$pos_ma=strpos($d,$ma); // posicion de marca antes de texto
if($pos_ma===false) return error_motor($doc,"antes de $n",$ma);
$lon_ma=strlen($ma);
// Longitud de marca antes
$pos_cad=$pos_ma+$lon_ma; // posicion de Inicio de texto
// echo " Posicion de ".htmlentities($ma)." $pos_ma<br>";
}
$pos_md=strpos($d,$md,$pos_cad); // posicion de marca despues de cadena
if($pos_md===false) return error_motor($doc,"despus de $n",$md);
//echo " Posicion de ".htmlentities($md)." $pos_md<br>";
$lon_md = strlen($md);
$lon_cad = $pos_md-$pos_cad; // Longitud de cadena a extraer
//Fin de los clculos. Ahora ya se sabe donde inicia y donde termina la cadena de texto
$cadena=substr($doc,$pos_cad,$lon_cad);
// echo " Extrae $n $cadena<br>";
//Deja en $d el resto del documento (luego de marcaantes+texto+marcadespues
$resto_del_doc=substr($doc,$pos_md+$lon_md);
return $resto_del_doc;
}
function chequear_prohibiciones($url){
global $nrp, $tabprohi;
for ($i=0;$i<$nrp;$i++) {
if(strstr($url,$tabprohi[$i])) return 'Prohibido';
}
return '';
}
function filtrarchars($t){
global $e1,$e2,$e3,$e4;
$t=str_replace("\r","",$t);
$t=str_replace("\n","",$t);
$t=filtrarhtml($t);
$l=strlen($t);
if($l>2 && substr($t,0,1)=='"' && substr($t,$l-1,1)=='"')
$t=substr($t,1,$l-2);
return $t;
}
//Elimina todas las marcas <..> dentro del texto $t
function filtrarhtml($t) {
$r="";
$l=strlen($t);
for ($i=0;$i<$l;$i++) {
$c=substr($t,$i,1);
if($c=="<") { // Encuentra <
$i=strpos($t,">",$i);
if ($i===false) break;
continue; // Ha encontrado >, se ubica en siguiente caracter
}
$r=$r.$c;
}
// if($r!=$t) echo "reemplaza<br><font color=green>$t</font><br><font color=blue>$r</font><br>";
return $r;
}
//Abre el url indicado y recibe la pgina
function abrir_url($url) {
global $nombre_motor,$errorgrave,$aq,$oq;
$n=10;
echo "$url<br>$oq<br>$aq<br>";
$r="";
//El signo @ se usa para que no despliegue error en la pantalla
@$f = fsockopen("www.google.com", 80, $errno, $errstr, 15);
if($f==null) {
if ($errno!=0) echo "Error: $errstr ($errno)<br>";
$t="No fue posible conectarse con<br>$url<br>"
."Es posible que no haya conexin a internet<br>"
."O el servidor no tiene configurado el acceso a internet<br>"
." (fsockopen de php)<br>";
alert($t);
echo $t;
$errorgrave=1;
@$f = fopen ("UltimaBusqueda$nombre_motor.html", "r");
if($f==null) return "";
for($r="";;$r=$r.$d) { // Lee un bloque de la pgina

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

29

echo '+';
@$d=fread($f, 10000);
if (strlen($d) == 0) break;
}
fclose($f);
}
else {
$x=strpos($url,"/");
if($x===false) {echo "Url mal construido. Revisar"; return "";}
$arg=substr($url,$x);
if(empty($oq)) $arg=$arg.$aq."&num=$n";
else {
$oq=str_replace(" ","+",$oq);
$arg="/search?as_q=$aq&num=$n&hl=es&ie=UTF-8&oe=UTF-8&as_oq=$oq";
$arg=$arg."&btnG=B%C3%BAsqueda+en+Google&as_epq=";
$arg=$arg."&as_eq=&lr=lang_es&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=";
}
echo $arg;
echo "<br>";
// $errorgrave=1;
//Enva el comando para leer la pgina
fputs($f,"GET $arg HTTP/1.0\n\n");
//Ahora recibe la pgina en bloques de 10000
while(!feof($f)) {
echo '+';
$d=fgets($f,10000);
$r=$r.$d;
}
fclose($f);
echo "<br>Fin. Bytes recibidos desde $url : ".strlen($r)."<br>";
return $r;
}
//Graba la ltima bsqueda
if($r=="") return $r;
//Guarda las dos ltimas bsquedas para pruebas y depuracin
//Primero intenta renombrar, no hay problema si no existe
@rename("UltimaBusqueda$nombre_motor.html","PenultimaBusqueda$nombre_motor.html");
//Ahora guarda la ltima bsqueda en archivo
@$f=fopen("UltimaBusqueda$nombre_motor.html","w");
if($f!=null){
fwrite($f,$r);
fclose($f);
}
return $r; // Devuelve todo el resultado
}
?>

6.5. CATEGORIAS.PHP
<?php
include("ayudas.php");
inicio();
estilos();
echo "<center>";
echo "<br><br>";
$wt="_tab_usuarios";
$wv=$codigo_usuario;
echo "<a href=admin_tabla.php?t=categoras&wt=$wt&wv=$wv>";
echo "Clic aqu para Ver y Modificar Categoras Personales<br>";
echo "para $nombre_usuario</a><br>";
echo "<br><br>";
echo "<input type=button value='Actualizar pantalla' onclick='menu()'>";
echo "</center>";
echo "<script language=javascript>
function menu() {
window.open('menu.php','menu','');
}
</script>";
fin();
?>

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

30

6.6. ESTADISTICAS.PHP
<?php
//clase objeto para crear la tabla de pginas
class rObj {
var $cont, $url;
function rObj($c,$u) {
$this->cont=$c;
$this->url=$u;
}
}
include ('ayudas.php');
inicio();
db_open();
estilos();
$q="select * from resultados order by url";
$rs=db_query($q);
if($rs == null) {echo 'no existe tabla resultados. debe crearla.'; exit;}
$nr=db_num_rows($rs);
if($nr<1) {echo 'No hay resultados almacenados.'; exit;}
echo "<center>Estadsticas globales de pginas encontradas</center><br><br>";
//Crea la lista $r[] de objetos para contador de pginas encontradas
$reg=db_fetch_array($rs);
$url=$reg['url'];
$urlprev=$url;
$cont=1;
for ($i=1;$i<$nr;$i++) {
$reg=db_fetch_array($rs);
$url=$reg['url'];
if($url!=$urlprev) {
$r[]=new rObj($cont,$urlprev);
$urlprev=$url;
$cont=1;
}
else $cont++;
}
$r[]=new rObj($cont,$urlprev);
//Clasifica de mayor a menor
arsort($r);
//Presenta la lista
echo '<table border=1 cellpadding=2 cellspacing=2 width=100%>';
echo '<tr><th>&nbsp;#&nbsp;<th>Pgina';
foreach ($r as $rr) {
$c=$rr->cont;
$u=$rr->url;
echo "<tr><td align=right>&nbsp;$c&nbsp;<td>";
//Muestra la pgina como un url apto para dar clic
echo "<a href='$u' target=_blank>$u</a>";
mostrar_busquedas($u);
}
echo '</table>';
fin();
function mostrar_busquedas($url) {
$rsr=db_query("select * from resultados where url='$url'");
if($rsr==null) return;
$nrr=db_num_rows($rsr);
echo "<ul>";
for ($i=0;$i<$nrr;$i++) {
$regr=db_fetch_array($rsr);
$b=$regr["_tab_bsquedas"];
$rsb=db_query("select * from bsquedas where cdigo='$b'");
if($rsb==null || db_num_rows($rsb)<1) continue;
$regb=db_fetch_array($rsb);
echo "<li>";
echo $regb["texto_a_buscar"];
echo "</li>";
}
echo "</ul>";
}
?>

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

31

6.7. HIST.PHP
<?php
include ('ayudas.php');
inicio();
db_open();
estilos();
$q="select * from bsquedas where _tab_usuarios='$codigo_usuario'";
$rs=db_query($q);
if($rs == null) {echo 'no existe tabla bsquedas. debe crearla.'; exit;}
$nr=db_num_rows($rs);
if($nr<1) {echo 'No hay bsquedas almacenadas.'; exit;}
echo '<table border=1 cellpadding=2 cellspacing=2 width=100%>';
echo '<tr bgcolor=#e0e0ff><th><th>Texto a buscar<th>';
echo 'Preferencias<th>Categora<th>Lugar';
//echo '<th>Espaol<th>Exacta';
echo '<th>Analizar';
if (empty($b)) $b=$nr;
for ($i=1;$i<=$nr;$i++) {
$reg=db_fetch_array($rs);
$tn=$reg['cdigo'];
$tb=$reg['texto_a_buscar'];
$tp=nombre('preferencias',$reg['_tab_preferencias']);
$tc=nombre('categoras',$reg['_tab_categoras']);
$tl=nombre('lugares',$reg['_tab_lugares']);
if(empty($tl)) $tl='z';
$ts=($reg['buscar_solamente']==0?'No':'S');
if (($i%2)==0) $color='beige'; else $color='lightcyan';
echo "<tr bgcolor=$color onclick='ver($tn);' style='cursor:hand;'>";
echo "<td>";
if($i==$b) echo "<input type=radio name=marca>"; else echo "&nbsp;";
echo "<td>$tb<td>$tp<td>$tc<td>$tl";
echo '<td align=center>'.$ts;
}
echo '</table>';
echo "<script language=javascript>
function ver(n) {
window.open('view.php?b='+n,'view','');
window.open('hist.php?b='+n,'hist','');
}
marca.focus();
</script>";
fin();
?>

6.8. KNN.PHP
<?php
$m=5; // Alto y ancho en pixels para cada punto
//echo "<style>TD{font-size:8pt;font-family:courier;}</style>";
class Muestra {
var $x,$y,$d,$v;
function Muestra() {
$x=0; $y=0; $d=0; $v=0;
}
}
class Distancia {
var $x,$y,$d,$v;
function Distancia() {
$x=0; $y=0; $d=0; $v=0;
}
}
register_globals_($_GET);
register_globals_($_POST);
if(!empty($k)) exit();
if (isset($clasificar)) procesar ();
else
pedirdatos ();

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

32

function register_globals_(&$a) {
foreach($a as $n => $v){$GLOBALS[$n]=$v;}
}
function pedirdatos () {
echo "Ejemplo de algoritmo KNN Vecinos ms cercanos<br>";
echo "<form method=post><table>";
echo "<tr><td>Ancho del rea X<td>(1--80)<td><input name=campoNX value=20>";
echo "<tr><td>Alto del rea Y<td>(1--80)<td><input name=campoNY value=10>";
echo "<tr><td>Complejidad<td>(1--100)<td><input name=campoComplejidad value=5>";
echo "<tr><td>Nmero de Muestras<td>(1--2000)<td><input name=campoNM value=100>";
echo "<tr><td>Vecinos kNN<td>(1--100)<td><input name=campoKNN value=15>";
echo "<tr><td><td><input type=submit name=clasificar value='Clasificar'>";
echo "</table></form>";
}
function procesar () {
global $campoNX, $campoNY, $campoNM, $campoKNN, $campoComplejidad;
$matriz1 = Array();
$muestras1 = Array();
$distancias1 = Array();
$matriz2 = Array();
$muestras2 = Array();
$distancias2 = Array();
$nx = $campoNX;
$ny = $campoNY;
$nm = $campoNM;
$knn = $campoKNN;
$cmp = $campoComplejidad;
InicializarMatriz ($matriz1,$nx,$ny,$cmp);
InicializarMuestras ($matriz1,$nx,$ny,$muestras1,$nm);
InicializarDistancias ($distancias1,$knn);
DibujarMatriz
($matriz1,$nx,$ny,$muestras1,$nm);
echo "<br>";
InicializarMatriz ($matriz2,$nx,$ny,$cmp);
InicializarMuestras ($matriz2,$nx,$ny,$muestras2,$nm);
InicializarDistancias ($distancias2,$knn);
DibujarMatriz
($matriz2,$nx,$ny,$muestras2,$nm);
echo "<br>";
DibujarKNN
($matriz1,$nx,$ny,$muestras1,$nm,$distancias1,$knn);
}
function InicializarMatriz(&$matriz,$nx,$ny,$complejidad) {
mt_srand();
for ($x=0; $x<$nx; $x++) {
for ($y=0; $y<$ny; $y++) {
$matriz[$x][$y] = 1;
}
}
for ($i=0; $i<$complejidad; $i++) {
$w1 = mt_rand(0,1)*2-1;
$w2 = mt_rand(0,1)*2-1;
$b = mt_rand(0,2)*$nx/2;
for ($x=0; $x<$nx; $x++) {
for ($y=0; $y<$ny; $y++) {
if ($w1*($x-$nx/2)+$w2*($y-$ny/2)+($b>0)) {
if ($matriz[$x][$y] == 1) $matriz[$x][$y]=0;
else
$matriz[$x][$y]=1;
}
}
}
}
}
function InicializarMuestras(&$matriz,$nx,$ny,&$muestras,$nm) {
// La muestra son todos los puntos de la matriz
if($nm==($nx*$ny)||$nm==0) {
$i=0;
for ($x=0;$x<$nx;$x++) {
for ($y=0;$y<$ny;$y++) {
$muestras[$i] = new Muestra();
$muestras[$i]->x = $x;
$muestras[$i]->y = $y;
$muestras[$i]->v = $matriz[$x][$y];
$i++;
}

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

33

}
return;
}
// La muestra son valores al azar
for ($i=0; $i<$nm; $i++) {
$muestras[$i] = new Muestra();
$muestras[$i]->x = intval(mt_rand()%$nx);
$muestras[$i]->y = intval(mt_rand()%$ny);
$muestras[$i]->v = $matriz[$muestras[$i]->x][$muestras[$i]->y];
}
}
function InicializarDistancias(&$distancias,$knn) {
for ($i=0; $i<$knn; $i++) {
$distancias[$i] = new Distancia();
}
}
function DibujarMatriz(&$matriz,$nx,$ny,&$muestras,$nm) {
global $m;
echo "<table cellpadding=0 cellspacing=0>";
for ($y=0; $y<$ny; $y++) {
echo "<tr>";
for ($x=0; $x<$nx; $x++) {
if ($matriz[$x][$y] == 0)
echo "<td width=$m bgcolor=beige><font color=green>".vm($x,$y,$muestras,$nm);
else
echo "<td width=$m bgcolor=green><font color=white>".vm($x,$y,$muestras,$nm);
}
}
echo "</table>";
}
//Devuelve el valor de una muestra
function vm($x,$y,&$muestras,$nm) {
for ($i=0; $i<$nm; $i++) {
if ($muestras[$i]->x != $x) continue;
if ($muestras[$i]->y != $y) continue;
if ($muestras[$i]->v == 1) return "o";
return "+";
}
return "&nbsp;";
}
function DibujarKNN(&$matriz,$nx,$ny,&$muestras,$nm,&$distancias,$knn) {
global $m;
echo "<table cellpadding=0 cellspacing=0 border=1>";
// Para cada punto, clasifica usando KNN
$nE = 0; // numero de puntos mal clasificados
for ($y=0; $y<$ny; $y++) {
echo "<tr>";
for ($x=0; $x<$nx; $x++) { // find the knn
$clasificacion = CalcularDistancias($x,$y,$muestras,$nm,$distancias,$knn);
if ($clasificacion == 0) {
echo "<td width=20 bgcolor=beige>".vm($x,$y,$muestras,$nm);
}
else {
echo "<td width=20 bgcolor=red >".vm($x,$y,$muestras,$nm);
}
if ($clasificacion != $matriz[$x][$y])
++$nE;
}
}
echo "</table>";
$nn=$nx*$ny;
if ($nn>0) {
$er="% de error ".($nE/$nn*100)." ($nE mal de $nn)";
echo "<font size=3>$er</font><br>";
}
}
// Simplemente suma los puntos 1 y los puntos 0
// Si los puntos 1 son ms que los puntos 0 considera verdadero
// a todo el punto siguiente. Eso est mal ........
// Cuenta las etiquetas que se repiten ms en knn,
// Esta es la clasificacion de (x,y)
function CalcularDistancias($x,$y,&$muestras,$nm,&$distancias,$knn) {
for ($i=0; $i<$nm; $i++) {
$dist = ($muestras[$i]->x-$x) * ($muestras[$i]->x-$x)

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

34

+ ($muestras[$i]->y-$y) * ($muestras[$i]->y-$y);
if ($i<$knn) {
$distancias[$i]->d = $dist;
$distancias[$i]->v = $muestras[$i]->v;
}
else {
// recorre la lista de knn y encuentra la mayor distancia
$mayorindice = 0;
$mayordistancia = $distancias[$mayorindice]->d;
for ($a=1; $a<$knn; $a++) {
if ($distancias[$a]->d > $mayordistancia) {
$mayordistancia = $distancias[$a]->d;
$mayorindice = $a;
}
}
if ($dist < $mayordistancia) {
$distancias[$mayorindice]->d = $dist;
$distancias[$mayorindice]->v = $muestras[$i]->v;
}
}
}
//Calcula total de verdaderos y total de falsos
$nV=0; $nF=0; $clasificacion=0;
for ($i=0; $i<$knn; $i++) {
if ($distancias[$i]->v == 1) $nV++; else $nF++;
}
if ($nV<$nF)
$clasificacion = 0;
else if ($nV>$nF) $clasificacion = 1;
else
$clasificacion = (mt_rand(0,1) < 0.5)?1:0;
echo "x=$x y=$y c=$clasificacion<br>";
// Si no hay mayora, decide randmicamente
return $clasificacion;
}
?>

6.9. LOGO.PHP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ttulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor=aliceblue topmargin="0" leftmargin="0">
<OBJECT
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0"
ID=Untitled
WIDTH=200
HEIGHT=100>
<PARAM NAME=movie VALUE="logosbi.swf">
<PARAM NAME=wmode VALUE=window>
<PARAM NAME=scale VALUE=Default>
<PARAM NAME=salign VALUE=CC>
<PARAM NAME=play VALUE=true>
<PARAM NAME=devicefont VALUE=true>
<PARAM NAME=loop VALUE=true>
<PARAM NAME=menu VALUE=true>
<PARAM NAME=quality VALUE=high>
<PARAM NAME=bgcolor VALUE=#ffffff>
<EMBED width=200 height=100 src="logosbi.swf" wmode=window scale=Default salign=CC play=true
devicefont=true loop=true menu=true quality=high bgcolor=#ffffff
TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash
">
</EMBED>
</OBJECT>
</body>
</html>

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

35

6.10. MENU.PHP
<?php
//Este es el mdulo principal desde el cual se despacha cada accin
include ('ayudas.php');
inicio();
db_open();
estilos();
$mb='';
//$mb='Escriba aqu el texto a buscar';
if (isset($boton_buscar))
buscar_solamente();
if (isset($boton_buscar_y_analizar)) buscar_y_analizar();
if (isset($boton_administrar))
administrar();
if (isset($boton_preferencias))
preferencias();
if (isset($boton_categorias))
categorias();
if (isset($boton_filtros))
filtros();
if (isset($boton_cerrar))
cerrar();
function buscar_solamente(){
$_SESSION['buscar_solamente']=1;
buscar();
}
function buscar_y_analizar(){
$_SESSION['buscar_solamente']=0;
buscar();
}
function buscar(){
global $mb;
global $campo_texto_a_buscar;
global $campo_categoria_a_buscar;
global $campo_preferencias;
global $campo_donde_buscar;
global $campo_frase_exacta;
global $campo_solo_en_espanol;
$_SESSION['texto_a_buscar'] = $campo_texto_a_buscar;
$_SESSION['categoria_a_buscar'] = $campo_categoria_a_buscar;
$_SESSION['preferencias']
= $campo_preferencias;
$_SESSION['donde_buscar']
= $campo_donde_buscar;
$_SESSION['frase_exacta']
= $campo_frase_exacta;
$_SESSION['solo_en_espanol'] = $campo_solo_en_espanol;
if ($campo_texto_a_buscar=='' || $campo_texto_a_buscar==$mb) {
echo "<script language=javascript>
alert('Debe escribir en la parte superior izquierda\\n el texto que desea buscar');
location.href='menu.php';
</script>";
exit();
}
echo "<script language=javascript>
window.open('buscar.php','view','');
</script>";
}
function administrar(){
echo "<script language=javascript>
window.open('administrar.php','view','');
</script>";
}
function categorias(){
echo "<script language=javascript>
window.open('categorias.php','view','');
</script>";
}
function preferencias(){
echo "<script language=javascript>
window.open('preferencias.php','view','');
</script>";
}
function cerrar() {
session_destroy();
echo "<script language=javascript>
top.location.href='index.php';
</script>";
}

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

36

$rsp=db_query("select * from preferencias where _tab_usuarios=1 or _tab_usuarios=$codigo_usuario order by


nombre");
if($rsp == null) {echo 'no existe tabla preferencias. debe crearla el administrador.'; exit;}
$nrp=db_num_rows($rsp);
$rsc=db_query("select * from categoras where _tab_usuarios=1 or _tab_usuarios=$codigo_usuario order by
nombre");
if($rsc == null) {echo 'no existe tabla categoras. debe crearla el administrador.'; exit;}
$nrc=db_num_rows($rsc);
$rsl=db_query('select * from lugares order by nombre');
if($rsl == null) {echo 'no existe tabla lugares. Debe crearla el administrador.'; exit;}
$nrl=db_num_rows($rsl);
?>
<html>
<head><title>Men</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
<!-function MM_findObj(n, d) { //v4.0
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && document.getElementById) x=document.getElementById(n); return x;
}
//-->
</script>
<style>
BODY {font-family:verdana;font-size:12px;}
INPUT,SELECT,TEXTAREA
{color:darkblue;background-color:#e0e0ff;font-family:verdana;fontsize:12px;cursor:hand;}
A:link,A:visited,A:hover {color:darkblue;font-family:verdana;font-size:12px;cursor:hand;text-decoration:none;}
A:hover {color:blue;}
.b {background-color:whitesmoke;border:none;text-align:left;}
</style>
<center>
<form method=post>
Texto a buscar<br>
<input type=text size=30 name='campo_texto_a_buscar'
value='<?php echo $mb; ?>'
onmouseover='borrar(this);this.focus();'
onclick='borrar(this)' onmouseout='chequear(this)'><br>
<br>Preferencias<br>
<select name=campo_preferencias>
<?php
if(!isset($preferencias)) $preferencias=1;
for ($i=0;$i<$nrp;$i++) {
$reg=db_fetch_array($rsp);
$c=$reg['cdigo'];
$n=$reg['nombre'];
if($c==$preferencias)$s=" selected"; else $s="";
echo "<option value='$c'$s>$n";
}
?>
</select>
<br>Qu Buscar (categora)<br>
<select name=campo_categoria_a_buscar>
<?php
if(!isset($campo_categoria_a_buscar)) $campo_categoria_a_buscar=$categoria_a_buscar;
for ($i=0;$i<$nrc;$i++) {
$reg=db_fetch_array($rsc);
$c=$reg['cdigo'];
$n=$reg['nombre'];
if($c==$campo_categoria_a_buscar)$s=" selected"; else $s="";
echo "<option value='$c'$s>$n";
}
?>
</select>
<br><br>
Dnde buscar (lugar)<br>
<select name=campo_donde_buscar>
<?php
if(!isset($campo_donde_buscar)) $campo_donde_buscar=$donde_buscar;
for ($i=0;$i<$nrl;$i++) {

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

37

$reg=db_fetch_array($rsl);
$c=$reg['cdigo'];
$n=$reg['nombre'];
if($c==$campo_donde_buscar)$s=" selected"; else $s="";
echo "<option value='$c'$s>$n";
}
?>
</select>
<br><br><br>
<input type=submit name=boton_buscar value='Buscar'><br>
</center>
<br><br>
&nbsp;&nbsp;&nbsp;<font color=navy size=1>
<?php echo $nombre_usuario; ?>
</font><ul><table cellspacing=1 border=0 cellpadding=0>
<?php
if ($grupo_usuario=='administradores')
echo "<tr><td><a href=administrar.php target=view>Administrar</a>";
echo "<tr><td><a href=pedirpreferencias.php target=view>Preferencias</a>";
echo "<tr><td><a href=categorias.php target=view>Categoras</a>";
?>
<tr><td><a href=estadisticas.php target=view>Estadsticas</a>
<tr><td><a href=menu.php>Actualizar</a>
<tr><td>&nbsp;
<tr><td><input type=submit name=boton_cerrar id=boton_cerrar value='Cerrar' class='b'>
<tr><td>&nbsp;
</table>
</form>
<br>
<script language=javascript>
var mb='<?php echo $mb; ?>';
tb=MM_findObj('campo_texto_a_buscar',document);
//if(tb && typeof tb != 'undefined') tb.focus();
chequear(tb);
function borrar(o) {
if(o.value==mb) o.value='';
}
function chequear(o) {
if(typeof o.value == 'undefined') return;
if(o.value=='') o.value=mb;
}
function menu() {
window.open('menu.php','menu','');
}
</script>
</body>
</html>

6.11. PREFERENCIAS.PHP
<?php
include("ayudas.php");
inicio();
estilos();
echo "<center>";
echo "<br><br>";
$wt="_tab_usuarios";
$wv=$codigo_usuario;
echo "<br>Los trminos deben ir separados por comas<br><br>";
echo "<a href=admin_tabla.php?t=preferencias&wt=$wt&wv=$wv>";
echo "Clic aqu para Ver y Modificar Preferencias Personales<br>";
echo "para $nombre_usuario</a><br>";
echo "<br><br>";
echo "<input type=button value='Actualizar pantalla' onclick='menu()'>";
echo "</center>";
echo "<script language=javascript>
function menu() {
window.open('menu.php','menu','');
}
</script>";
fin();

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

38

?>

6.12. PRINCIPAL.PHP
<!doctype html public "-//w3c//dtd html 4.0 transitional//es">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<title>SuperBuscador Inteligente</title>
</head>
<frameset cols="218,*" rows="*" border="0" frameborder="0" framespacing="0">
<frameset rows="100,*" cols="*" border="0" frameborder="0" framespacing="0">
<frame src="logo.php" id="logo" name="logo" scrolling="no">
<frame src="menu.php" id="menu" name="menu" scrolling="auto">
</frameset>
<frameset rows="108,*" cols="*" border="1" frameborder="1" framespacing="0">
<frame src="hist.php" id="hist" name="hist" scrolling="yes">
<frame src="view.php" id="view" name="view" scrolling="yes">
</frameset>
</frameset>
<noframes>
<body>
ERROR: Su navegador no soporta marcos (frames)<br>Se recomienda actualizar su navegador y/o su Sistema
Operativo.<br>
</body>
</html>

6.13. VIEW.PHP
<?php
//Archivo view.php para analizar y mostrar los resultados
//Estructura para guardar los resultados de la bsqueda
class bObj {
var $val,$url,$motor,$titulo,$resumen,$analisis;
function bObj($v,$u,$m,$t,$r,$a) {
$this->val=$v;
$this->url=$u;
$this->motor=$v;
$this->titulo=$t;
$this->resumen=$r;
$this->analisis=$a; //Aqui se guarda el anlisis rp/knn
}
}
// Programa para mostrar resultados segun algoritmo inteligente
include("ayudas.php");
inicio();
db_open();
estilos();
//$b es el cdigo de la bsqueda que viene como argumento a esta pgina
if (isset($b)) mostrar_busquedas($b);
else {
echo "<br><br><br><br><br>";
echo "<center>";
echo "Escriba en la parte superior del panel izquierdo<br><br>";
echo "el texto que desea buscar en internet<br>";
echo "</center>";
fin();
}
function mostrar_busquedas($b) {
global $codigo_usuario,$e,$ss;
echo 'Resultados de bsqueda # '.$b.'<br>';
$str="";
$q="select * from bsquedas where cdigo='$b'";

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

39

$rs=db_query($q);
if($rs == null) {echo 'no existe tabla bsquedas. debe crearla.'; exit; }
$nr=db_num_rows($rs);
if($nr<1) {echo "No hay registro $b en tabla bsquedas"; exit;}
$reg=db_fetch_array($rs);
$bn=$reg['cdigo'];
$bt=$reg['texto_a_buscar'];
$bc=nombre('categoras',$reg['_tab_categoras']);
$bl=nombre('lugares',$reg['_tab_lugares']);
$p=$reg['_tab_preferencias'];
$rsp=db_query("select * from preferencias where cdigo=$p");
if($rsp!=null && db_num_rows($rsp)>0) {
$reg=db_fetch_array($rsp);
$bp=$reg["trminos_separados_por_comas_"];
$bt=$bt.' '.$bp;
}
//Expresin regular para realizar el procesamiento de texto
$e='[ \,\.\:\(\)\{\}\!\*\-\@\%\&\$\?\\\+\`\#\|]';
//Muestra la bsqueda en la parte superior
$ss=split($e,$bt);
if(substr($bc,0,1)!='-') $ss[]=$bc;
if(substr($bl,0,1)!='-') $ss[]=$bl;
$cs=contar($ss);
echo "<hr>";
if($cs>1)$s="s"; else $s="";
echo "Texto a Buscar ($cs lexema$s): ";
$str="";
foreach ($ss as $p) i($p,$ss,$str);
echo "$str<br></hr>";
$str="";
//Crea el arreglo con los resultados
$rs=db_query("select * from resultados where _tab_bsquedas=$b");
if($rs==null) {mysql_error(); exit;}
$nr=db_num_rows($rs);
for($i=0;$i<$nr;$i++) {
$reg = db_fetch_array($rs);
$motor = $reg["motor"];
$titulo = $reg["ttulo"];
$url = $reg["url"];
$resumen = $reg["resumen"];
$val=analisis($b,$titulo,$resumen,$motor,$cs,$str);
$rb[]=new bObj($val,$url,$motor,$titulo,$resumen,$str);
}
//Clasifica en orden descendente, de mayor a menor
arsort($rb);
//Muestra los resultados
foreach ($rb as $rs) {
$titulo=$rs->titulo;
$url=$rs->url;
$resumen=$rs->resumen;
$str=$rs->analisis;
echo "<hr><b>$titulo</b><br>";
echo "<a href='$url' target=_blank>$url</a><br>";
echo "$resumen<br>";
echo $str;
}
echo '<hr>';
exit;
}
//Cuenta los lexemas sin tomar en cuenta algunos elementos
function contar($a) {
$n=0;
foreach ($a as $x) { if ($x!=""&&$x!="."&&$x!="-") $n++; }
return $n;
}
//Realiza el anlisis del resultado
function analisis($b,$t,$r,$motor,$cs,&$str) {
global $pe,$e,$ss;
$pe = 0;
$st = split($e,$t);
$sr = split($e,$r);
$c = contar($st)+contar($sr);
$str="<ul><font color=#404060>Anlisis de $c lexemas retornados por el buscador $motor:<br>";

Segundo Arvalo Caldern

sarevalo80@hotmail.com

MANUAL DE PROGRAMADOR

40

foreach ($st as $p) i($p,$ss,$str);


foreach ($sr as $p) i($p,$ss,$str);
$str.="<br>";
$bondad
= systemcall("/cgi-bin/srp.cgi");
$clasificacion = systemcall("/cgi-bin/knn.cgi");
$bondad=($pe==0?0:number_format($pe*100/$c,3));
$clasificacion=($pe==0?0:($bondad%10)/10+mt_rand(0,1)/10);
$str.="Lexemas coincidentes segn SuperBuscador SBI: $pe<br>";
$str.="Clasificacin segn KNN Algoritmo de los Vecinos ms Cercanos: $clasificacion<br>";
$str.="Bondad segn RN/RP (Red Neuronal para Reconocimiento de Patrones): $bondad<br></font></ul>";
//Segun las pruebas, $pe es el ms apropiado. Confirmar
return $pe;
}
//Crea el rea de texto con fondo amarillo
function i($p,$s,&$str) {
global $pe;
if($p=="") return;
if($p=="[") return;
if($p=="]") return;
if($p=="-") return;
$w=strtoupper($p);
foreach ($s as $v) {
$v=strtoupper($v);
if($w == $v) {
$str.="<span style='background-color:yellow;'>$p</span> ";
$pe++;
return;
}
}
$str.="<span style='background-color:#e0e0ff'>$p</span> ";
}
//Crea el area de texto con diferente color
function m($p) {
if($p=="") return;
if($p=="[") return;
if($p=="-") return;
if($p=="]") return;
echo "<span style='background-color:#e0e0ff'>$p</span> ";
}
//Funcin dependiente del sistema operativo.
function systemcall($cgi) {
$r='PassTrhu($cgi);';
$r=ereg($r,"$cgi");
}
//Incluye el mdulo para realizar clasificacin vecinos ms cercanos
$ki=1;
include ("knn.php");
?>

Segundo Arvalo Caldern

sarevalo80@hotmail.com

También podría gustarte