Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ELABORADO POR:
SEGUNDO ARVALO CALDERN
sarevalo80@hotmail.com
INDICE
INDICE ................................................................................................................................................. 2
1.
DESCRIPCIN GENERAL...................................................................................................... 3
2.
FICHA TCNICA...................................................................................................................... 3
3.
4.
5.
6.
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
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.
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
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:
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
4.
DESCRIPCIN TCNICA
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 ();
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
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
5.
PROCESOS IMPORTANTES
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
10
where
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
11
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;");
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
13
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
14
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;
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
15
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(" "," ",$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'");
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 " ";
}
function boton_listar(){
echo "<input type=submit class=x name='botonlistar' value='Ver'>";
echo " ";
}
function boton_borrar(){
echo "<input type=submit class=x name='botonborrar' value='Borrar'>";
echo " ";
}
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 " ";
}
function boton_update(){
echo "<input type=submit class=x name='botonupdate' value='Grabar'>";
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
18
echo " ";
}
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> ";
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> ";
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));
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
19
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>";
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=' ';
// 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>';
}
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
22
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);
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
24
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'];
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;
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
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
28
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();
?>
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> # <th>Pgina';
foreach ($r as $rr) {
$c=$rr->cont;
$u=$rr->url;
echo "<tr><td align=right> $c <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>";
}
?>
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 " ";
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 ();
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++;
}
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 " ";
}
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)
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>
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>";
}
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
36
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>
<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>
<tr><td><input type=submit name=boton_cerrar id=boton_cerrar value='Cerrar' class='b'>
<tr><td>
</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();
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'";
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>";
sarevalo80@hotmail.com
MANUAL DE PROGRAMADOR
40
sarevalo80@hotmail.com