Capítulo 2
Herramientas de gestión de la Base de Datos.
En este capítulo se presentan las distintas aplicaciones que se han desarrollado para gestionar la información almacenada en la base de datos. Como se expuso en el capítulo 1, una característica muy importante de la base de datos
ieee
es que puede ser gestionada desde cualquier ordenador del mundo que tenga acceso a internet, de modo que todas las herramientas presentadas en el este capítulo se han desarrollado para que cumplan dicho objetivo, siendo, por tanto, accesibles desde cualquier navegador web con interfaz gráfica.Las herramientas desarrolladas son las siguientes:
- Update DataBase: aplicación que permite añadir nueva información a la base de datos y reemplazar o eliminar tuplas cuyos datos sean incorrectos.
- Download DataBase: aplicación que permite descargar copias de seguridad de la base de datos.
- DataBase Content Query: aplicación que permite consultar la información almacenada en la base de datos.
- Statistics: conjunto de dos aplicaciones que permite realizar estadísticas de la información contenida en la base de datos.
La parte dinámica o lógica de todas estas aplicaciones se ha desarrollado en lenguaje PHP, mientras que la parte estática o “visual” se ha desarrollado en HTML1.
En los siguientes apartados de este capítulo se explica en profundidad el funcionamiento de cada una de las aplicaciones citadas. Todos los apartados tienen una estructura común: comienzan con una introducción en la que se justifica la funcionalidad de la aplicación, continuan con una explicación detallada de las distintas opciones de ejecución que la misma permite y concluyen con una o varias capturas de pantalla de la propia aplicación en las que se pueden apreciar los diversos elementos con los que interactúa el usuario.
2.1.- Update DataBase2
2.1.1.- Justificación de la funcionalidad
Puesto que una base de datos carecería de utilidad si la información que almacena no fuese actualizada periódicamente, en cualquier sistema de gestión de bases de datos se hace totalmente imprescindible una aplicación que permita al usuario llevar a cabo dicha tarea de actualización. En el conjunto de aplicaciones web desarrolladas en el presente proyecto, la herramienta destinada a facilitar las labores de actualización de la base de datos
ieee
se denominaUpdate DataBase
.
1 Para visualizar el listado completo del código fuente desarrollado en lenguaje PHP, véase el apartado A.1.- Herramientas de gestión de la base de datos en el apéndice A, pág. 86.
Para visualizar el listado completo del código fuente desarrollado en lenguaje HTML, véase el apartado A.3.- Plantillas de las herramientas de gestión de la base de datos en el apéndice A, pág. 142.
2 Para visualizar un ejemplo de uso de la herramienta Update DataBase, véase el apartado 4.2.- Acción 2: Agregar a la base de datos la información contenida en ficheros con formato csv en el capítulo 4, pág. 59.
Para visualizar el código fuente completo de la aplicación Update DataBase, véase el apartado A.1.1.- Update DataBase en el Apéndice A, pág. 87.
2.1.2.- Funcionamiento
Esta aplicación permite realizar cuatro acciones diferentes sobre la base de datos. Estas acciones son las siguientes:
- Acción 1: agregar nuevas filas.
- Acción 2: eliminar todas las filas que contengan una direccón de e-mail determinada.
- Acción 3: reemplazar las direcciones de e-mail de las filas que contengan una dirección de e-mail determinada por otra dirección de e-mail indicada por el usuario.
- Acción 4: eliminar filas que cumplan las condiciones indicadas por el usuario en unas cajas de texto.
Para ejecutar las tres primeras acciones se precisa de la información contenida en un fichero en formato csv, cuyos campos deben estar separados por el carácter
punto y coma
. Por el contrario, dado que al ejecutar la acción número cuatro los datos necesarios se introducen en cajas de texto, no es necesario especificar ningún fichero adicional.Para hacer uso de la información contenida en el fichero csv con el que se actualiza la base de datos, dicho fichero se lee por líneas. Al leer cada línea, se separan en primer lugar los distintos campos que la componen3, que son los que se utilizan para llevar a cabo el proceso de actualización.
Todos los campos que conforman la línea leída se agrupan en un array, cuyo nombre es
datos
.El proceso de dividir cada línea en los campos que la constituyen y agrupar estos campos en un array lo lleva a cabo la función
fgetcsv()
de PHP. En el siguiente cuadro se aprecia cómo mediante dicha función se agrupan los distintos campos de cada línea en un array de nombredatos
:$datos=fgetcsv($descriptor_fichero, 4096, ";")
Cuadro 2.1. Uso de la función fgetcsv() y agrupación de campos en el array datos.
En caso de que el número de campos que constituyen cada línea del fichero
csv
no coincida con el número de campos requerido por cada una de las tres acciones nombradas anteriormente que hacen uso de dicho fichero, no se actualizará la base de datos y se detendrá la ejecución del programa.
3 Para obtener un listado completo de los campos que componen cada línea, véase el apartado 1.2.1.- Base de datos en el capítulo 1, pág. 4.
El bloque de código que se encarga de realizar esta tarea se muestra en el cuadro siguiente:
while($datos=fgetcsv($descriptor_fichero, 4096, ";")){
$campos=count($datos);
80: $vacio=1;
if($campos>$columns){
for($i=$columns;$i<$campos;$i++){
if($datos[$i]!='') 85: $vacio=0;
} }
//Si el numero de campos por cada fila del 90: //fichero *.csv no es el correcto, se da un //mensaje de error y se detiene la ejecucion //del programa. La variable "vacio" esta a //"1" si en alguna fila hay mas campos de //los necesarios pero estos no contienen 95: //datos. Elmotivo de que se tenga en cuenta //esta variable es que, al guardar tablas //con extension csv, MS-Excel suele agregar //campos vacios al final de cada linea.
if(($campos=count($datos)<$columns)||
($vacio==0)){
100: $warning=1;
$msg1="Wrong structure found in
$uploadfile_aux. Error in line $linea.";
$msg2="   There must be $columns fields per line in the selected csv file.";
$smarty->assign("warning",$warning);
$smarty->assign("msg1",$msg1);
105: $smarty->assign("msg2",$msg2);
$smarty->display("upload.tpl");
fclose($descriptor_fichero);
unlink($uploadfile);
exit;
110: }
$linea++;
}
Cuadro 2.2. Comprobación de la estructura del fichero csv de actualización.
Como se puede ver en el cuadro 2.2, para que no finalice indebidamente la ejecución del programa deberán cumplirse las dos condiciones siguientes:
- que el número de posiciónes del array
datos
, que será igual al número de campos que tiene el fichero de actualización en cada línea, sea igual o superior al necesario para que la acción elegida (de entre las tres posibles, nombradas al comienzo del presente apartado) pueda efectuarse.- que el valor almacenado en la variable
vacio
sea distinto de cero.El programa continuará su ejecución si se cumplen estas dos condiciones simultáneamente; es decir, si en cada línea del fichero de datos csv hay exactamente los campos necesarios para que se ejecute la acción elegida o, caso de que existan campos en exceso, estos campos en exceso están vacíos. En otro caso, la ejecución del programa finalizará.
El motivo de evaluar la condición
if(($campos=count($datos)<$columns)||($vacio==0))
es que el fichero en formato csv con el que se actualiza la base de datos se genera con MS-Excel, y este programa, al guardar la hoja de cálculo en el formato mencionado, suele añadir más campos de los que realmente existen. Estos campos que se añaden en exceso están vacíos. Por tanto, sólo se detendrá la ejecución del programa si el formato del fichero csv es distinto del que exige la acción que se intenta llevar a cabo.
Una vez hechas todas las aclaraciones anteriores, se verá en qué consiste cada una de las cuatro acciones posibles que se pueden llevar a cabo sobre la base de datos. Estas acciones son las siguientes:
Cuadro 2.3. Código fuente encargado de agregar nuevas tuplas a la base de datos.
- Agregar nuevas filas
Cuando se ejecuta la aplicación con esta opción activada, cada una de las líneas del fichero csv se agregará a la base de datos
ieee
como una nueva tupla.Para añadir las líneas del fichero a la base de datos, cada una de ellas debe estar formada por catorce campos. Al agregar las nuevas tuplas, el primer campo de cada línea del fichero, que es un número de referencia, será ignorado y cada uno de los trece campos restantes se asignará a uno de los trece campos útiles de la tabla
ies_conf
. Como se adelantó en el capítulo 1, actualmente el campotema2
contiene la misma información que el campokey1
, por lo que, al añadir una nueva tupla, se le asigna a ambos campos el mismo valor.El bloque de código encargado de añadir las nuevas tuplas a la base de datos es el siguiente:
$result=db_query("INSERT INTO ies_conf(nombre, email,paper,confe,anyo,
tema,pais,area,mes,tema2,key1,key2,key3, afili,dummy)
135: VALUES ('$datos[2]','$datos[3]','$datos[1]', '$datos[11]','$datos[12]',
'$datos[7]','$datos[4]','$datos[5]', '$datos[13]','$datos[8]',
'$datos[8]','$datos[9]','$datos[10]', '$datos[6]','')");
Como se puede comprobar en el fragmento de código fuente del cuadro anterior, el campo en el campo
dummy
no se introduce ningún dato, ya que, según se expuso en el capítulo 1, se trata de un campo que se utiliza para la gestión manual de la base de datos4.Cuadro 2.4. Código fuente encargado de eliminar tuplas de la base de datos.
- Eliminar filas con una dirección de e-mail determinada
Cuando se ejecuta la aplicación con esta opción activada, se eliminan de la base de datos todas aquellas filas cuyo campo
Para eliminar las filas de la base de datos, se lee cada línea del fichero, que en este caso debe tener un único campo, y se eliminan todas las tuplas de la base de datos cuyo campo
El bloque de código encargado de eliminar las tuplas de la base de datos es el siguiente:
142: $result=db_query("DELETE FROM ies_conf WHERE `email`='$datos[0]'");
Cuadro 2.5. Código fuente encargado de reemplazar tuplas de la base de datos.
- Reemplazar direcciónes de e-mail determinadas
Cuando se ejecuta la aplicación con esta opción activada, se buscan las tuplas de la base de datos cuyo campo
En este caso, según se deduce del párrafo anterior, cada línea del fichero csv que se va a procesar debe tener dos campos.
El bloque de código encargado de sustituir las direcciones de e-mail de las tuplas de la base de datos es el mostrado a continuación:
147: $result=db_query("UPDATE ies_conf SET `email`='$datos[1]' WHERE
`email`='$datos[0]'");
4 Para obtener más información acerca del uso del campo dummy, véase apartado 1.2.1.- Base de datos del capítulo 1, pág. 4.
- Eliminar filas que cumplan determinadas condiciones especificadas por el usuario
Cuando se ejecuta la aplicación con esta opción activada, se buscan en la base de datos todas las tuplas que cumplan las condiciones especificadas por el usuario en varias cajas de texto y se eliminan dichas tuplas.
El usuario puede especificar hasta cuatro condiciones, que son las siguientes:
- nombre de un investigador
- dirección de e-mail de un investigador - nombre de una conferencia
- un año
Para especificar estas condiciones, se muestran cuatro cajas de texto, cada una de ellas destinada a almacenar una de las cuatro condiciones nombradas. En este caso, puesto que las condiciones se especifican directamente en cajas de texto, no hay que indicar ningún fichero adicional del que extraer información.
El código fuente encargado de eliminar de la base de datos las tuplas que cumplan las condiciones especificadas por el usuario es el siguiente:
180: $query1='';
$query2='';
$query3='';
$query4='';
if(isset($_POST["Name"])){
185: $var1=$_POST["Name_value"];
$query1="AND `nombre`='$var1'";
}
if(isset($_POST["email"])){
$var2=$_POST["email_value"];
190: $query2="AND `email`='$var2'";
}
if(isset($_POST["Confe"])){
$var3=$_POST["Confe_value"];
$query3="AND `confe`='$var3'";
195: }
if(isset($_POST["Year"])){
$var4=$_POST["Year_value"];
$query4="AND `anyo`='$var4'";
}
200:
if(($query1!='')||($query2!='')||($query3!='')||
($query4!='')){
//Se escriben en un fichero csv las filas que //se va a eliminar
write_file($file_path_deleted_rows,
$file_name_deleted_rows,$query1,$query2, $query3,$query4);
205:
Cuadro 2.6. Código fuente encargado de eliminar tuplas de la base de datos.
Como puede verse en el cuadro anterior, si el usuario especifica alguna condición para la eliminación de tuplas, se llama a la función
write_file()
, que escribe en un fichero en formato csv las filas que se van a eliminar para que, posteriormente, el usuario pueda proceder a la descarga de este fichero si lo considera oportuno. De este modo, en el supuesto de que descargue el fichero, puede comprobar si realmente eliminó las tuplas que deseaba y, en caso de haber eliminado otras, puede volver a introducirlas en la base de datos.Para que las cajas de texto puedan ser accesibles, es decir, para que sea posible escribir en ellas, debe marcarse el
checkbox
correspondiente a la caja o cajas en las que se desea escribir; por tanto, se pueden activar hasta cuatrocheckbox
, uno por cada caja de texto. De igual modo, para que los cuatrocheckbox
sean accesibles, es decir, para que puedan ser activados, hay que marcar la opción correspondiente aeliminar filas que cumplan determinadas condiciones especificadas por el usuario
. Para controlar que loscheckbox
y que las cajas de texto sólo sean accesibles en los casos expuestos, se ha utilizado código JavaScript, ya que este control se hace en la máquina local y no en la remota (el código JavaScript no lo ejecuta el servidorwoody
, sino el navegador en la máquina en la que está funcionando).$result=db_query("DELETE FROM ies_conf WHERE 1".
"$query1"." $query2".
" $query3"." $query4");
2.1.3.- Capturas de pantalla
En la siguiente figura, se muestra el aspecto visual que presenta la aplicación:
Figura 2.1. Captura de pantalla de la aplicación Update DataBase.
Figura 2.2. Captura de pantalla de la aplicación Update DataBase mostrando una ventana emergente de ayuda.
Cuando se presiona el botón
Order?
mostrado en la figura 2.1, se visualiza una ventana que, en función de la acción a ejecutar, indica el orden que deben tener los distintos campos que forman cada línea del fichero csv con el que se actualizará la base de datos. De este modo, se libera al usuario de la necesidad de memorizar el orden de estos campos o de utilizar continuamente notas de ayuda para consultar dicho orden. La figura 2.2 muestra la captura de pantalla de lo que el usuario vería si pulsara el botónOrder?
con la opciónagregar nuevas filas
activada.Cuadro 2.7. Función Show_Help().
Estas ventanas emergentes que proporcionan la ayuda se han programado haciendo uso del método
alert()
de JavaScript, tal como puede verse en el cuadro siguiente:La función
Show_Help()
se dispara cuando se hace click en el botónOrder?
..2.- Download DataBase5
.2.1.- Justificación de la funcionalidad
uando una base de datos alberga cientos o miles de tuplas, es muy onveniente realizar copias de seguridad o backup’s de la misma, ya que n caso de que ocurra cualquier incidente en la copia original, la copia de eguridad realizada permite volver a la situación previa a dicho incidente
e manera rápida y sencilla.
a aplicación
Download DataBase
permite realizar copias de seguridad e toda la información contenida en la base de datosieee
y descargarlas l ordenador del usuario en un fichero de texto con formato csv..2.2.- Funcionamiento
dad en el servidor remoto
woody
y,function Show_Help(formu){
if(formu.Action[0].checked)
alert("Correct order:\nID Number (It won't be stored); Paper; Name; e-mail; Country;
Geographical Area; Afiliation; Topic; Key1; Key2;
Key3; Conference; Year; Month");
else if(formu.Action[1].checked) 280: alert("Correct order:\ne-mail");
else if(formu.Action[2].checked)
alert("Correct order:\nOriginal e-mail;
Final e-mail");
else if(formu.Action[3].checked)
alert("You don't have to select any csv file.");
285: }
2 2
Cc e s d L d a 2
En el momento en el que el usuario decide descargar una copia de seguridad de la base de datos, lo primero que debe hacer es dar la orden de que se cree una copia de seguri
5 Para visualizar un ejemplo de uso de la herramienta Download DataBase, véase el formación
wnload DataBase, véase e A, pág. 94.
apartado 4.10.- Acción 10: Realizar una copia de seguridad de la in almacenada en la base de datos en el capítulo 4, pág. 79.
Para visualizar el código fuente completo de la aplicación Do el apartado A.1.2.- Download DataBase en el Apéndic
una vez que esta copia se ha creado, debe proceder a descargar dicha opia a su propia máquina.
uando el usuario inicia la aplicación, se muestran dos columnas con formación de interés acerca del fichero existente en el servidor
woody
ue contiene la última copia de seguridad hecha y también acerca de la ase de datosieee
. La columna que muestra los datos sobre el ficheroados, que son los siguientes:
- Nombre del fichero: muestra el nombre del fichero que contiene a base de datos
ieee
. Este fichero se encuentra alojado en el servidorwoody
y su nombre es- Número de filas: muestra el número de filas que contiene la tabla datos
ieee
.dos acciones que la aplicación
Download ataBase
permite realizar sobre la base de datos ieee.muestran en pantalla, entre otros datos, la fecha de creación de la última copia de seguridad existente en el servidor
woody
y la fecha en la que se ha realizado la última actualización de la base de datosieee
. Si la segunda dede que se cree una nueva copia de seguridad actualizada en el c
C in q b
que contiene la última copia de seguridad efectuada, está formada por tres apart
la copia de seguridad de l
ies_conf.csv
.- Tamaño del fichero: muestra el tamaño en bytes del fichero
ies_conf.csv
.- Fecha del fichero: muestra la fecha de creación del fichero
ies_conf.csv
.Por otra parte, la columna que muestra la información sobre la base de datos
ieee
está formada por dos apartadosies_conf
de la base de- Última actualización: muestra la fecha de la última actualización que se ha hecho sobre la base de datos
ieee
.Una vez hechas las aclaraciones anteriores, se procederá a ver en qué consisten cada una de las
D
Estas dos acciones son las siguientes:
- Crear una copia de seguridad actualizada
Como se expuso anteriormente, en el momento en el que el usuario accede a la aplicación, se
las fechas nombradas es posterior a la primera, ambas se resaltan en rojo y en negrita y la aplicación invita al usuario a dar la orden servidor
woody
antes de proceder a su descarga.Cuadro 2.8. Uso de la función stat()y almacenamiento de los datos de interés devueltos.
Cuadro 2.9. Función .
l fichero que se le pase como parámetro. Dichas estadísticas se devuelven en un array en el que cada posición ytes, fecha del último acceso...). De toda la información devuelta por la función
stat()
, la aplicaciónDownload
tamaño y la fecha de creación del fichero, respectivamente. En el siguiente cuadro se muestra cómo se
los datos de interés en dos variables para usarlos en otro punto del programa:
vez que se usa la aplicación y no de la base de datos, se muestra un ue no existe dicho
nte muestra el El fichero que contiene la copia de seguridad de la base de datos se denomina
ies_conf.csv
. Para consultar la fecha de creación este fichero se utiliza la funciónstat()
de PHP, que devuelve las estadísticas decontiene alguna información relativa al fichero (número de inode, tamaño en b
DataBase
utiliza la almacenada en las posiciones siete y nueve, que son elobtienen las estadísticas del fichero
ies_conf.csv
mediante la funciónstat()
y cómo se almacenan25: if(file_exists($file)){
$file_exist=1;
H:i:s",$datos_fichero[9]);
$datos_fichero=stat($file);
$file_size=$datos_fichero[7]." bytes";
$file_date=date( "M/d/Y –
30: $file_numeric_date=fecha_numerica($file_date);
}
En caso de que sea la primera exista aún el fichero de backup
mensaje en pantalla avisando al usuario de q fichero.
Por otra parte, para consultar la fecha de la última actualización hecha sobre la base de datos, se utiliza el tipo de consulta
SHOW TABLE STATUS LIKE ‘nombre_tabla’
, que, igual que la funciónstat()
de PHP, devuelve un array con información estadística de la base de datos. En este caso, la posición del array que contiene la fecha de la última actualización hecha sobre la base de datos es la identificada porUpdate_time
. El cuadro siguiecódigo que consulta la fecha de la última actualización hecha sobre la tabla
ies_conf
de la base de datosieee
y almacena el resultado obtenido en la variableupdate_date
:function consultar_actualizacion_BD(){
//Consulta la ultima vez que se actualizo la BD 125: $idx=db_query("SHOW TABLE STATUS LIKE
'ies_conf';");
$row=mysql_fetch_array($idx);
$update_date=$row['Update_time'];
return $update_date;
130: }
Cuadro 2.10. Llamada al programa dump_all dentro de la apicación Download DataBase.
e muestra en antalla el contenido de la base de datos
ieee
. Como en este casorá al fichero esta variable n el
La aplicaión
dump_all
ya existía con anterioridad al inicio de estena el botón
Create BackUp
:nterior, en caso de de la base de datos, éste se elimina antes de crear un Para crear un nuevo fichero de backup, el usuario sólo tiene que pulsar el botón
Create BackUp
. En ese momento, la aplicaciónDownload DataBase
llama a un segundo programa, denominadodump_all
y desarrollado en lenguajePERL
, qup
no interesa que el contenido de la base de datos se muestre en pantalla, sino que se pretende que este contenido se escriba en un fichero, la salida del programa
dump_all
se direccionacontenido en dicado en la variable
$file
. El valorin
hará que la salida del programa mencionado se escriba e
es_conf.csv
.fichero
i
proyecto y, por tanto, no forma parte del contenido de éste.
En el siguiente cuadro se muestra el código que se ejecuta cuando se presio
Como puede verse en la línea 58 del cuadro a
y
un fichero con una copia de que exista en el servidorwood
seguridad
nuevo fichero. Esto se hace para evitar posibles problemas que pudieran surgir al sobreescribir el fichero existente.
Por otro lado, la finalidad de la línea 62 del cuadro 2.10 es recargar la página web una vez que haya finalizado el proceso de creación del fichero de backup, lo que hace que se actualice la fecha de creación del mismo que se muestra en la citada página.
if(isset($_POST["Create_BackUp"])){
50: //Se crea un nuevo fichero de backup y se recarga la //pagina para que se actualicen las estadisticas del //fichero de backup.
//Si existe un fichero que contenga un BackUp de la 55: //BD antes de crear un nuevo fichero, se elimina el //fichero existente para evitar posibles problemas.
if(file_exists($file)) unlink($file);
60: system("$programa_BackUp > $file");
echo "<META HTTP-EQUIV=\"refresh\"
CONTENT=\"0;URL=backup.php\">";
}
-
o decide descargar la copia de seguridad de base de datos
ieee
existente en el servidorwoody
, debe elegiricha descarga y de forma ansparente al usuario, se lleva a cabo un proceso en el que se
almacenándose luego
ue corresponda según la parte del fichero
ies_conf.csv
o o rá desde la línea 1 hasta la líneaonf_part1.csv
, que contendrá desde la que se tienen los oies_conf.csv
, se ero cuyo nombre esf2.tar
. Finalmente, este fichero se comprimirá haciendoor
oody
el ficheroies_conf2.tar.gz
, que es el que descarga els preciso destacar que, para ahorrar tiempo de CPU del servidor
e que, aún xistiendo dicha copia comprimida en el servidor, la fecha de la ltima copia sin comprimir sea posterior a la fecha de la copia omprimida existente.
Descargar la copia de seguridad existente Una vez que el usuari
la
en primer lugar si desea descargar una versión comprimida de la misma o, por el contrario, una versión sin compresión.
En caso de elegir la descarga de la versión comprimida del fichero
ies_conf.csv
, como paso previo a dtr
divide el fichero en bloques de 65.536 líneas,
cada uno de estos bloques en un fichero distinto. El nombre de
onf_part$i.csv
, donde $i (0...n) es estos nuevos ficheros esies_c
el número q
que almacene el nuevo fichero. Así, si por ejemplo el ficher
ies_conf.csv
contiene 80.000 líneas, se creará el ficheries_conf_part0.csv
, que contend65.536, y el fichero
ies_c
línea 65.537 hasta la línea 80.000. Una vez distintos ficheros en los que se ha dividid
h rocede a
tarearlos
o unirlos en un único fic pies_con
so de la aplicación
gzip
, con lo que se genera en el servid uw
usuario. El motivo de dividir
ies_conf.csv
en varios ficheros de 65.536 líneas como máximo es que estos ficheros se leen con la aplicación MS-Excel, cuyas hojas tienen una capacidad máxima de 65.536 líneas.E
woody
y, por consiguiente, tiempo de espera del usuario de la aplicaciónDownload DataBase
, la copia comprimida del ficheroies_conf.csv
sólo se genera en caso de que no exista ninguna copia comprimida anterior en dicho servidor o en caso de úc
El cuadro 2.11 muestra el código que crea la versión comprimida de la copia de seguridad de la base de datos.
if(($existe_BackUp_com=="No")||
($file_com_numeric_date<$file_numeric_date)){
//Antes de llamar al programa de compresion se //divide el fichero a comprimir en ficheros 90: //que tengan 65536 lineas como maximo. Esto se //hace porque el programa con el que se van a //abrir estos ficheros (MS-Excel) lee, como //maximo, 65536 lineas por fichero. Antes de
Cuadro 2.11. Creación de la versión comprimida de la copia de seguridad de la base de datos.
Cuadro 2.12. Código que muestra el cuadro de diálogo de descarga de ficheros.
formato sin compresión), se procede a pulsar el otón
Download
, que llama a la funcióndownload()
, encargadala copia de con compresión o en Una vez que se ha seleccionado el formato en el que se va a descargar la copia de seguridad de la base de datos (formato con compresión o
b
de mostrar en pantalla un cuadro de diálogo de descarga para que el usuario indique la carpeta o directorio en el que desea guardar dicha copia de seguridad. Cuando el usuario completa este paso, se inicia la descarga del fichero de backup al destino indicado.
El cuadro 2.12 muestra el código de la función download(), que está contenida en el fichero
ies.php
.E
//comprimir los ficheros, se agrupan estos en 95: //un unico fichero
$files="";
$num_parts=divide_file($file_aux,$file_path);
for($i=0;$i<=$num_parts;$i++)
$files=$files."ies_conf_part$i.csv ";
100: system("$programa_agrupacion
$programa_agrupacion_parametros –C $file_path $files");
for($i=0;$i<=$num_parts;$i++){
$unlink_file=$file_path."ies_conf_part$i.csv";
unlink("$unlink_file");
}
105: system("$programa_compresion $programa_compresion_parametros $file_agrupado");
}
function download($file_path,$file_name,$file_type){
);
header("Pragma: no-cache");
no-cache");
$file=$file_path.$file_name;
150:
header("Content-Type: $file_type"
header("Cache-Control: no-store, header("Pragma: public");
155: header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment;
filename=".$file_name."");
header("Content-Length: ".filesize($file));
160: header("Content-Trans e);
fer-Encoding: binary");
readfile($fil }
n función de que el usuario decida descargar seguridad de la base de datos en un formato
Figura 2.3. Captura de pantalla de la aplicación Download DataBasecuando la fecha
no sin compresión, la variable
$file_type
tomará el valorpplication/gzip
o el valortext/x-csv
, respectivamente.2.2.3.- Capturas de pantalla
En la ón
Down
2.3.-
2.3.1.- Justificación de la funcionalidad Las co
realiza decir, base
desarr ermite al
basadas en direcciones de e-mail o en u
a
figura 2.3 se puede ver la interfaz de usuario de la aplicaci
del fichero de backup existente en el servidor woodyes posterior a la fecha de la última modificación hecha en la base de datos.
load DataBase
.DataBase Content Query6
nsultas más comunes que se hacen en una base de datos son la ción de informes estadísticos y las basadas en datos concretos; es en valores específicos de alguno de los campos que forman dicha de datos. Para realizar este segundo tipo de consulta se ha
llado la aplicación
DataBase Content Query
, que p ousuario efectuar consultas directas ombres de investigadores.
n
6 Para visualizar un ejemplo de uso de la herramienta DataBase Content Query, véase el apartado 4.6.- Acción 6: Hacer una consulta a la base de datos a partir de la dirección de e-mail de un investigador en el capítulo 4, pág. 70.
Para visualizar el código fuente completo de la aplicación DataBase Content Query, véase el apartado A.1.3.- DataBase Content Query en el Apéndice A, pág. 99.
2.3.2.- Funcionamiento
Mediante esta aplicación, el usuario indica en primer lugar, a través de botones de opción de tipo
radio
, si desea realizar una consulta basada en una dirección de e-mail o en el nombre de algún investigador. Una vez elegida la opción, el usuario procede a rellenar un cuadro de texto con la cadena de texto de la consulta y, finalmente, pulsa el botónSubmit
, que envía la consulta vía internet al servidorwoody
, donde está almacenada la base de datosieee
.Los datos que resultan tras realizar la consulta se muestran en pantalla en una tabla, conteniendo cada fila de dicha tabla los datos correspondientes a un investigador. Las columnas que forman cada fila son, por orden de presentación, las siguientes:
- ID#: número de identificación de cada fila de la tabla.
- e-mail: si la consulta se ha hecho indicando una dirección de e- mail, esta columna ocupará la segunda posición de la tabla impresa en pantalla y mostrará todas las direcciones de e-mail existentes en onsulta
El siguiente ejemplo trata de facilitar la compresión de lo expuesto
Si el usuario selecciona una consulta basada en una dirección que se indican los datos de la consulta introduce la cadena
es de e-mail almacenadas en la base de datos cadena
nombre
, ya que%
es el carácter comodín para las consultas a la base de datos.posición de la tabla e indicará la dirección de e-mail del la base de datos que cumplan las restricciones de la c
realizada.
en el párrafo anterior:
de e-mail y en el cuadro de texto en el
[email protected]
, la columnaPor otra parte, si en el cuadro de texto se introduce la cadena
%nombre%
, en la columnaque contengan la
Si la consulta a la base de datos se ha hecho a partir del nombre de algún investigador, la columna
nombre
de la misma fila.- Name: esta columna se comporta de modo idéntico a la columna
- Conference: conferencia en la que ha participado el investigador
a tenido lugar la conferencia mostrada en la columna
Conference
.Topic: tema dentro del que se clasifica el artículo presentado por
En el cuadro siguiente se muestra el código fuente que hace la consulta a la base de datos en función de la información proporcionada por el usuari
exista al menos una tupla que cumpla la condición indicada, prepara los datos para que sean mostrados en pantalla en una tabla:
cuyo nombre y dirección de e-mail se muestran en las columnas
Name
y- Year: año en el que h
-
el autor cuyo nombre y dirección de e-mail se especifican en las columnas
Name
yConference
yYear
de la misma fila.o a través de la interfaz de la aplicación y que, en caso de que
if(
$ $ 25: $
if($_POST["Criteria"]=="email"){
//Criterio de consulta seleccionado
30:
35:
//Nombre de la segunda fila de la tabla de
40:
$criteria_eng="e-mail address";
else{
45
$table2="e-mail";
50
$_POST["query_data"]!=""){
query_data_empty=0;
data=$_POST["query_data"];
smarty->assign("query_string",$data);
$criteria="email";
//Criterio de consulta no seleccionado $no_criteria="nombre";
$attention="e-mail";
//Nombre de la primera fila de la tabla de //resultados
$table1="e-mail";
//resultados $table2="Name";
//Criterio de consulta para imprimirlo en la //plantilla
}
: $criteria="nombre";
$no_criteria="email";
$attention="name";
$table1="Name";
:
$criteria_eng="author's name";
}
Cuadro 2.13. Código fuente encargado de realizar la consulta a la base de datos y almacenar los resultados
2
L
taBase
C
desarrollo de este apartado, con los cuales interacciona el usuario para ll
en arrays.
$smarty->assign("table1",$table1);
55
//Se realiza la consulta
$idx=db_query("SELECT $criteria,$no_criteria,confe,
60:
70: $criteria_data[$i]=db_result($idx,$i,$j);
ult($idx,$i,$j);
i,$j);
: $smarty->assign("table2",$table2);
anyo,tema FROM ies_conf
WHERE $criteria like '$data' order by confe, anyo,$criteria;");
$rows=db_numrows($idx);
$smarty->assign("rows",$rows);
if($rows>0){
//Se rellenan las tablas de resultados para 65: //luego imprimirlas en la plantilla
for($i=0;$i<$rows;$i++){
$id[$i]=$i+1;
for($j=0;$j<5;$j++){
if($j==0) elseif($j==1)
data[$i
$no_criteria_ ]=db_res elseif($j==2)
$conference[$i]=db_result($idx,$
lseif($j==3) 75: e
$year[$i]=db_result($idx,$i,$j);
elseif($j==4)
_result($idx,$i,$
$topic[$i]=db }
80: } }
j);
.3.3.- Capturas de pantalla
a figura 2.4 muestra una captura de pantalla de la aplicación
n verse todos los elementos citados en el
Da
ontent Query
en la que puede evar a cabo la consulta.Figura 2.4. Captura de pantalla de la aplicación DataBase Content Query.
.4.- Statistics
tienen una importancia primordial en cualquier sistema de base de datos, pues permiten tener diferentes visiones generales del conjunto de los datos almacenados.
Con objetos de permitir la realización de dichos informes, se han desarrollado las aplicaciones
Simple Statistics
yCross-conference Statistics
, cada una de ellas orientada a un tipo de informe distinto.La primera de las aplicaciones desarrolladas,
Simple Statistics
, permite al usuario fijar el tipo de información que quiere representar en los ejes “x”e “y” de la tabla que contiene el informe estadístico. Los distintos tipos de información se podrán elegir entre algunos de los campos que forman la tabla
ies_conf
de la base de datosieee
7. La segunda de las aplicaciones,Cross-conference Statistics
, permite al usuario realizar un seguimiento de los investigadores que, habiendo presentado artículos en una conferencia concreta, han presentado también articulos en otras conferencias almacenadas en la base de datosieee
.2
2.4.1.- Justificación de la funcionalidad Los informes estadísticos
7 Para obtener más información acerca de los campos que forman la tabla ies_conf, véase el apartado 1.2.1.- Base de datos en el capítulo 1, pág. 4.
En los apartados que siguen, se procederá a realizar una explicación más detallada de las dos aplicaciones mencionadas.
2.4.2.- Simple Statistics8 2.4.2.1.- Funcionamiento
La aplicación
Simple Statistics
permite realizar estadísticas relativas a los investigadores almacenados en la base de datosieee
y presentarlas en una tabla en pantalla.Para obtener dichas estadísticas, el usuario debe, en primer lugar, indicar en dos menús desplegables el tipo de datos que desea que se representen en los ejes “x” e “y”; después, debe pulsar el botón
View Statistics
, que presentará en pantalla la tabla con las estadísticas deseadas.A continuación se indican los posibles tipos de información que pueden ser representados en cada uno de los dos ejes, mostrándose entre
aréntesis s
ieee
quentiene la información:
(
anyo
), conferencias (confe
), países (pais
), temas (tema
), áreas geográficas (area
).- Eje y: conferencias, países, temas, áreas geográficas.
e desee representar en ada uno de los ejes y que introduce el resultado de dicha consulta en un
el campo de la tabla
ies_conf
de la base de dato pco
- Eje x: años
En el cuadro siguiente se muestra el código que hace la consulta a la base de datos en función del tipo de información que s
c
array para que luego pueda ser presentado en pantalla:
8 Para visualizar un ejemplo de uso de la herramienta Simple Statistics, véase el apartado 4.4.- Acción 4: Realizar un informe estadístico, te
posibles repeticiones en las direcciones de e-mail, de la procedencia, por //Se hacen las consultas a la BD segun los datos
60: //del formulario
$idx=db_query("SELECT distinct $X_axis FROM ies_conf order by $X_axis;");
$num_X_axis=db_numrows($idx);
$num_X_axis_aux=$num_X_axis+1;
$ColSpan=$num_X_axis_aux;
65: for($i=0;$i<$num_X_axis;$i++)
$var X axis[$i]=db result($idx,$i,0);
niendo en cuenta las áreas geográficas, de los investigadores que han presentado artículos en las distintas conferencias en el capítulo 4, pág. 65.
tatistics, véase el apartado A.1.4.- Simple Statistics en el Apéndice A, pág. 101.
Para visualizar el código fuente completo de la aplicación Simple S
Cuadro 2.14. Código fuente encargado de realizar las estadísticas y almacenar los datos en un array.
$idx=db_query("select distinct $Y_axis from ies_conf order by $Y_axis;");
$num_Y_axis=db_numrows($idx);
is;$i++)
result($idx,$i,0);
ultados de las estadisticas 75: //en tablas para despues imprimirlos en la
$num_X_axis;$j++){
80: $idx2=db_query("select count($Repetitions email)
nf where
70: for($i=0;$i<$num_Y_ax $var_Y_axis[$i]=db_
$dis=array();
//Se almacenan los res //plantilla
for($i=0;$i<$num_Y_axis;$i++){
array_push($dis,array());
for($j=0;$j<
from ies_conf where
$X_axis='".$var_X_axis[$j]."' and $Y_axis='".
$var_Y_axis[$i]."';");
array_push($dis[$i],db_result($idx2,0,0));
}
$idx2=db_query("select count(email) from ies_co 85: $Y_axis='".$var_Y_axis[$i]."';");
array_push($dis[$i],db_result($idx2,0,0));
}
Com
haber os de los artículos expuestos en
misma, la aplicación
Simple Statistics
admite la posibilidad de realizarlas s ones de los
vestigadores en la redacción de los distintos artículos.
la base de datos algunos investigadores con direcciones de e-mail comunes y las e
P ndo en
c ail o sin tener en cuenta estas
r seleccionar cualquiera de ellas
m
dio
presente en la interfaz de laa
2.4.2.2.- Capturas de pantalla L
p p so
o en una conferencia determinada un mismo investigador puede participado en la redacción de vari
la
e tadísticas teniendo o sin tener en cuenta las repetici in
Si se activa la opción sin repeticiones, se obtiene el número de personas que han presentado sus artículos en cada una de las conferencias. Dicho número podría no ser exacto debido a que existen en
stadísticas se realizan a partir de estas direcciones.
ara distinguir entre las dos posibles opciones (estadísticas tenie uenta la repetición de direcciones de e-m
que epeticiones), el usuario sólo tiene
ediante un botón de opción de tipo
ra
plicación.a figura siguiente muestra la interfaz de la aplicación, en la que se ueden apreciar tanto los dos menús desplegables, que contienen los osibles tipos de información a representar en los ejes “x” e “y”, como los
s botones de opción, que permiten realizar las estadísticas teniendo o din tener en cuenta las repeticiones de direcciones de e-mail.
Figura 2.5. Captura de pantalla de la aplicación Simple Statistics.
.4.3.- Cross-conference Statistics9
rtículos en una 2
2.4.3.1.- Funcionamiento
La aplicación Cross-conference Statistics permite realizar un seguimiento e los investigadores que, habiendo presentado a
dconferencia determinada, han presentado también artículos en otras conferencias almacenadas en la base de datos
ieee
.Antes de obtener en pantalla una tabla que recoja el informe estadístico realizado por la aplicación, el usuario debe suministrar a la misma los
iguientes datos:
s
- Conferencia de la que desea obtener un seguimiento. Mediante un cuadro de selección desplegable, el usuario debe indicar de qué conferencia, de entre todas las disponibles, quiere obtener un estudio de los investigadores que han presentado artículos en esa
9 Para visualizar un ejemplo de uso de la herramienta Cross-conference Statistics, véase el apartado 4.5.- Acción 5: Realizar un informe estadístico de los
ence Statistics, véase el apartado A.1.5.- Cross-conference Statistics en el Apéndice A, pág. 104.
investigadores que, habiendo presentado artículos en la conferencia IECON entre los años 2002 y 2004, han presentado también artículos en otras conferencias almacenadas en la base de datos ieee entre los años 2001 y 2005 en el capítulo 4, pág. 67.
Para visualizar el código fuente completo de la aplicación Cross-confer
conferencia y en otras de las almacenadas en la base de datos
ieee
.- Rango de años de la conferencia seleccionada que desea que la aplicación tenga en cuenta para realizar el informe estadístico. Este rango de años se identificará como
rango A
y tendrá M elementos (rango A = m1, m2, ..., mM). El conjunto de investigadores que han presentado artículos en la conferencia seleccionada en alguno de los años que integran elrango A
se identificará comoconjunto principal
.
- Rango de años que desea que la aplicación tenga en cuenta para comparar el
conjunto principal
con el resto de conferencias organizadas almacenadas en la base de datosieee
. Este rango de años se identificará comorango B
y tendrá N elementos (rango B = n1, n2, ..., nN). Cada uno de los años que componen elrango B
se representará en una celda de la primera fila de la tabla en la que se presenten las estadísticas realizadas por la aplicación.ara realizar el informe estadístico, la aplicación forma, por un lado, el
cipal
y, por otro, (C-1
) xN
intas a la seleccionada en cada uno de los. Estos conjuntos se identifican como P
conjunto identificado como
conjunto prin
njuntos con los investigadores que han presentado artículos en cada co
una de las
C-1
conferencias dist años que constituyen elrango B N
conjuntos secundarios
. Por último, una vez que el usuario presiona el botónView Statistics
, la aplicación calcula la intersección delconjunto principal
con cada uno de losconjuntos secundarios
y presenta los resultados en pantalla mediante una tabla.Los siguientes esquemas ayudan a comprender el funcionamiento de la aplicación:
Figura 2.6. Esquema de funcionamiento de la aplicación Cross-conference Statistics. Visualización del conjunto principal y los conjuntos secundarios.
Figura 2.7. Esquema de funcionamiento de la aplicación Cross-conference Statistics. Intersección del conjunto principal con los conjuntos secundarios.
Cuadro 2.15. Código fuente encargado de realizar las estadísticas y almacenar los resultados en un array.
n el siguiente cuadro se puede ver el código fuente encargado de realizar s consultas a la base de datos y almacenar los resultados en un array ara luego presentarlos por pantalla en una tabla:
2.4.3.2.- Capturas de pantalla
Para concluir, en la figura siguiente se muestra la interfaz de la aplicación, en la que se pueden todos los elementos con los que interactúa el usuario.
E la p
100: for($i=0;$i<$num_conferences;$i++){
$k=0;
array_push($num,array());
if($conferences[$i]!=$confe){
for($j=$from_step3;$j<=$to_step3;$j++){
105: $idx4=db_query("SELECT distinct t1.email FROM ies_conf t1
INNER JOIN ies_conf t2 ON t1.email = t2.email WHERE t1.confe='$confe' 110: AND t1.anyo>='$from_step2' AND t1.anyo<='$to_step2'
AND t2.confe='$conferences[$i]' AND t2.anyo='$j'");
array_push($num[$i],db_numrows($idx4));
115: $k++;
}
$idx4=db_query("SELECT distinct t1.email FROM ies_conf t1
120: ON t1.email = t2.email WHERE t1.confe='$confe' AND t1.anyo>='$from_step2' AND t1.anyo<='$to_step2'
AND t2.confe='$conferences[$i]' 125: AND t2.anyo>='$from_step3' AND t2.anyo<='$to_step3'");
array_push($num[$i],db_numrows($idx4));
} else
130: array_push($num[$i],0);
}
INNER JOIN ies_conf t2
Figura 2.8. Captura de pantalla de la aplicación Cross-conference Statistics.