GESTOR DE CUESTIONARIOS VIA WEB

Transcripción

GESTOR DE CUESTIONARIOS VIA WEB
INSTITUTO POLITÉCNICO NACIONAL
Escuela Superior de Ingeniería Mecánica y Eléctrica
Unidad Zacatenco
Ingeniería en Comunicaciones y Electrónica
SEMINARIO DE TITULACIÓN
REDES DE COMPUTADORAS, MICROCONTROLADORES Y
ADQUISICIÓN DE DATOS VÍA WEB
PROYECTO DE TITULACIÓN
“GESTOR DE CUESTIONARIOS VÍA WEB”
QUE PARA OBTENER EL TÍTULO DE:
INGENIERO EN COMUNICACIONES Y ELÉCTRONICA
P R E S E N T A:
ÁLVAREZ LÓPEZ JORGE ALBERTO.
MAYA MORENO MARICELA.
PÉREZ MELÉNDEZ TOMÁS ROBERTO.
Asesores:
ING. ARTURO A. HIT ESPINOSA.
ING. JOSÉ GERARDO ROMERO BADILLO.
MÉXICO D.F. MAYO 2010
1
2
INDICE
OBJETIVO……………………………….………………………………………………….8
JUSTIFICACION………………………………………………………...............................8
INTRODUCCION…………………………………...………………….............................10
CAPITULO I. SERVIDORES…………………………………………………………….12
1.1 Tipos de servidores………………………………………………………................12
1.1.1 Servidores WEB………………….…………………………….....................13
1.1.2 Servidor DNS (Domain Name Server)….……..…………………………….15
1.1.3 Servidor Correo….…………………..……………….....................................17
1.1.4 Servidor FTP (File Tranfer Protocol)….………………………………...…...18
1.1.5 Servidor Usuarios….………………………………….…...............................21
1.1.6 Servidor DHCP (Dynamic Host Configuration Protocol)………………...…22
1.1.7 Servidor de Aplicaciones…………………………………………………….23
CAPITULO II. BASES DE DATOS….…………………………………………...............25
2.1 Modelos de Bases de Datos.………………………………….…………................26
2.1.1 Bases de Datos Jerárquicas….………………………………………….........26
2.1.2 Base de datos de red….…………………………………………....................27
2.1.3 Bases de datos transaccionales….…………………………………………....27
2.1.4 Bases de datos relacionales….………..………………………………….......27
2.1.5 Bases de datos multidimensionales…...….…………………………………..28
2.1.6 Bases de datos orientadas a objetos………………………………………….29
2.1.7 Bases de datos documentales….…..………………………………................30
3
2.1.8 Bases de datos deductivas….………………..………………………….........30
2.2 Sistema de Gestión de Base de Datos (SGBD) ….………………………………....30
2.3 Entidad – Relación….…………………………………...…………………….........31
2.4 Estructura de una Base de Datos….…………………………………………...........34
2.5 MYSQL….………………………………………….................................................34
CAPITULO II. LENGUAJES PARA PROGRAMACION WEB….……………………...36
3.1 HTML….…………………………………………...................................................36
3.2 PHP………………………………………………………………………………... 37
3.3 CSS………………………………………………………………………………….39
3.4 Javascript.……..…………………………………………………………………….40
CAPITULO IV. DISEÑO E IMPLEMENTACION………………………………….........41
4.1 Requerimientos y Análisis….………………………………………………………41
4.2 Diseño del Sistema………………………………………………………………….44
4.3 Implementación……………………………………………………………………..56
CONCLUSIONES…………………………………………………………………………67
ANEXOS…………………………………………………………………………………...69
REFERENCIAS BIBLIOGRAFICAS……………………………………………………118
4
INDICE DE FIGURAS
Figura 1.1 Navegador y Servidor…………………………………………………………14
Figura 1.2 Incorpora una Base de Datos, Una típica transacción Web con base de datos. Por
ejemplo una petición HTTP, listado de nuestros cuestionarios……………………………14
Figura 1.3 Análisis de la comunicación. Cliente-Servidor………………………………...15
Figura 1.4 Servidor DNS………………………………………………………………......17
Figura 1.5 Servidor de Usuarios……………………………………………………………21
Figura 1.6 Servidor DHCP…………………………………………………………………23
Figura 2.1 Funcionamiento de una Base de Datos…………………………………………25
Figura 2.2 Base de Datos Jerárquica……………………………………………………….26
Figura 2.3 Base de Datos de Red…………………………………………………………..27
Figura 2.4 Base de Datos Relacional………………………………………………………28
Figura 2.5 Base de Datos Multidimensional………………………………………………29
Figura 2.6 Base de Datos Orientada a Objetos…………………………………………….30
Figura 2.7 Componentes del SGBD……………………………………………………..…31
Figura 2.8 Entidad - Relación……………………………………………………………...32
Figura 2.9 Relación uno a uno………………………………………………………..……32
Figura 2.10 Relación uno a muchos………………………………………………………..33
Figura 2.11 Relación muchos a muchos…………………………………………………...34
Figura 3.1 Funcionamiento PHP…………………………………………………………...38
Figura 4.1 Diagrama Entidad-Relación……………………………………………………41
Figura 4.2 Tabla cuestionarios. ……………………………………………………………42
Figura 4.3 Tabla preguntas…………………………………………………………………42
5
Figura 4.4 Tabla respuestas………………………………………………………………...43
Figura 4.5 Tabla data………………………………………………………………………43
Figura 4.6 Tabla usuarios…………………………………………………………………..43
Figura 4.7 Vista Login……………………………………………………………………..44
Figura 4.8 Menús administración del sistema……………………………………………...45
Figura 4.9 Menús operación del sistema…………………………………………………...45
Figura 4.10 Diagrama de flujo Login………………………………………………………46
Figura 4.11.- Acciones cuestionarios………………………………………………………46
Figura 4.12 Vista cuestionarios…………………………………………………………….47
Figura 4.13 Diagrama de flujo Cuestionarios……………………………………………..47
Figura 4.14 Acciones preguntas……………………………………………………………48
Figura 4.15 Vista preguntas………………………………………………………………..48
Figura 4.16 Diagrama de flujo Preguntas…………………………………………………49
Figura 4.17 Acciones respuestas…………………………………………………………...49
Figura 4.18 Vista Respuestas………………………………………………………………50
Figura 4.19 Diagrama de flujo de Respuestas……………………………………………...50
Figura 4.20 Acciones data………………………………………………………………….51
Figura 4.21 Vista data……………………………………………………………………..51
Figura 4.22 Diagrama de Flujo Data………………………………………………………52
Figura 4.23 Acciones usuarios……………………………………………………………..52
Figura 4.24 Vista usuarios………………………………………………………………….53
Figura 4.25 Diagrama de flujo de Usuarios……………………………………………..…53
Figura 4.26 Acciones área operativa……………………………………………………….54
6
Figura 4.27 Vista área operativa…………………………………………………………...54
Figura 4. 28 Diagrama de flujo Operador………………………………………………….55
Figura 4.29 Pantalla Login………………………………………………………………....56
Figura 4.30 Pantalla Principal usuario Administrador……………………………………..57
Figura 4.31 Pantalla menú Cuestionarios….……………………………………………….57
Figura 4.32 Pantalla Nuevo cuestionario…………………………………………………..58
Figura 4.33 Pantalla modificar Cuestionario………………………………………………58
Figura 4.34 Pantalla Preguntas……………………………………………………………..59
Figura 4.35 Pantalla para ingresar Preguntas………………………………………………60
Figura 4.36 Pantalla ingreso de Respuestas……………………………………………….60
Figura 4.37 Eliminar cuestionarios………………………………………………………...61
Figura 4.38 Pantalla Vista previa………………………………………………………….62
Figura 4.39 Pantalla Extracción de información…………………………………………..62
Figura 4.40 Ejemplo archivo procesado de Datos…………………………………………63
Figura 4.41 Pantalla Usuarios……………………………………………………………...64
Figura 4.42 Pantalla Formulario de datos para usuarios nuevos…………………………..64
Figura 4.43 Pantalla principal usuario Operador…………………………………………..65
Figura 4.44 Pantalla para contestar cuestionario…………………………………………...65
Figura 4.45 Pantalla confirmación de cuestionario contestado…………………………….66
7
OBJETIVO
Desarrollar una aplicación WEB que permita la gestión de cuestionarios, mantenimiento
(altas, bajas y cambios),
consulta de los cuestionarios y explotación de datos de los
resultados obtenidos, para reducir tiempos y costos en la realización de encuestas de
empresas públicas o privadas.
JUSTIFICACIÓN
En estos tiempos donde las empresas compiten con productos y servicios y la calidad de
dichos productos y servicios juega un papel muy importante, dicha calidad esta
representada primeramente como la capacidad de los productos y servicios de satisfacer las
necesidades de los consumidores.
Para conocer esta satisfacción por parte de los consumidores, las empresas se han
encargado de buscar personal u otras empresas quienes se encargan de medir y cuantificar
la satisfacción de los consumidores con respecto a los servicios o productos que ofrecen,
esto lo hace a través de estudios y métodos que les ayudan a conocer en que proporciones
les agrada o desagrada un producto o servicio.
Para muchas empresas el conocer las necesidades de sus consumidores es de vital
importancia, ya que de esto depende de la prosperidad de su empresa o su decaimiento.
En esta actividad se llegan a gastar grandes cantidades tanto las empresas que piden el
estudio, en los casos que sea por parte de una empresa externa como para quienes realizan
el estudio. Para esto se realiza un análisis para determinar que es los que se quiere conocer
del producto o servicio, una vez planteado esto se procede a decidir que método de estudio
es el que más se adecua para la obtención de información de características de los
8
productos o servicios. Para la obtención de esta información la empresas se remiten a los
consumidores, mediante una entrevista en la cual el consumidor externara sus gustos y
preferencias mediante una entrevista por parte de una persona adiestrada previamente y la
cual conoce las características a evaluar y que le serán externadas al consumidor para
conocer su opinión o mediante un cuestionario con preguntas bien estructuradas que
contienen la características a evaluar, en la que se procede solo leyendo y siguiendo las
instrucciones que están escritas en el cuestionarios.
Para la realización de estos cuestionarios puede llevar un tiempo importante, ya que se
realiza primeramente en formato electrónico, el cual debe llevar un formato establecido por
la empresa y en el cual podría llevarse la mayor parte de la construcción de cuestionario,
restando tiempo a la obtención de la información por parte de las personas a cargo de
encuestar y aplazar los resultados del estudio, hasta llegar a la impresión para su posterior
salida.
9
INTRODUCCIÓN
Gracias a la evolución de las nuevas tecnologías informáticas y tecnología en general se
han podido realizar grandes aportaciones en varias ramas. Hemos observado que al
combinarlas se han tenido grandes logros. Muchas de estas aportaciones y logros han tenido
gran impacto beneficiando a las actividades cotidianas en empresas o simplemente a
usuarios particulares, proporcionando una manera más eficaz y eficiente de realizar
actividades. Uno de estos avances con el que compartimos la vida diaria y cada vez es mas
usado es la Internet y todo aquel dispositivo capaz de ingresar a ella como los ordenadores,
teléfonos celulares, PDA‟s (Personal Digital Assistant), reproductores de música. La
Internet a hecho posible cosas que no hubiésemos imaginado antes y permitiendo a los
usuarios compartir información a millones de personas, las cuales pueden acceder a esta
información con respecto a sus prioridades, gustos, deseos, pasatiempo entre otros y
realizando esto en tiempos muy cortos sin importar donde se encuentre la información.
Entre los dispositivos que más destacan en la conexión a la Internet son los ordenadores y
los teléfonos celulares ya que como hemos visto en el caso de los ordenadores cada vez son
más portátiles, sin perder sus características y en algunos casos anexando nuevos avances
tecnológicos que proporcionan una mayor accesibilidad a la información y a la forma de
compartirla y beneficiando a millones de usuarios sin importar la actividad de la persona
gracias a las basta cantidad de aplicaciones que existen y que se siguen generando con
respecto a las necesidades de los usuarios o empresariales y en la telefonía celular los
dispositivos han generado gran cantidad de aplicaciones que ofrecen a los usuarios otra
forma de compartir información así como de acceder a ella mediante estas aplicaciones que
10
se asemejan cada vez más a la de los ordenadores y sin perder la portabilidad con la que ya
contaban.
Uniendo a estos tres avances tecnológicos podemos crear grandes aplicaciones que faciliten
las tareas que realizamos cotidianamente en las empresas. Así como mejor la calidad de los
servicios ofreciendo menores tiempos de realización de las actividades, con menores costos
en procesos y materiales y ayudando a la ecología en la medida que se pueda en el menor
uso de papel en las actividades y procesos.
11
CAPITULO I. SERVIDORES
¿Qué es un servidor?
Como primer punto definiremos que es un servidor, sus características y su uso. Para usos
en informática la palabra “Servidor” es un ordenador que es parte de una red ya sea LAN
(Local Area Network) o MAN (Metropolitan Area Network) que se encarga de proveer
servicio a otros ordenadores denominados “Cliente”. También es utilizado para nombrar a
una aplicación la cual provee algún servicio a otras aplicaciones llamadas “Cliente” con lo
cual haciendo posible que el servidor cumpla la tarea Cliente-Servidor simultáneamente.
Cabe destacar que para que un ordenador sea un servidor, sus componentes no
necesariamente deberán ser de última generación, ya que podríamos usar un ordenador
casero con pocos recursos hasta uno especializado con el máximo de recursos posibles para
dicha tarea. Esto dependerá del uso al cual se destinara dicho servidor.
1.1 Tipos de servidores.
Estos servidores pueden interactuar en un mismo servidor o lo pueden hacer
individualmente. Entre los servidores que podemos encontrar están;
Servidor Dedicado el cual es un ordenador con sistema operativo que solo permite ofrecer
servicios, compartir recursos y no se utiliza como estación de trabajo.
Servidor NO dedicado el cual se encarga ofrecer servicios, compartir recursos y además se
utiliza como estación de trabajo.
Debemos también tomar en cuenta el rol que tienen los equipos en una red, ya que
dependiendo del rol todas pueden ser servidores y clientes al mismo tiempo, a esto se le
denomina Punto a Punto (Peer to Peer).
12
En el caso que exista un servidor y el resto de los ordenadores como clientes, a esta
arquitectura se le conoce como Cliente-Servidor (Client-Server).
Entre estos podemos encontrar diferentes tipos de servidores dependiendo al servicio que
ofrecen como:
1.1.1 Servidor Web
Es llamado así a la aplicación encargada de almacenar y servir páginas Web. Las páginas
almacenadas pueden corresponder aun solo sitio Web o a varios sitios cada uno separado en
diferentes carpetas las cuales se definen en la aplicación para su reconocimiento y posterior
llamado. Para realizar el llamado el servidor esta en ejecución continua en espera de la
petición de algún cliente mediante un navegador Web, este navegador Web será el
encargado de interpretar el código HTML (Hyper Text Markup Language) en el cual están
escritas la paginas Web, este código es enviado desde el servidor a través del protocolo
HTTP (HypeText Transfer Protocol) y es mostrado en el ordenar cliente. La interpretación
casi en su totalidad es hecha del lado del cliente, en algunos casos es necesario que el
navegador Web del ordenador cliente cuente con pequeñas aplicaciones que son las
encargadas de interpretar pequeñas partes de código escrito en otros lenguajes, pero
también existen aplicaciones que contiene parte de código que es procesado e interpretado
por el servidor y enviado como código HTML mediante el protocolo HTTP para que del
lado del cliente pueda ser visualizado y normalmente utiliza los puertos numero 80 y 8080
para conexiones seguras. Entre los servidores más conocidos tenemos IIS (Internet
Information Services) y Apache. Cabe mencionar que no solo es capaz de almacenar solo
páginas sino también otro tipo de archivos como imágenes, videos, música, documento
etcétera, los cuales pueden ser mostrados o llamados por alguna página Web.
13
Figura 1.1 Navegador y Servidor
Figura 1.2 Incorpora una Base de Datos, Una típica transacción Web con base de datos. Por
ejemplo una petición HTTP, listado de nuestros cuestionarios
14
Figura 1.3 Análisis de la comunicación. Cliente-Servidor
1.1.2 Servidor DNS (Domain Name System)
Es una aplicación encargada de interpretar o traducir los nombres escritos en los
navegadores de los ordenadores Cliente por las direcciones IP (Internet Protocol) de los
servidores así como asociar diferentes tipos de información que refiere a dichos nombres.
Para esto se basa en un sistema jerárquico, el cual se va interpretando de derecha a
izquierda para poder localizar la información, mediante un tipo de etiquetado y su
concatenación que conforma el nombre del dominio. Este etiquetado corresponde a
servidores raíz. Los servidores DNS son de tipo primario, secundario y locales o caché, los
cuales son los encargados de la búsqueda e interpretación de los nombres. Los servidores
15
primarios son lo encargados de almacenar la información de los nombres de dominio, los
secundarios obtienen la información (una copia) de los servidores primarios en caso que
estos fallen y lo servidores locales o caché obtienen información de otro servidor en
respuesta
a consultas de los servidores DNS primarios y secundarios las cuales son
almacenadas por un tiempo determinado en estos servidores, esto se hace para un mayor
eficiencia y reducción del tráfico de los servidores DNS primarios y secundarios. Para
realizar las consultas los servidores pueden ser autorizados y no autorizados, los
autorizados son aquellos que contienen copias de todos los dominios como son los DNS
primarios y secundarios y los no autorizados solo contienen copias de las búsquedas de los
DNS que se han consultado en el pasado y de los cuales se ha recibido una respuesta
autorizada como lo es el DNS caché. Las consultas a los servidores DNS pueden ser de 2
tipos Recursiva e Iterativa, en las consultas recursivas el servidor DNS busca dentro de sus
datos locales incluyendo su caché la mejor respuesta y en la consultas iterativas el servidor
DNS no cuenta con la información así que busca el servidor raíz y repite el proceso hasta
obtener la resolución de la consulta. El sistema funciona en base al protocolo UDP (User
Datagram Protocol) y trabaja sobre el puerto numero 53. Entre los servidores más utilizados
podemos encontrarnos con los siguientes Bind, PowerDNS, MaraDNS, djbdns, pdnsd,
MyDNS, DNS (Windows 2000/2003/2008), dnsmasq.
16
Figura 1.4 Servidor DNS
1.1.3 Servidor Correo
Es una aplicación encargada de enviar y recibir mensajes o correos, estos mensajes pueden
contener solo texto y/o se puede incorporar más información como archivos adjuntos. Para
realizar la tarea de envió y recepción entre un ordenador a otro se basa en un Agente de
Trasferencia de Correos o MTA (Mail Transfer Agent) por sus siglas en ingles. De esta
manera al enviar el un correo mediante un MTA lo recibe otro MTA este correo es tomado
por un MSA (Mail Submission Agent) a través de un MUA (Mail User Agent), este MUA
puede recibir directamente el correo desde otro MUA supliendo y actuando como un MSA.
La parte con la que interactúa el usuario el MUA. Esta transferencia se realiza mediante
protocolos, los cuales cumplen una función especifica. Estos protocolos son SMTP (Send
Mail Transfer Protocol); este protocolo es el encargado de enviar los mensajes ya sea de un
servidor a otro o desde un cliente de correo a un servidor, POP (Post Office Protocol); este
17
protocolo es el encargado de la obtención de los mensajes en un servidor y lo pasa al
usuario de correo y el protocolo IMAP (Internet Message Acces Protocol) es un protocolo
al igual que POP se encarga de la obtención de los mensajes en un servidor y también los
pasa al usuario de correo, pero es mas complejo ya que también permite ver los mensajes
en el servidor sin ser descargados, los puertos que utilizan son; SMTP los puerto numero
25, 587 (Alternativo para clientes de correo) y 465 (SMTPS), POP los puertos numero 110
y 995 (cifrado) y el IMAP los puertos numero 149, 220 (IMAP3) y 993(IMAPS). Entre los
agentes de transferencia (MTA) más conocidos y utilizados nos podemos encontrar con los
siguientes Sendmail, Postfix, Exim, Mdaemon y Microsoft Exchange Server. Y entre los
agentes de correo de usuario (MUA) esta Thunderbird, Evolution, Microsoft Outlook y
Microsoft Express.
1.1.4 Servidor FTP (File Transfer Protocol)
Como su nombre lo indica es un protocolo de transferencia de archivos. Este tipo de
servidor se encarga de almacenar archivos para su intercambio entre distintos ordenadores.
Para que esto sea posible se debe instalar la aplicación en un ordenador destinado a solo
esta tarea o en conjunto con otro tipo de servidor. Una vez instalada la aplicación puede ser
configurada para su acceso, mediante Web o por medio de algún programa FTP. Para el
acceso mediante Web lo único que necesitamos es tener un navegador Web, esto mediante
el protocolo HTTP y el puerto numero 80 (que es quien ve al usuario) actuara como
intermediario en conjunto con los protocolos numero 20 y 21 que maneja el servidor FTP,
el cliente tecleara en la barra de direcciones el protocolo en este caso ftp y el dominio al
que se ingresara en caso que exista.
18
Seguido de esto aparecerá una ventana pidiendo un usuario y una contraseña las cuales
debemos ingresar para poder tener acceso al servidor FTP. En el caso de usar una
aplicación cliente, esta se conecta a través del protocolo FTP para realizar la transferencia,
es necesario registrar en el programa FTP el dominio en el que se desea hacer el
intercambio de archivos así como ingresar el nombre de usuario y contraseña del dominio
registrado. En ambos casos el intercambio de archivos puede ser solo de subida, descargas
o ambos, esto dependerá de los privilegios configurados en cada cuenta de usuarios de FTP.
Para tener acceso puede estar configurado con acceso anónimo, invitado y como usuario.
En el caso que un servidor este configurado como anónimos, se permite tener acceso sin
tener una cuenta de usuario, solo se teclea en el login “anonymous” y se tendrá acceso a los
archivos. En el acceso como usuario, el servidor contara con información de las diferentes
cuentas registradas en el equipo que podrán tener acceso a él, esto nos ayuda a dar
privilegios para interactuar con los archivos existentes o ingresar nuevos archivos. Y al
intentar establecer la conexión nos pedirá el usuario y la contraseña, los cuales en caso de
contar con ellos se ingresaran para pode acceder al servidor FTP. Los usuarios invitados o
“guest” es una mezcla entre los accesos anteriores, la parte más importante de este acceso
es no perder seguridad en nuestro servidor permitiendo que usuarios mal intencionados
ingresen a otras partes del sistema dañándolo, esto mediante el login y password, y que
incorpore la libertad del los usuarios anónimos pero solo en cierto tipo de archivos y/o
carpetas y con mas privilegios. Para establecer la conexión entre el servidor y el cliente
existen dos modos el modo activo (estándar o PORT debido a que el cliente envía un
comando tipo PORT al servidor por el canal de control al establecer la conexión) y el modo
pasivo (o PASV por que para este caso envía comando tipo PASV al servidor). En ambos
19
modos el cliente es quien establece la conexión mediante el puerto número 21, quien es el
encargado de establecer el canal de control. En modo Activo, el servidor siempre crea el
canal de datos en su puerto numero 20, mientras que en el lado del cliente el canal de datos
se asocia a un puerto aleatorio mayor que el puerto numero 1024. Para ello, el cliente
manda un comando PORT al servidor por el canal de control indicándole el número de
puerto, de manera que el servidor pueda abrirle una conexión de datos por donde se
transferirán los archivos, en el número de puerto especificado. Esto genera problemas de
seguridad y es que la máquina cliente debe estar dispuesta a aceptar cualquier conexión de
entrada en un número de puerto superior al 1024, esto puede generar grandes problemas si
tenemos el equipo conectado a una red insegura como Internet. De hecho, los cortafuegos
que se instalen en el equipo para evitar ataques seguramente rechazarán esas conexiones
aleatorias. Para solucionar esto se desarrolló el modo Pasivo. En este modo cuando el
cliente envía un comando PASV sobre el canal de control, el servidor FTP le indica por el
canal de control, el numero de puerto (mayor a 1023 del servidor. Ej:2040 ) al que debe
conectarse el cliente. El cliente inicia una conexión desde el numero de puerto siguiente al
puerto de control (Ej: 1036) hacia el puerto del servidor especificado anteriormente (Ej:
2040. Antes de cada nueva transferencia, tanto en el modo Activo como en el Pasivo, el
cliente debe enviar otra vez un comando de control (PORT o PASV, según el modo en el
que haya conectado), y el servidor recibirá esa conexión de datos en un nuevo puerto
aleatorio (si está en modo pasivo) o por el puerto numero 20 (si está en modo activo).
20
1.1.5 Servidor Usuarios
Un servidor de usuarios, es un ordenador el cual se encarga de validar usuarios de una red,
esto al escribir un usuario y una contraseña que pertenezcan a dicha red. Esto le permite
tener acceso a los recursos compartidos de esta red así como a aplicaciones que pueden
ejecutar usuarios autentificados. Para poder acceder los usuarios debe ser dado de alta y
configurado previamente como usuarios del dominio en el servidor de usuarios que
funcionara también como controlador de dominio. Para la gestión de usuarios (alta, baja y
modificación de la cuentas), se debe acceder a la aplicación encargada de esta tarea. Los
usuarios pueden ser de diferentes tipos, cada uno con diferentes privilegios de acceso y
modificación de archivos, esto para incrementar la seguridad dentro y fuera de nuestro
dominio.
Figura 1.5 Servidor de Usuarios
21
1.1.6 Servidor DHCP (Dynamic Host Configuration Protocol)
Este es un servidor encargado de la asignación automática de la configuración a los
ordenadores cliente en una red mediante el protocolo de configuración dinámica de
servidor. Es este servidor el que contiene los rangos de direcciones red IP dinámicas que se
irán asignando a los clientes con forme se realice la solicitud por parte del cliente y en el
servidor existan IP‟s libres para ser asignadas, y con esto saber en todo momento quien
tiene una IP a quien se le asigno después y el tiempo de uso de la IP. Para la asignación de
IP‟s, DHCP incluye tres métodos; Asignación manual o Estática, Asignación automática y
Asignación dinámica. En la asignación estática se configura una única IP la cual tendrá que
conservar para poder tener acceso a una red determinada en caso de que se haga cambio de
una red tendrá que asignarse una nueva IP que contenga los parámetro de la nueva red. En
la asignación automática se configura una dirección IP de forma permanente la primera vez
que se realiza la petición a al servidor DHCP y hasta que el cliente termina de ocupar la
dirección IP. La asignación dinámica es el único método de reutilización de direcciones IP,
para esto el administrador de la red configura previamente un rango de direcciones IP‟s, las
cuales serán solicitadas al servidor DHCP conforme las tarjetas de red de los clientes
enciendan y mediante un procedimiento entre el cliente y el servidor DHCP en un tiempo
controlable se lleva acabo la asignación de la dirección IP. Esto facilita la configuración de
nuevos ordenadores cliente conectados a una red.
22
Figura 1.6 Servidor DHCP
1.1.7 Servidor de Aplicaciones
Un servidor de aplicaciones es un software que proporciona aplicaciones a los equipos o
dispositivos cliente, por lo general a través de Internet y utilizando el protocolo http. Los
servidores de aplicación se distinguen de los servidores web por el uso extensivo del
contenido dinámico y por su frecuente integración con bases de datos.
Además, Un servidor de aplicaciones es un producto basado en un componente que se
encuentra en el plano medio de la arquitectura central de un servidor. Proporciona servicios
de „middleware‟, es decir, trabaja como un intermediario para la seguridad y el
mantenimiento, además de proveer acceso a los datos.
Un servidor de aplicación maneja la mayoría de las transacciones relacionadas con la lógica
y el acceso a los datos de la aplicación (esto se solía llamar „centralización‟, hace algún
tiempo...). La ventaja principal de un servidor de aplicaciones es la facilidad para
desarrollarlas, puesto que éstas no necesitan ser programadas y en cambio, se arman a partir
23
de módulos provistos por el servidor de aplicaciones. Por ejemplo, un wiki es un servidor
de aplicación que permite a los usuarios crear contenido dinámico a partir del ensamble de
los artículos. Más aún, las enciclopedias en la red son un wiki ensamblado que entrega una
enciclopedia almacenada en un sistema de ficheros, cuyos cambios a la enciclopedia se
hallan almacenados en una base de datos.
El término servidor de aplicaciones se aplica a todas las plataformas , y hay muchas variaciones
sobre el tema, por lo que resulta un poco ambiguo. El término se utiliza para referirse a los
servidores de aplicaciones basadas en Web, como el control de las plataformas de comercio
electrónico integrado, sistemas de gestión de contenido de sitios Web y asistentes o
constructores de sitios de Internet. Por esta razón, algunos los llaman también „servidor
web‟.
Uno de los ejemplos destacados es el de Sun Microsystems, plataforma J2EE. Los
servidores de aplicaciones Java se basan en la Plataforma Java ™ 2, Enterprise lEdition
(J2EE ™). J2EE utiliza un modelo de este tipo y, en general, incluye un nivel Cliente, un
nivel Medio, y un EIS. El servidor de tipo Cliente puede contener una o más aplicaciones o
navegadores. La Plataforma J2EE es del Nivel Medio y consiste en un servidor Web y un
servidor EJB. (Estos servidores son también llamados "contenedores".) También podría
haber sub- niveles adicionales en el nivel intermedio. El nivel del Sistema Enterprise
Information System contiene las aplicaciones existentes, archivos y bases de datos.
24
CAPITULO II. BASES DE DATOS
¿Qué es una Base de Datos?
Una base de datos es un almacén que nos permite guardar grandes cantidades de
información de forma organizada para que luego podamos encontrar y utilizar fácilmente.
Una base de datos es un sistema formado por un conjunto de datos almacenados en discos
que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese
conjunto de datos.
Entre las principales características de los sistemas de base de datos podemos mencionar:








Independencia lógica y física de los datos.
Redundancia mínima.
Acceso concurrente por parte de múltiples usuarios.
Integridad de los datos.
Consultas complejas optimizadas.
Seguridad de acceso y auditoría.
Respaldo y recuperación.
Acceso a través de lenguajes de programación estándar.
Figura 2.1 Funcionamiento de una Base de Datos
25
2.1 Modelos de bases de datos
Un modelo de datos es un contenedor de datos y métodos para almacenar y recuperar
información de esos contenedores. Los modelos de datos son abstracciones que permiten la
implementación de un sistema eficiente de base de datos por lo general se refieren a
algoritmos y conceptos matemáticos.
2.1.1 Bases de datos jerárquicas
Éstas son bases de datos que almacenan su información en una estructura jerárquica. Los
datos se organizan en una forma similar a un árbol en donde un nodo padre de información
puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos que no
tienen hijos se los conoce como hojas.
Las bases de datos jerárquicas son especialmente útiles en el caso de aplicaciones que
manejan un gran volumen de información y datos muy compartidos permitiendo crear
estructuras estables y de gran rendimiento. Una de las principales limitaciones de este
modelo es su incapacidad de representar eficientemente la redundancia de datos.
Figura 2.2 Base de Datos Jerárquica
26
2.1.2 Base de datos de red
En este modelo se permite que un mismo nodo tenga varios padres (posibilidad no
permitida en el modelo jerárquico). Ofrece una solución eficiente al problema de
redundancia de datos.
Figura 2.3 Base de Datos de Red
2.1.3 Bases de datos transaccionales
Son bases de datos cuyo fin es el envío y recepción de datos a grandes velocidades, estas
bases son muy poco comunes y están dirigidas por lo general al entorno de análisis de
calidad, datos de producción e industrial, se caracteriza por recolectar y recuperar los datos
a la mayor velocidad, por lo tanto la redundancia y duplicación de información no es un
problema como con las demás bases de datos, permiten algún tipo de conectividad a bases
de datos relacionales.
2.1.4 Bases de datos relacionales
Modelo utilizado para modelar problemas reales y administrar datos dinámicamente. Su
característica fundamental es el uso de relaciones. Estas relaciones podrían considerarse en
forma lógica como conjuntos de datos llamados tuplas. En este modelo, el lugar y la forma
27
en que se almacenen los datos no tienen relevancia (a diferencia de otros modelos como el
jerárquico y el de red). La información puede ser recuperada o almacenada mediante
consultas que ofrecen una amplia flexibilidad y poder para administrar la información.
El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL,
Structured Query Language o Lenguaje Estructurado de Consultas, un estándar
implementado por los principales motores o sistemas de gestión de bases de datos
relacionales. Durante su diseño, una base de datos relacional pasa por un proceso al que se
le conoce como normalización de una base de datos.
Figura 2.4 Base de Datos Relacional
2.1.5 Bases de datos multidimensionales
Son bases de datos para desarrollar aplicaciones muy concretas, como creación de Cubos
OLAP. Los campos o atributos de una tabla pueden ser de dos tipos, o bien representan
dimensiones de la tabla, o bien representan métricas que se desean estudiar.
28
Figura 2.5 Base de Datos Multidimensional
2.1.6 Bases de datos orientadas a objetos
Este modelo es propio de los modelos informáticos orientados a objetos, trata de almacenar
en la base de datos los objetos completos (estado y comportamiento).
Una base de datos orientada a objetos es una base de datos que incorpora todos los
conceptos importantes del paradigma de objetos:
Encapsulación - Propiedad que permite ocultar la información al resto de los objetos,
impidiendo así accesos incorrectos o conflictos.
Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro de una
jerarquía de clases.
Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a distintos
tipos de objetos.
En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los
datos como parte de la definición de la base de datos. Una operación se especifica en dos
partes. La interfaz de una operación incluye el nombre de la operación y los tipos de datos
29
de sus argumentos. La implementación de la operación se especifica separadamente y
puede modificarse sin afectar la interfaz. Los programas de aplicación de los usuarios
pueden operar sobre los datos invocando a dichas operaciones a través de sus nombres y
argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse
independencia entre programas y operaciones.
Figura 2.6 Base de Datos Orientada a Objetos
2.1.7 Bases de datos documentales
Permiten la indexación a texto completo, y en líneas generales realizar búsquedas más
potentes.
2.1.8 Bases de datos deductivas
Un sistema de base de datos deductiva, es un sistema de base de datos que permite hacer
deducciones a través de inferencias. Se basa en reglas y hechos que son almacenados en la
base de datos.
2.2 Sistema de Gestión de Base de Datos (SGBD)
Los Sistemas de Gestión de Bases de Datos (en inglés DataBase Management System) son
un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el
30
usuario y las aplicaciones que la utilizan. Se compone de un lenguaje de definición de
datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta.
Figura 2.7 Componentes del SGBD
2.3 Entidad-Relación
Los diagramas o modelos entidad-relación (denominado por su siglas, ERD “Diagram
Entity relationship”) son una herramienta para el modelado de datos de un sistema de
información. Estos modelos expresan entidades relevantes para un sistema de información,
sus inter-relaciones y propiedades.
31
Figura 2.8 Entidad - Relación
Cardinalidad de las Relaciones: El diseño de relaciones entre las tablas de una base de
datos puede ser la siguiente:
Relaciones de uno a uno: una instancia de la entidad A se relaciona con una y solamente
una de la entidad B.
Figura 2.9 Relación uno a uno
32
Relaciones de uno a muchos: cada instancia de la entidad A se relaciona con varias
instancias de la entidad B.
Figura 2.10 Relación uno a muchos
Relaciones de muchos a muchos: cualquier instancia de la entidad A se relaciona con
cualquier instancia de la entidad B.
33
Figura 2.11 Relación muchos a muchos
2.4 Estructura de una Base de Datos
Una base de datos, con el fin de ordenar la información de manera lógica, posee un orden
que debe ser cumplido para acceder a la información de manera coherente. Cada base de
datos contiene una o más tablas, que cumplen la función de contener los campos.
Por consiguiente una base de datos posee el siguiente orden jerárquico:




Tabla
Campos
Registros
Lenguaje
2.5 MYSQL
MySQL es un sistema de gestión de base de datos relacional, multihilo y multiusuario
desarrollado como software libre y gestionado por distintos lenguajes de programación.
Permite la creación de cualquier sistema de registro de usuarios y funcionalidades
avanzadas de un proyecto WEB. Utiliza un sistema de administración relacional de bases
34
de datos, archiva datos en tablas separadas en vez de colocar todos los datos en un gran
archivo lo que permite flexibilidad y velocidad. Las tablas están conectadas por relaciones
definidas
que
hacen
posible
combinar
datos
de
diferentes
tablas.
Existen varias APIs que permiten acceder a las bases de datos MySQL, incluyendo C, C++,
C#, Pascal, Delphi (via dbExpress), Eiffel, Smalltalk, Java (con una implementación nativa
del driver de Java), Lisp, Perl, PHP, Python, Ruby,Gambas, REALbasic (Mac y Linux),
(x)Harbour (Eagle1), FreeBASIC, y Tcl cada uno de estos utiliza una API específica.
También existe un interfaz ODBC, llamado MyODBC que permite a cualquier lenguaje de
programación que soporte ODBC comunicarse con las bases de datos MySQL. También se
puede acceder desde el sistema SAP, lenguaje ABAP.
35
CAPITULO III. LENGUAJES DE PROGRAMACION WEB
Un lenguaje de programación es un idioma diseñado para expresar comandos que interprete
una maquina. Pueden usarse para crear programas que controlen el comportamiento físico y
lógico de una máquina, expresar algoritmos con precisión, o como modo de comunicación
humana. Está formado de un conjunto de símbolos y reglas sintácticas y semánticas que
definen
su
estructura
y
el
significado
de
sus
elementos
y
expresiones
Con el comienzo de Internet y la programación Web, se desfasaron los diseños gráficos
tradicionales, con lo que se empezaron a diseñar interfaces concretas para este medio,
buscando ficheros pequeños para facilitar la carga de los mismos. La programación Web se
orientaba a un diseño muy cargado e interactuando con el usuario, mientras que al empezar
a competir con millones de Web se ha optado más por el diseño sencillo y de fácil
comprensión.
3.1 HTML
Es un lenguaje estático para el desarrollo de sitios Web (HyperText Markup Language, en
español Lenguaje de Marcas Hipertextuales). Es el lenguaje de marcado predominante para
la elaboración de páginas web, es usado para describir la estructura y el contenido en forma
de texto, así como para complementar el texto con objetos tales como imágenes. HTML se
escribe en forma de etiquetas. HTML puede incluir un script, el cual puede afectar el
comportamiento de navegadores Web y otros procesadores de HTML.
HTML también es usado para referirse al contenido del tipo de MIME text/html o todavía
más ampliamente como un término genérico para el HTML, ya sea en forma descendida del
XML o en forma descendida directamente de SGML .
36
HTML utiliza etiquetas o marcas, que consisten en breves instrucciones de comienzo y
final, mediante las cuales se determinan la forma en la que debe aparecer en su navegador
el texto, así como también las imágenes y los demás elementos, en la pantalla del
ordenador.
El diseño en HTML aparte de cumplir con las especificaciones propias del lenguaje debe
respetar unos criterios de accesibilidad web, siguiendo unas pautas, o las normativas y leyes
vigentes en los países donde se regule dicho concepto.
3.2 PHP
Es un lenguaje de programación utilizado para la creación de sitio web. PHP (PHP
Hypertext Pre-processor ).
PHP es un lenguaje de script interpretado en el lado del servidor utilizado para la
generación de páginas web dinámicas, embebidas en páginas HTML y ejecutadas en el
servidor. No necesita ser compilado para ejecutarse. Para su funcionamiento necesita tener
instalado Apache o IIS con las librerías de PHP. La mayor parte de su sintaxis ha sido
tomada de C, Java y Perl con algunas características específicas. Los archivos cuentan con
la extensión (php).Soporta en cierta medida la orientación a objeto. Clases y herencia. Es
un lenguaje multiplataforma: Linux, Windows, entre otros. Capacidad de conexión con la
mayoría de los manejadores de base de datos: MysSQL, PostgreSQL, Oracle, MS SQL
Server, entre otras.
Es capaz de acceder a archivos, ejecutar comandos y abrir conexiones de red en el servidor.
Estas propiedades hacen que cualquier cosa que sea ejecutada en un servidor web sea
insegura por naturaleza.
37
Su diseño está orientado a facilitar la creación de página Web, es posible crear aplicaciones
con una interfaz gráfica para el usuario, también puede ser usado desde la línea de órdenes,
Cuando el cliente hace una petición al servidor para que le envíe una página Web, el
servidor ejecuta el intérprete de PHP. Éste procesa el script solicitado que generará el
contenido de manera dinámica. El resultado es enviado por el intérprete al servidor, quien a
su vez se lo envía al cliente. Mediante extensiones es también posible la generación de
archivos PDF, Flash, así como imágenes en diferentes formatos.
Permite la conexión a diferentes tipos de servidores de bases de datos tales como MySQL,
Postgres, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird y SQLite. Tiene la
capacidad de ser ejecutado en la mayoría de los sistemas operativos, tales como UNIX (y
de ese tipo, como Linux o Mac OS X) y Windows, y puede interactuar con los servidores
de Web más populares ya que existe en versión CGI, módulo para Apache, e ISAPI. Es
libre, por lo que se presenta como una alternativa de fácil acceso.
Figura 3.1 Funcionamiento PHP
38
3.3 CSS
Las hojas de estilo en cascada (Cascading Style Sheets), CSS es un lenguaje usado para
definir la presentación de un documento estructurado escrito en HTML o XML (y por
extensión en XHTML). El W3C (World Wide Web Consortium) es el encargado de
formular la especificación de las hojas de estilo que servirán de estándar para los agentes de
usuario o navegadores.
La idea que se encuentra detrás del desarrollo de CSS es separar la estructura de un
documento de su presentación.
La información de estilo puede ser adjuntada tanto como un documento separado o en el
mismo documento HTML. Existen tres caminos diferentes para aplicar las reglas de estilo a
una página Web.
Externa
Es una hoja de estilo que está almacenada en un archivo diferente al archivo donde se
almacena el código HTML de la página Web. Esta es la manera de programar más potente,
porque separa completamente las reglas de formateo para la página HTML de la estructura
básica de la página.
Interna
Es una hoja de estilo que está incrustada dentro de un documento HTM se usa cuando se
quiere proporcionar alguna característica a una página Web en un simple fichero
Línea
Es un método para insertar el lenguaje de estilo de página, directamente, dentro de una
etiqueta HTML.
39
3.4 Javascript
Este es un lenguaje interpretado que no requiere compilación. JavaScript es un lenguaje de
scripting basado en objetos, utilizado para acceder a objetos en aplicaciones.
Principalmente, se utiliza integrado en un navegador Web permitiendo el desarrollo de
interfaces de usuario mejoradas y páginas Web dinámicas. Es un dialecto de ECMAScript y
se caracteriza por ser un lenguaje basado en prototipos, con entrada dinámica y con
funciones de primera clase..
JScript es la implementación de ECMAScript de Microsoft, muy similar al JavaScript de
Netscape, pero con ciertas diferencias en el modelo de objetos del navegador que hacen
ambas versiones sean incompatibles con frecuencia.
Javascript puede incluirse en cualquier documento y es compatible con HTML en el
navegador del cliente, ya sea PHP, Active Server Pages, ASP, JSP y SVG. Incluir código
directamente en una estructura HTML es una práctica invasiva y no recomendada. El
método correcto que define la W3C es incluir javascript como un archivo externo, tanto por
cuestiones de accesibilidad, como práctica y velocidad en la navegación.
40
CAPITULO IV. DISEÑO E IMPLEMENTACION
4.1 Requisitos y Análisis
Para los requisitos del Gestor de Cuestionarios, primeramente fue necesario crear una base
de datos, la cual contendrá toda la información correspondiente a los cuestionarios,
información de usuarios y la información de los cuestionarios contestados.
Para ello se realizo un análisis en el cual se considero crear 4 tablas relacionadas, que
contendrán todo lo correspondiente a la creación de cuestionarios y la obtención de la
información que arrojara el cuestionario así como una tabla donde se almacenara los
usuarios que administraran el sistema y los que contestaran cuestionarios dando así mayor
seguridad a nuestro sistema y que no cualquier persona haga uso de la aplicación. Esta
última tabla puede relacionarla, pero dependerá del rubro donde se incorpore el sistema o
puede utilizar una base de datos con usuarios ya existente e incorporarse. Todo esto se
muestra en el diagrama de entidad relación siguiente:
Figura 4.1 Diagrama Entidad-Relación
41
Tres de las tablas corresponden a la información de los cuestionarios así como de sus
preguntas y respuestas, estas tablas son;
Cuestionarios: contendrá toda la información correspondiente al cuestionario, como lo es
el nombre, la fecha de creación y un identificador de cuestionario como lo muestra la
siguiente tabla.
Campo
Tipo
ID_CUEST
int(4)
NOM_CUEST
varchar(80)
FECHA
timestamp
Cotejamiento
Atributos
Nulo
UNSIGNED
No
utf8_general_ci
Predeterminado
Extra
auto_increment
No
No
CURRENT_TIMESTAMP
Figura 4.2 Tabla cuestionarios.
Preguntas: contendrá todas las preguntas de todos los cuestionarios así como la
información que corresponderá a cada una de las preguntas, como lo es la pregunta, el tipo
de pregunta, instrucciones de la pregunta, si es requerido que se conteste, un numero
identificador de pregunta y un numero de relación con algún cuestionario como es
mostrado en la siguiente tabla.
Campo
Tipo
Cotejamiento
Nulo
Extra
ID_PREG
int(4)
No
ID_CUEST
int(4)
No
PREGUNTA
varchar(400)
utf8_general_ci
No
INSTRUCCIONES
varchar(200)
utf8_general_ci
Sí
NULL
REQ
tinyint(1)
Sí
NULL
TIPO
set('TEXT', 'CHECKBOX',
'RADIO')
utf8_general_ci
auto_increment
No
Figura 4.3 Tabla preguntas
Respuestas: contendrá todas las respuestas y la información que corresponda como lo es
un identificador de respuesta, un identificador que se relaciona con la pregunta, un valor de
respuesta y el texto de la respuesta.
42
Campo
Tipo
Cotejamiento
Nulo
ID_RESP
int(4)
No
ID_PREG
int(4)
No
RESPUESTA
varchar(40)
VALOR
tinyint(4)
utf8_general_ci
Predeterminado
Extra
auto_increment
No
Sí
NULL
Figura 4.4 Tabla respuestas
La cuarta tabla de cuestionarios son los resultados del cuestionario:
Data: contendrá la información proveniente del cuestionario contestado como lo es los
identificadores de cuestionario, pregunta y respuesta, así como el valor de dicha respuesta y
un campo de data donde se registrara el texto de la respuesta en el caso que sea cerrada
tendrá el texto de la respuesta mostrado en pantalla y en caso que corresponda a una
pregunta abierta, contendrá todo lo escrito por la persona que contesta.
Campo
Tipo
Cotejamiento
Nulo
ID_REGIS
int(4)
No
ID_PREG
int(4)
No
ID_RESP
int(4)
No
ID_CUEST
int(4)
No
VALOR
smallint(6)
Sí
DATA
varchar(400)
utf8_general_ci
Predeterminado
Extra
auto_increment
NULL
No
Figura 4.5 Tabla data
Nuestra quinta tabla es la de usuarios: esta tabla contendrá a los usuarios que podrán
acceder al sistema, ya sea en la administración, como en la sección donde se contestaran los
cuestionarios. Tendrá la información como el nombre de usuario, contraseña y un
identificador de usuario.
Campo
Tipo
Cotejamiento
Atributos
Nulo
ID_USUARIO
int(4)
USUARIO
varchar(150)
utf8_general_ci
No
PASS
varchar(20)
utf8_general_ci
No
set('ADMIN', 'USER')
utf8_general_ci
No
TIPO
No
Extra
auto_increment
Figura 4.6 Tabla usuarios
43
4.2 Diseño del Sistema
Se considero que el sistema debía estar dividido en dos partes, una para quien se hará cargo
de la gestión de los cuestionarios, la explotación de la información y la administración de
los usuarios y para quienes solo contestaran cuestionarios, con esto dotando al sistema de
mayor seguridad para intrusiones de personas malintencionadas. Para ello creamos una
pagina con un formulario, esta pagina esta encargada de obtener la información, para que se
realice una consulta a nuestra base de datos y verificar que existe el usuario, en caso de
existir, ver que tipo de usuario es y direccionarlo a su sección, en caso contrario no dejara
en esta pagina sin lograr ingresar al sistemas.
Una vez verificada la existencia del usuario se crea una variable de sesión y si este es
administrador se direccionara a la página principal de la administración de nuestro sistema
donde se encontrara con los siguientes menús.
LOGIN
Administrador
Operador
Administrador
Cuestionarios
Data
Operador
Salir
Contestar
Salir
principal.php
Autenticar
contesta_cuestionario.php
.
Autenticar
Siguiente
Regresa
Figura 4.7 Vista Login
44
Administración del Sistema
Figura 4.8 Menús administración del sistema
Si el usuario es tipo user, se direccionara a la sección de la operación del sistema, que es
donde se selecciona el cuestionario y se contesta.
Operación del Sistema
Figura 4.9 Menús operación del sistema
El siguiente diagrama de flujo muestra lo que ocurre en el Login;
45
Login
NO
Usuario
registrado
SI
Principal
Administrador
Tipo
usuario
Operador
Elige
cuestionario
Figura 4.10 Diagrama de flujo Login
Como ya se menciono la sección de administración contiene un menú con diferentes
opciones y que describiremos a continuación.
En el menú cuestionarios se pensó que debería contener todo aquello relacionado con la
gestión de los cuestionarios y debería de ser secuencial para que el sistema sea sencillo,
como lo puede ilustrar la figura 4.11:
Figura 4.11.- Acciones cuestionarios
46
Con esto visualizamos como seria la vista de este menú en la figura 4.12:
Figura 4.12 Vista cuestionarios
Y para seguir la secuencia de la información se creo el siguiente un diagrama de flujo que
nos muestra como, la información es requerida, si se encuentra es procesada y almacenada.
Preguntas
Cuestionarios
Nuevo
Modificar
Registra datos de
cuestionario
Registra cambios
del cuestionario
Almacena datos
Almacena datos
Confirmación
de
cuestionario
registrado
Confirmación
de cambios
Eliminar
Elimina usuario en
la BD
Respuestas
Vista previa
Muestra vista
previa del
cuestionario
Figura 4.13 Diagrama de flujo Cuestionarios
47
Una vez creado el cuestionario, se procede a crear las preguntas para, así que se
seleccionara el cuestionario y damos clic en preguntas y nos enviara a una página donde se
podrá gestionar lo referente a las preguntas, tal como se muestra en la figura 4.14.
Figura 4.14 Acciones preguntas
Al igual que en cuestionarios se creo una vista como guía, la cual contendrá las respuestas
ingresadas y botones para la gestión como se puede ver en la figura 4.15.
Figura 4.15 Vista preguntas
Basándonos en el siguiente diagrama de flujo para procesar y almacenar la información.
48
Cuestionarios
Preguntas
Respuestas
Nuevo
Modificar
Eliminar
Registra datos de
pregunta
Registra cambios
en pregunta
Elimina pregunta
Almacena datos
Almacena datos
Confirmación
de pregunta
registrada
Confirmación
de cambios
Figura 4.16 Diagrama de flujo Preguntas
Ya con las preguntas creadas pasaremos a crear las respuestas a cada una de las preguntas,
esta parte puede ser como el usuario lo considere mas conveniente ya que puede crear las
respuestas después de ingresar una pregunta y no crear todas las preguntas y después todas
las respuestas. En esta parte solo hará la gestión de las preguntas, aquí es mas simple que
cuestionarios y preguntas como lo vemos en la figura 4.17.
Figura 4.17 Acciones respuestas
49
La vista de esta sección es sencilla y con pocas acciones como lo vemos a continuación
Figura 4.18 Vista respuestas
En su diagrama de flujo se muestra como la información es requerida para ser procesada
Preguntas
Respuestas
Nuevo
Eliminar
Registra datos de
respuesta
Elimina respuesta
Almacena datos
Confirmación
de respuesta
registrado
Figura 4.19 Diagrama de flujo de Respuestas
50
Ahora pasaremos a ver el menú de data este es uno de los mas sencillos, ya que se pensó
que solo tendría una acción la cual es obtener la información de un cuestionario como lo
observamos en las figuras 4.20 y 4.21. Y mostrarla en un archivo separado por comas CSV
(Comma Separated Values), para su posterior análisis de esta información.
Figura 4.20 Acciones data
Figura 4.21 Vista data
El flujo de la obtención de la información lo podemos observar en la imagen siguiente.
51
Data
Seleccionar
cuestionario
Vista previa
Extraer
cuestionario
Genera archivo
Figura 4.22 Diagrama de Flujo Data
El menú de usuarios es sencillo, solo para limitar el acceso, para ello se pensó en una
gestión sencilla como se observa en la figura 4.23 y 4.24. Con una vista similar a los demás
menús.
Figura 4.23 Acciones usuarios
52
USUARIOS
Nuevo
Eliminar
NUEVO
Guardar
Regresar
inserta_usuario .php
Regresar
Siguiente
Regresa
Figura 4.24 Vista usuarios
Con un diagrama de flujo sencillo para procesar e ingresar la información a continuación
Usuarios
Nuevo
Eliminar
Registrar datos
Usuario eliminado de la
Base de Datos
Usuario almacenado en
la Base de Datos
Confirmación
de registro
Figura 4.25 Diagrama de flujo de Usuarios
53
Ahora será el turno de la sección operativa, donde se pensó que fuera lo mas sencillo
posible, donde solo seleccionáramos el cuestionario y posteriormente se procedería a
contestarlo, lo podemos observar en la figura 4.26.
Figura 4.26 Acciones área operativa
La vista para esta parte debería solo contener la selección contesta el cuestionario, esto lo
podemos observar en la figura 4.27.
Figura 4.27 Vista área operativa
54
En ambas secciones se encuentra la opción en el menú de salir, el cual se encargara de
destruir la variable de sesión almacenada en los archivos temporales del ordenador cliente.
Confirmación
de datos
guardados
Elige
cuestionario
Contesta
cuestionario
Almacena respuestas
en Base de Datos
Figura 4. 28 Diagrama de flujo Operador
55
4.3 Implementación
En base al análisis diseñado para el sistema, se obtienen los siguientes resultados del
sistema
En la pantalla principal se encuentra el login (autentificación de usuarios), en esta pantalla
se ingresa el usuario y se define el rol del usuario para enviarlo al modulo correspondiente
del sistema ya sea administrativo u operativo, en caso de no existir el usuario no permite
ingresar al sistema
Figura 4.29 Pantalla Login
En caso de que el usuario tenga perfil Administrador , se muestra la siguiente pantalla en la
cual se tiene el menú Cuestionarios , Data y Usuarios
56
Figura 4.30 Pantalla Principal usuario Administrador
En la opción de cuestionarios se tienen las opciones: nuevo, modificar, eliminar, crear
preguntas (acceso al menú preguntas) y vista previa
Figura 4.31 Pantalla menú Cuestionarios
57
Al elegir nuevo cuestionario, que es el primer paso en la creación del cuestionario o
encuesta, se muestra el siguiente formulario en el cual se ingresa el nombre del cuestionario
Figura 4.32 Pantalla Nuevo cuestionario
En el caso de que se requiera modificar datos de un cuestionario existente, se ingresa a la
opción modificar en la cual se guardan los cambios registrados
Figura 4.33 Pantalla modificar Cuestionario
58
Para el modulo de preguntas, se tiene el siguiente menú, en el cual se pueden realizar altas,
bajas y modificaciones de preguntas sobre el cuestionario previamente seleccionado, en
este modulo también se encuentra el acceso a preguntas, sobre la pregunta seleccionada
Figura 4.34 Pantalla Preguntas
En la siguiente pantalla se muestra el formulario de los datos que se requieren para ingresar
la pregunta nueva, en este podemos observar que se requiere nombre, instrucciones, tipo de
respuesta y si esta pregunta debe tener carácter obligatorio al responder
59
Figura 4.35 Pantalla para ingresar Preguntas
En la siguiente pantalla observamos el menú de respuesta a ingresar sobre la pregunta
previamente seleccionada, en esta se tienen las opciones de nuevo y eliminar
Figura 4.36 Pantalla ingreso de Respuestas
60
Para eliminar registros, se tiene como ejemplo la siguiente pantalla ya que en esta
observamos como al eliminar un registro, en este caso un cuestionario manda una alerta de
confirmación antes de realizar la acción, cabe mencionar que en el caso de cuestionarios
elimina todos los registros implicados en este, es decir preguntas y respuestas, en el caso de
preguntas elimina también sus respuestas.
Figura 4.37 Eliminar cuestionarios
La pantalla Vista Previa, nos muestra como su nombre lo indica una vista final del
cuestionario que previamente capturamos, al seleccionar el cuestionario deseado, nos
muestra sus preguntas y sus respuestas de los diferentes tipos solicitados, la vista que se
muestra es la pantalla final que vera el usuario operador para contestar el cuestionario
61
Figura 4.38 Pantalla Vista previa
Para la explotación de la información se tiene la opción data en la que se selecciona el
cuestionario del cual se desea obtener la información contestada por los usuarios
Figura 4.39 Pantalla Extracción de información
62
Este es un ejemplo de archivo de un cuestionario del cual se obtuvo información en formato
Excel donde tenemos los ID de preguntas, respuestas y cuestionarios, y el valor asignado
de cada pregunta, así como las respuestas de los usuarios
Figura 4.40 Ejemplo archivo procesado de Datos
En usuarios, administramos los usuarios de la aplicación, en este se dan las altas y bajas
63
Figura 4.41 Pantalla Usuarios
Estos son los datos necesarios para el alta de un usuario, en este se asigna el perfil o rol que
tendrá el usuario
Figura 4.42 Pantalla Formulario de datos para usuarios nuevos
64
Cuando se ingresa al sistema con usuario operador la pantalla principal es en la que se
selecciona el cuestionario que desea ser contestado
Figura 4.43 Pantalla principal usuario Operador
Figura 4.44 Pantalla para contestar cuestionario
65
Al contestar el cuestionario se recibe confirmación de que los datos fueron ingresados a la
base de datos de manera satisfactoria, cabe mencionar que todas las altas del sistema
funcionan de esta manera
Figura 4.45 Pantalla confirmación de cuestionario contestado
66
CONCLUSIONES
El sistema se ha desarrollado para un uso sencillo, dando así la oportunidad de enfocarse en
el análisis y realización de las preguntas y respuestas, las cuales se adecuen a la obtención
de la información deseada. Permitiéndonos así realizar diferentes tipos de cuestionarios,
desde una simple pregunta para una encuesta hasta un estudio de mercado que contiene una
gran numero de preguntas que sean consideradas para la obtención de la información, estas
preguntas pueden ser abiertas o cerradas o la combinación de ambas, permitiéndonos así un
cuestionario más completo y que cubra con las necesidades al momento de realizar un
cuestionario.
Otra de las características importantes del sistema es que permitirían ahorrar tiempos y
costos de procesos, así como la explotación de la información obtenida, los cuales serán
perceptibles desde el primer mes dando como resultado un menor tiempo de entrega de
resultados al personal que se encargara de analizar la información obtenida de los
cuestionarios.
Se puede adaptar a algún sistema ya implantado, solo cumpliendo con características de
plataforma anteriormente mencionados, así como también puede adaptarse a diferentes
aéreas donde se presenten cuestionamientos de sus productos y/o servicios u opinión
pública y así como evaluaciones y diagnósticos.
Con estas características el sistema de gestión de cuestionarios pude posicionarse en un
buen lugar en la recaudación de información vía web, y permitir hacer ahorros de costos,
tiempos y hacer una pequeña contribución al medio ambiente en la menor utilización de
papel y productos perjudícales al medio ambiente como seria el tóner.
67
En la realización de la aplicación hemos, considerado algunos módulos que
complementarían el sistema, como son el envió de cuestionarios a celulares y la recepción
de los cuestionarios contestados para su ingreso a nuestras bases de datos, permitiéndonos
así una mayor movilidad en la obtención de la información avanzando y ayudándonos con
las nuevas tecnologías que día a día presentan mayores aplicaciones.
68
ANEXOS
Código fuente del Sistema de Gestión de Cuestionarios
Index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>LOGIN</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Ingreso a Sistema de Gestión de Encuestas y Cuestionarios</h3>
<form id="form1" name="form1" method="post" action="fn_auth.php">
<!--Inserción de datos para ingreso al sistema-->
<p>Ingresa tu nombre de usuario y contraseña</p>
<table>
<tr>
<td><p>Usuario:</p></td>
<td><input type="text" name="usuario" id="usuario" /></td>
</tr>
<tr>
69
<td><p>Contraseña:</p></td>
<td><input type="password" name="pass" id="usuario" /></td>
</tr>
<tr>
<td><input type="submit" value="Ingresar" /></td>
</tr>
</table>
<br />
</form>
</div>
<div id="footer">Todos los derechos resevados</div>
</div>
</body>
</html>
fn_auth.php
<?php
//Se hace conexión a la BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace una consulta a la tabla de usuarios y ver que usuarios existen
$query = "SELECT * FROM usuarios WHERE USUARIO= '$usuario' && PASS = '$pass'";
$result = mysql_query($query);
$row=mysql_fetch_array($result);
if(mysql_num_rows($result)!=0)
{
//usuario y contraseña validos
switch ($row[TIPO])
{
case "ADMIN":
session_start();
session_register("autentificado");
$autentificado = "si";
70
header("Location: principal.php");
break;
case "USER":
session_start();
session_register("autentificado");
$autentificado = "si";
header("Location: contesta_cuestionario.php");
break;
}
}
else
{
//si no existe lo regresa al logeo
header ("Location: index.php");
}
mysql_free_result($result);
mysql_close();
?>
Principal.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PROYECTO SEMINARIO</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
71
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Inicio</h3>
<p>Sistemas gestor de cuestionarios y encuestas</p>
<p>Esta aplicación esta creada para la ayuda de creación de encuestas y cuestionarios</p>
<p>El uso de esta aplicación permitira a los usuarios enfocarse solo en la creación de dichas encuestas y cuestionarios</p>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos resevados</div>
</div>
</body>
</html>
Cuestionarios.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
72
<title>CUESTIONARIOS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
<!--Función para confirmar si se desea eliminar cuestionario-->
<script language="JavaScript">
function aviso(){
if (!confirm("¿Esta seguro que desea ELIMINAR este cuestionario y todos sus registros?")) {
return false;
}
else {
document.location = url;
return true;
}
}
</script>
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Cuestionarios</h3>
<p>Seleccione un cuestionario y posteriormente la acción que desea realizar con el cuestionario.</p>
<form id="form" name="form" method="post" action="">
<?php
//Se hace la cónexion a la BD//
require_once("fn_conect_mysql.php");
73
db_conect();
//Se hace consulta a la tabla cuestionariios//
$query = "SELECT * FROM cuestionarios";
$result = mysql_query($query);
//Se crea Select y se manda llamar a la variable de la consuta y visualizar los cuestionarios
//existentes en nuestra BD
{
echo "<select name='vista_cuest' size='0'>";
echo "<option selected='selected'>=================Selección de Cuestionarios=================</option>";
while ($row = mysql_fetch_array($result))
{
echo "<option>";
echo "$row[NOM_CUEST]";
echo "</option>";
}
}
mysql_free_result($result);
echo "</select>";
?><br>
<input type="submit" name="cuest_new" id="cuest_new" value="Nuevo"
onclick="this.form.action='nuevo_cuestionario.php'"/>
<input type="submit" name="cuest_new3" id="cuest_new3" value="Modificar"
onclick="this.form.action='modifica_cuestionario.php'"/>
<!--Se genera un link en el boton de borrar hacia la función de confirmación -->
<a href="javascript:;" onclick="aviso(); return false;"> <input type="submit" name="cuest_new3" id="cuest_new5" value="Eliminar"
onclick="this.form.action='borrar.php'"/> </a>
<input type="submit" name="cuest_new4" id="cuest_new4" value="Preguntas" onclick="this.form.action='Preguntas.php'"/>
<input type="submit" name="cuest_new6" id="cuest_new6" value="Vista previa"
onclick="this.form.action='vista_previa.php'"/>
</form>
</div>
<div id="left">
74
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Nuevo_cuestionario.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CUESTIONARIO NUEVO</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
75
<div id="content">
<h3>Nuevo cuestionario</h3>
<!--Ingreso de nuevo cuestionario-->
<form method="post" action="insertar_cuestionario.php">
<p>Ingresa el nombre del cuestionario</p><input name="NOM_CUEST" type="text" />
<p></p><input name= "FECHA" type="hidden" />
<BR /><BR />
<input type="submit" value="Guardar" />
<input type="submit" value="Regresar" onclick="this.form.action='Cuestionarios.php'"/>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechso reservados</div>
</div>
</body>
</html>
Insertar_cuestionario.php
<html>
<head>
<title>INSERTAR NUEVO CUESTIONARIO</title>
</head>
<body>
<h1>Insertar nuevo cuestionario</h1>
76
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Condiciana a la variable de nuevo cuestionario a que si no tiene escrito nada muestre mensaje
if(!$NOM_CUEST)
{
echo "No se han introducido datos";
exit;
}
//Se hace conexión a la BD
db_conect();
//Se realiza la inserción del nuevo cuestionario
$query = "INSERT INTO cuestionarios (NOM_CUEST) values ('$NOM_CUEST')";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Cuestionario introducido en la base de datos.";
?>
<BR />
<form id="form" name="form" method="post" action="Cuestionarios.php">
<input type="submit" value="REGRESAR" onClick="this.form.action='Cuestionarios.php'"/>
</form>
</body>
</html>
Modifica_cuestionario.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
77
<title>MODIFICA CUESTIONARIO</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Modificación de cuestionario</h3>
<!--Ingreso de nuevos datos para modificar cuestionario -->
<form method="post" action="modificar_cuestionario.php">
<?
require_once("fn_conect_mysql.php");
db_conect();
//Consulta del ID del cuestionario para realizar la actualización de la información//
echo "Nombre del cuestionario a modificar es: $vista_cuest";
$query = "SELECT ID_CUEST FROM cuestionarios WHERE NOM_CUEST = '$vista_cuest' ";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
echo "<br />El No. del cuest en MySQL es: $row[ID_CUEST] ";
echo "<input name='MOD_CUEST' type='hidden' value = '$row[ID_CUEST]'/>";
?>
<p>Ingresa el nuevo nombre del cuestionario:</p><input name="NEW_NOM_CUEST" type="text" />
<BR /><BR /><input type="submit" value="Modificar" />
<input type="submit" value="Regresar" onclick="this.form.action='Cuestionarios.php'"/>
</form>
78
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Modificar_cuestionarios.php
<html>
<head>
<title>MODIFICAR CUESTIONARIO</title>
</head>
<body>
<h1>Modificación de cuestionario</h1>
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Condiciana a la variable de nuevo cuestionario a que si no tiene escrito nada muestre mensaje
if(!$NEW_NOM_CUEST)
{
echo "No se han introducido datos";
exit;
}
//Se hace conexión a la BD
79
db_conect();
//Se realiza la actualización del cuestionario seleccionado
$query = "UPDATE cuestionarios SET NOM_CUEST = '$NEW_NOM_CUEST' WHERE ID_CUEST = '$MOD_CUEST' ";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Cuestionario introducido en la base de datos.";
?>
<form id="form" name="form" method="post" action="Cuestionarios.php">
<input type="submit" name="cuest_new" id="cuest_new" value="REGRESAR" />
</form>
</body>
</html>
Vista_previa.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>VISTA PREVIA</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
80
</div>
<div id="content">
<h3>Vista previa</h3>
<?php
//Se hace conexion con MySQL
require_once("fn_conect_mysql.php");
db_conect();
//Muestra el nombre de cuestionario seleccionado.
echo "Nombre del cuestionario seleccionado: $vista_cuest";
echo "<br>";
//Se realiza una consulta de los cuestionarios para saber su ID de cuestionario y utilizarlo en un campo hidden y pasarlo a una variable
para ser procesado y de referencia para una consulta.
$query1 = "SELECT ID_CUEST, NOM_CUEST FROM cuestionarios WHERE NOM_CUEST = '$vista_cuest' ";
$res = mysql_query($query1);
$row = mysql_fetch_array($res);
echo "Número del cuestionario seleccionado: $row[ID_CUEST]";
echo "<input name='vista_cuest' type='hidden' value = '$row[NOM_CUEST]'/>";
echo "<br>"; echo "<br>";
//Se realiza una consula a la tabla de preguntas delimitada
relacionadas a ese cuestionario.
por ID de cuestionario que nos devolvera todas las preguntas
$query2 = "SELECT ID_PREG, PREGUNTA FROM preguntas WHERE ID_CUEST = '$row[ID_CUEST]' ";
$res2 = mysql_query($query2);
//Consultas prueba para scar la respuestas.
/*
$query3 = "SELECT * FROM CUESTIONARIOS AS CUEST LEFT JOIN PREGUNTAS AS PREG ON
CUEST.ID_CUEST= PREG.ID_CUEST
LEFT JOIN RESPUESTAS AS RESP ON PREG.ID_PREG=RESP.ID_PREG WHERE NOM_CUEST = '$vista_cuest'";*/
/*$query3 = "SELECT RESPUESTA, TIPO, PREG.ID_PREG, RESP.ID_PREG FROM PREGUNTAS AS PREG LEFT JOIN
RESPUESTAS AS RESP ON PREG.ID_PREG = RESP.ID_PREG WHERE ID_CUEST = '$row[ID_CUEST]' ORDER BY
RESP.ID_PREG";*/
//$res3 = mysql_query($query3);
//Ciclo para insertar preguntas mediante la consulta a MySQL de la tabla de pregunta
for($i=1;$i<=$row2 = mysql_fetch_array($res2);$i++)
81
{
echo "<br>";
echo "$i.-$row2[PREGUNTA]";
echo "<br>";
echo "<br>";
//Se realiza una consula a las tablas que estan relacionadas con el cuestionario seleccionado.
$query3 = "SELECT RESPUESTA, TIPO, PREG.ID_PREG, RESP.ID_PREG FROM PREGUNTAS AS PREG LEFT JOIN
RESPUESTAS AS RESP ON PREG.ID_PREG = RESP.ID_PREG WHERE PREG.ID_PREG = '$row2[ID_PREG]' ORDER BY
RESP.ID_PREG";
$res3 = mysql_query($query3);
//
for($j=1;($j<= $row3=mysql_fetch_array($res3))&&($row2[ID_PREG]==$row3[ID_PREG]);$j++)
//Ciclo para insertar respuestas mediante la consulta a MySQL de las tablas relacionadas al cuestionario seleccionado.
for($j=1;$j<= $row3=mysql_fetch_array($res3);$j++)
{
//Dependiendo del tipo de pregunta se mostraran las respuestas que contenga la pregunta
switch ($row3[TIPO])
{
case "TEXT":
echo "$row3[RESPUESTA]"; echo "<input name='$row3[PREGUNTA]' type='text' /> ";
break;
case "RADIO":
echo "$row3[RESPUESTA]"; echo "<input name='$row3[PREGUNTA]' type='radio' /> ";
break;
case "CHECKBOX":
echo "$row3[RESPUESTA]"; echo "<input name='$row3[PREGUNTA]' type='checkbox' /> ";
break;
}
echo "<br>";
}
}
//
mysql_free_result($res1);
?>
82
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Borrar.php
<html>
<head>
<title>ELIMINAR CUESTIONARIO</title>
</head>
<body>
<h1>Cuestionario eliminado</h1>
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Se hace conexión a la BD
db_conect();
//Se realiza consulta para eliminar preguntas, respouestas que petenescan al cuestionario seleccionado así como la eliminación del
cuestionario.
$query = "DELETE cuestionarios, preguntas, respuestas
FROM ( cuestionarios
LEFT OUTER JOIN preguntas ON cuestionarios.id_cuest = preguntas.id_cuest
83
)
LEFT OUTER JOIN respuestas ON preguntas.id_preg = respuestas.id_preg
WHERE cuestionarios.nom_cuest = '$vista_cuest' ";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Registros eliminados en la base de datos.";
?>
<form id="form2" name="form2" method="post" action="Cuestionarios.php">
<input type="submit" value="Regresar" />
</form>
</body>
</html>
Preguntas.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PREGUNTAS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
<!--Función para confirmar si se desea eliminar pregunta-->
<script language="JavaScript">
function aviso(){
if (!confirm("¿Esta seguro que desea ELIMINAR esta pregunta y todos sus registros?")) {
return false;
}
else {
document.location = url;
84
return true;
}
}
</script>
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Ingreso de preguntas</h3>
<form id="form" name="form" method="post" action="">
<?php
//Se hace la cónexion a la BD//
require_once("fn_conect_mysql.php");
db_conect();
//Se hace consulta a la tabla cuestionarios para crear las preguntas dentro del cuestionario seleccionado//
echo "Nombre del cuestionario seleccionado: $vista_cuest";
echo "<br>";
$query1 = "SELECT ID_CUEST, NOM_CUEST FROM cuestionarios WHERE NOM_CUEST = '$vista_cuest' ";
$res = mysql_query($query1);
$row = mysql_fetch_array($res);
echo "Numero del cuestionario seleccionado: $row[ID_CUEST]";
echo "<input name='vista_cuest' type='hidden' value = '$row[NOM_CUEST]'/>";
echo "<br>"; echo "<br>";
//Se hace consulta a la tabla de preguntas para conocer si ya hay preguntas//
85
$query = "SELECT * FROM PREGUNTAS WHERE ID_CUEST = '$row[ID_CUEST]' ";
$result = mysql_query($query);
//Se crea Select con las preguntas existentes en la BD que correspondan al cuestionario seleccionado
{
echo "<select name='vista_preg' size='10'>";
echo "<option value= '0' selected='selected'>=================Seleccion de Pregunta=================</option>";
while ($row = mysql_fetch_array($result))
{
echo "<option>";
echo "$row[PREGUNTA]";
echo "</option>";
}
}
mysql_free_result($result);
echo "</select>";
?>
<br />
<input type="submit" name="cuest_new" id="cuest_new" value="Nueva" onclick="this.form.action='nuevo_preguntas'"/>
<input type="submit" name="cuest_new" id="cuest_new" value="Modificar" onclick="this.form.action='modifica_preguntas.php'"/>
<!--Se crea link en el boton borrar hacia la función de confirmación -->
<a href="javascript:;" onclick="aviso(); return false;"> <input type="submit" name="cuest_new3" id="cuest_new5"
value="Eliminar" onclick="this.form.action='borrar_preguntas.php'"/> </a>
<input type="submit" name="cuest_new" id="cuest_new" value="Respuestas" onclick="this.form.action='Respuestas.php'"/>
<BR /><BR />
<input type="submit" value="Regresar" onclick="this.form.action='Cuestionarios.php'"/>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
86
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Nuevo_preguntas.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>INGRESO PREGUNTAS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Ingreso de preguntas</h3>
<form id="form" name="form" method="post" action="">
87
<?
//Se hace conexión a la BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace consulta a la tabla de cuestionarios para tener obtener el ID de cuestionario
echo "Nombre del cuestionario al que se agregaran las preguntas es: $vista_cuest";
$query = "SELECT ID_CUEST, NOM_CUEST FROM cuestionarios WHERE NOM_CUEST = '$vista_cuest' ";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
echo "<br />El No. del cuest en MySQL es: $row[ID_CUEST] ";
echo "<input name='vista_cuest' type='hidden' value = '$row[NOM_CUEST]'/>";
echo "<input name='AGRE_ID_CUEST' type='hidden' value = '$row[ID_CUEST]'/>";
?>
<!--Se realiza el ingreso de la indormación de la pregunta -->
<p>Ingresa la pregunta:</p>
<input name="PREGUNTA" type="text" />
<p>Ingresa instrucciones para esta pregunta:</p>
<textarea name="INSTRUCCIONES" cols="50" rows="3"></textarea>
<br />
<p>Selecciona el tipo de pregunta</p>
<select name="TIPO">
<option>text</option>
<option>checkbox</option>
<option>radio</option>
</select>
<p>Seleccionar si la pregunta es requerida</p><input name="REQ" type="checkbox" enable id="REQ" />
<br />
<input type="submit" name="cuest_new" id="cuest_new" value="Guardar" onclick="this.form.action='insertar_preguntas.php'"/>
<input type="submit" value="Regresar" onclick="this.form.action='Preguntas.php'"/>
</form>
</div>
88
<div id="left">
<p fontcolor:white>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Insertar_preguntas.php
<html>
<head>
<title>INSERTAR NUEVA PREGUNTA</title>
</head>
<body>
<h1>Insertar nueva pregunta</h1>
<form id="form2" name="form2" method="post" action="Preguntas.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Condiciana a la variable de ID del cuestionario, de pregunta y tipo a que si no tiene escrito nada muestre mensaje
if(!$AGRE_ID_CUEST || !$PREGUNTA || !$TIPO)
{
echo "No se han introducido datos";
exit;
}
//Se hace conexión a la BD
89
db_conect();
//Se hace consulta para mostrar el nombre y el ID del cuestionario al que se le agregara la pregunta
echo "Nombre del cuestionario al que se agregaran las preguntas es: $AGRE_ID_CUEST";
$query = "SELECT ID_CUEST, NOM_CUEST FROM cuestionarios WHERE ID_CUEST = '$AGRE_ID_CUEST' ";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
echo "<input name='vista_cuest' type='hidden' value = '$row[NOM_CUEST]'/>";
//Se realiza la inserción de la nueva pregunta a la tabla preguntas
$query = "INSERT INTO preguntas (ID_CUEST, PREGUNTA, INSTRUCCIONES, REQ, TIPO) values ('$AGRE_ID_CUEST',
'$PREGUNTA', '$INSTRUCCIONES', '$REQ', '$TIPO')";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo "<br>";
echo mysql_affected_rows()." Pregunta introducida en la base de datos.";
?>
<input type="submit" name="cuest_new" id="cuest_new" value="REGRESAR" />
</form>
</body>
</html>
Modifica_preguntas.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MODIFICAR PREGUNTAS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
90
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Ingreso de modificación de preguntas</h3>
<form id="form" name="form" method="post" action="modificar_preguntas.php">
<?php
//Se hace conexión a la BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace consulta a la tabla de preguntas obteniendo el ID de pregunta para actualizar la información
echo "Pregunta seleccionada: $vista_preg";
$query1 = "SELECT ID_PREG FROM preguntas WHERE PREGUNTA = '$vista_preg' ";
$res = mysql_query($query1);
$row = mysql_fetch_array($res);
echo"<br>";
echo "No. de pregunta seleccionado: $row[ID_PREG]";
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
echo "<input name='MOD_PREG' type='hidden' value = '$row[ID_PREG]'/>";
?>
<!--Se ingresa la nueva información para la pregunta seleccionada -->
<p>Ingresa pregunta:</p>
<input name="NEW_PREGUNTA" type="text" />
<p>Ingresa intrucciones para la pregunta:</p>
<textarea name="NEW_INSTRUCCIONES" cols="60" rows="5"></textarea>
<br />
91
<p>Selecciona el tipo de pregunta:</p>
<select name="NEW_TIPO">
<option>text</option>
<option>checkbox</option>
<option>radio</option>
</select>
<p>Selecciona si la pregunta sera requerida:</p>
<input name="NEW_REQ" type="checkbox" enable value="" />
<br />
<input type="submit" name="cuest_new" id="cuest_new" value="Modificar" />
<input type="submit" name="cuest_new" id="cuest_new" value="Regresar" onclick="this.form.action='Preguntas.php'";/>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Modificar_preguntas.php
<html>
<head>
<title>MODIFICAR PREGUNTAS</title>
</head>
92
<body>
<h1>Modificación de pregnta</h1>
<form id="form" name="form" method="post" action="Preguntas.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Condiciana a la variable de pregunta y tipo a que si no tiene escrito nada muestre mensaje
if(!$NEW_PREGUNTA || !$NEW_TIPO)
{
echo "No se han introducido datos";
exit;
}
//Se hace conexión a la BD
db_conect();
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
//Se realiza la actualización de la pregunta seleccionada
$query = "UPDATE preguntas SET PREGUNTA = '$NEW_PREGUNTA', INSTRUCCIONES = '$NEW_INSTRUCCIONES', REQ =
'$NEW_REQ', TIPO = '$NEW_TIPO' WHERE ID_PREG = '$MOD_PREG' ";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Pregunta modificada en la base de datos.";
?>
<input type="submit" name="cuest_new" id="cuest_new" value="Regresar" />
</form>
</body>
</html>
Borrar_preguntas.php
<html>
<head>
<title>ELIMINAR PREGUNTA</title>
93
</head>
<body>
<h1>Pregunta eliminada</h1>
<form id="form2" name="form2" method="post" action="Preguntas.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Se hace conexión a la BD
db_conect();
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
//Se realiza consulta para eliminar respuestas que petenescan a la pregunta seleccionada así como la eliminación de la pregunta.
$query = "DELETE preguntas, respuestas
FROM preguntas
LEFT OUTER JOIN respuestas ON preguntas.id_preg = respuestas.id_preg
WHERE preguntas.pregunta = '$vista_preg' ";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Registros eliminados en la base de datos.";
?>
<input type="submit" value="Regresar" />
</form>
</body>
</html>
Respuestas.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
94
<title>RESPUESTAS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
<!--Función para confirmar si se desea eliminar pregunta-->
<script language="JavaScript">
function aviso(){
if (!confirm("¿Esta seguro que desea ELIMINAR esta respuesta?")) {
return false;
}
else {
document.location = url;
return true;
}
}
</script>
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Ingreso de respuestas</h3>
<form method="post" action="">
<?php
//Se hace conexión a la BD
require_once("fn_conect_mysql.php");
db_conect();
95
//Se hace consulta a la tabla preguntas obteniendo el ID de pregunta y realizar la insercion de las respuestas en la pregunta seleccionada//
echo "Pregunta seleccionada: $vista_preg";
echo "<br>";
$query1 = "SELECT ID_PREG, PREGUNTA FROM preguntas WHERE PREGUNTA = '$vista_preg' ";
$res = mysql_query($query1);
$row = mysql_fetch_array($res);
echo "No. de pregunta: $row[ID_PREG]";
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
echo "<input name='vista_preg' type='hidden' value = '$row[ID_PREG]'/>";
echo "<br>";
echo "<br>";
//Se hace consulta a la tabla de respuestas para conocer si ya hay respuestas//
$query = "SELECT * FROM RESPUESTAS WHERE ID_PREG = '$row[ID_PREG]' ";
$result = mysql_query($query);
//Se crea Select con las respuestas existentes en la BD que correspondan a la pregunta seleccionada
{
echo "<select name='vista_res' size='10'>";
echo "<option value= '0' selected='selected'>=================Selección de Respuesta=================</option>";
while ($row = mysql_fetch_array($result))
{
echo "<option>";
echo "$row[RESPUESTA]";
echo "</option>";
}
}
mysql_free_result($result);
echo "</select>";
?>
<BR />
<input type="submit" value="Agregar" onclick="this.form.action='nuevo_respuestas.php'"/>
<!--Se crea link en el boton borrar hacia la función de confirmación -->
96
<a href="javascript:;" onclick="aviso(); return false;"> <input type="submit" name="cuest_new3" id="cuest_new5" value="Eliminar"
onclick="this.form.action='borrar_respuestas.php'"/> </a>
<input type="submit" value="Regresar" onclick="this.form.action='Preguntas.php'"/>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Nuevo_respuestas.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AGREGAR RESPUESTAS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
97
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Agregar respuesta</h3>
<form method="post" action="">
<?
//Se hace conexión a la BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace una consulta a la tabla de preguntas para obtener el ID de la pregunta y guardar la respuesta en la pregunta seleccionada.
echo "No. de la pregunta seleccionada: $vista_preg";
echo "<br>";
$query1 = "SELECT ID_PREG, PREGUNTA FROM preguntas WHERE ID_PREG = '$vista_preg' ";
$res = mysql_query($query1);
$row = mysql_fetch_array($res);
echo "Nombre de la pregunta seleccionado: $row[PREGUNTA]";
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
echo "<input name='vista_preg' type='hidden' value = '$row[PREGUNTA]'/>";
echo "<input name='agre_id_preg' type='hidden' value = '$row[ID_PREG]'/>";
?>
<p>Ingresa la respuesta:</p><input name="RESPUESTA" type="text" />
<p>Ingresa el valor de la respuesta:</p><input name= "VALOR" type="text" />
<BR /><BR /><input type="submit" value="Guardar" onclick="this.form.action='insertar_respuestas.php'"/>
<input type="submit" value="Regresar" onclick="this.form.action='Respuestas.php'"/>
</form>
</div>
<div id="left">
98
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Insertar_respuestas.php
<html>
<head>
<title>INSERTAR NUEVA RESPUESTA</title>
</head>
<body>
<h1>Insertar nueva respuesta</h1>
<form id="form" name="form" method="post" action="Respuestas.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Condiciana a la variable de pregunta seleccionada y de respuesta a que si no tiene escrito nada muestre mensaje
if(!$vista_preg || !$RESPUESTA)
{
echo "No se han introducido datos";
exit;
}
//Se hace conexión a la BD
db_conect();
99
//Se hace consulta a la tabla preguntas para obtener ID de pregunta
echo "Numero de pregunta al que se agregaran las respuestas es: $agre_id_preg";
$query = "SELECT ID_PREG, PREGUNTA FROM preguntas WHERE ID_PREG = '$agre_id_preg' ";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
echo "<br />El Nombre de pregunta es: $row[PREGUNTA] ";
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
echo "<input name='vista_preg' type='hidden' value = '$vista_preg'/>";
echo "<input name='vista_preg' type='hidden' value = '$row[PREGUNTA]'/>";
//Se realiza la inserción de la nueva respuesta a la tabla respuestas
$query = "INSERT INTO RESPUESTAS (ID_PREG, RESPUESTA, VALOR) values ('$agre_id_preg','$RESPUESTA', '$VALOR')";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Respuesta introducida en la base de datos.";
?>
<input type="submit" name="cuest_new" id="cuest_new" value="Regresar" />
</form>
</body>
</html>
Borrar_respuestas.php
<html>
<head>
<title>BORRAR RESPUESTAS</title>
</head>
<body>
<h1>Respuesta eliminada</h1>
<form id="form2" name="form2" method="post" action="Respuestas.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
100
//Se hace conexión a la BD
db_conect();
//Se hace consulta para obtener ID de pregunta
echo "<input name='vista_cuest' type='hidden' value = '$vista_cuest'/>";
$query2 = "SELECT PREGUNTA, id_preg FROM preguntas WHERE ID_PREG = '$vista_preg' ";
$res = mysql_query($query2);
$row = mysql_fetch_array($res);
echo "<input name='vista_preg' type='hidden' value = '$row[PREGUNTA]'/>";
//Se hace consulta para eliminar el usuario seleccionado
$query = "DELETE FROM respuestas WHERE respuesta = '$vista_res' && id_preg = '$row[id_preg]'";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Registros eliminados en la base de datos.";
?>
<input type="submit" value="Regresar" />
</form>
</body>
</html>
Data.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>EXTRACIÓN DE DATA</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
101
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Extración de información</h3>
<p>Selecciona el cuestinario del que desees obtener la información.</p>
<form id="form" name="form" method="post" action="">
<?php
//Se hace conexión ala BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace una consulta a la tabla de cuestionarios para seleccionar el cuestionario del que sacaremos la información
$query = "SELECT * FROM cuestionarios";
$result = mysql_query($query);
//Se crea select con todos los cuestionarios en la BD
{
echo "<select name='vista_cuest' size='0'>";
echo "<option selected='selected'>=================Selección de Cuestionarios=================</option>";
while ($row = mysql_fetch_array($result))
{
echo "<option>";
echo "$row[NOM_CUEST]";
echo "</option>";
}
}
mysql_free_result($result);
echo "</select>";
102
?>
<input type="submit" name="cuest_new" id="cuest_new" value="Obtener" onclick="this.form.action='obten_csv.php'"/>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Obten_csv.php
<?php
header('Content-type: application/vnd.ms-excel; utf-8');
//header("Content-Type: application/x-octet-stream;");
header("Content-Disposition: attachment; filename= $vista_cuest.csv;");
//header("Pragma: no-cache");
//header("Expires: 0");
//Se hace conexión ala BD
require_once("fn_conect_mysql.php");
db_conect();
$query = "SELECT * FROM CUESTIONARIOS WHERE NOM_CUEST = '$vista_cuest'";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
$query2 = "SELECT * FROM DATA WHERE ID_CUEST = '$row[ID_CUEST]'";
103
$res2 = mysql_query($query2);
$campos = mysql_num_fields($res2);
$i=0;
while($i<$campos){
echo mysql_field_name ($res2, $i);
echo ",";
$i++;
}
echo "\n";
while($row2=mysql_fetch_array($res2)){
for($j=0; $j<$campos; $j++) {
echo $row2[$j].",";
}
echo "\n";
}
?>
Usuarios.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>USUARIOS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
<!--Función para confirmar si se desea eliminar usuario-->
<script language="JavaScript">
function aviso(){
if (!confirm("¿Esta seguro que desea ELIMINAR este usuario?")) {
return false;
}
104
else {
document.location = url;
return true;
}
}
</script>
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="index.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Usuarios registrados</h3>
<form method="post" action="">
<?
//Se hace conexión a la BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace una consulta a la tabla de usuarios y ver que usuarios existen
$query = "SELECT * FROM usuarios";
$result = mysql_query($query);
//Se crea Select y se manda llamar a la variable de la consuta y visualizar los usuarios existentes en nuestra BD
{
echo "<select name='vista_user' size='10'>";
echo "<option selected='selected'>=================Usuarios registrados=================</option>";
105
while ($row = mysql_fetch_array($result))
{
echo "<option>";
echo "$row[USUARIO]";
echo "</option>";
}
}
mysql_free_result($result);
echo "</select>";
?>
<BR /><BR /><input type="submit" value="Nuevo" onclick="this.form.action='ingresa_usuario.php'"/>
<!--Se genera un link en el boton de borrar hacia la función de confirmación -->
<a href="javascript:;" onclick="aviso(); return false;"> <input type="submit" name="cuest_new3" id="cuest_new5" value="Eliminar"
onclick="this.form.action='borrar_usuario.php'"/> </a>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Ingresa_usuario.php
<? include("page_auth.php");?>
106
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>INGRESO DE USUARIO</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Ingreso de usuario</h3>
<form method="post" action="">
<!--Ingreso de nuevo usuario-->
<p>Ingresa el nombre de usuario:</p><input name="USUARIO" type="text" />
<p>Ingresa la contraseña para este usuario:</p><input name="PASS" type="password" />
<p>Selecciona el tipo de usuario</p>
<select name="TIPO">
<option>ADMIN</option>
<option>USER</option>
</select>
<BR /><BR />
<input type="submit" value="Guardar" onclick="this.form.action='ingresar_usuario.php'"/>
<input type="submit" name="regreso" id="regreso" value="Regresar" onclick="this.form.action='usuarios.php'"/>
107
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
<li><a href="Cuestionarios.php">CUESTIONARIOS</a></li>
<li><a href="data.php">DATA</a></li>
<li><a href="usuarios.php">USUARIOS</a></li>
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Ingresar_usuario.php
<html>
<head>
<title>INGRESAR USUARIO</title>
</head>
<body>
<h1>Ingresar usuario</h1>
<form id="form2" name="form2" method="post" action="usuarios.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Condiciana a la variable usuario, pass y tipo a que si no tiene escrito nada muestre mensaje
if(!$USUARIO || !$PASS || !$TIPO)
{
echo "No se han introducido todos los datos";
exit;
108
}
//Se hace conexión a la BD
db_conect();
//Se realiza la inserción del nuevo usuario en la tabla de usuariois
$query = "INSERT INTO USUARIOS (USUARIO, PASS, TIPO) values ('$USUARIO', '$PASS', '$TIPO')";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo "<br>";
echo mysql_affected_rows()." Usuario registrado en la base de datos.";
?>
<input type="submit" name="cuest_new" id="cuest_new" value="Regresar" />
</form>
</body>
</html>
Borrar_usuario.php
<html>
<head>
<title>BORRAR USUARIO</title>
</head>
<body>
<h1>Borrar usuario</h1>
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
//Se hace conexión a la BD
db_conect();
//Se hace una consulta a la tabla de usuarios
$query = "SELECT * FROM usuarios WHERE USUARIO ='$vista_user'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
109
//Se realiza consulta para eliminar el usuario seleccionado.
$query = "DELETE FROM USUARIOS WHERE ID_USUARIO='$row[ID_USUARIO]'";
$result = mysql_query($query);
//Muestra la cantidad de filas afectadas si las hay
if ($result)
echo mysql_affected_rows()." Registros eliminados en la base de datos.";
?>
<form id="form2" name="form2" method="post" action="usuarios.php">
<input type="submit" value="Regresar" />
</form>
</body>
</html>
Contesta_cuestionario.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CONTESTAR CUESTIONARIOS</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
110
<div id="content">
<h3>Contestar cuestionario</h3>
<p>Selecciona el cuestinario que desees contestar.</p>
<form id="form" name="form" method="post" action="">
<?php
//Se hace conexión ala BD
require_once("fn_conect_mysql.php");
db_conect();
//Se hace una consulta a la tabla de cuestionarios para seleccionar el que se desea contestar
$query = "SELECT * FROM cuestionarios";
$result = mysql_query($query);
//Se crea select con todos los cuestionarios en la BD
{
echo "<select name='vista_cuest' size='0'>";
echo "<option selected='selected'>=================Selección de Cuestionarios=================</option>";
while ($row = mysql_fetch_array($result))
{
echo "<option>";
echo "$row[NOM_CUEST]";
echo "</option>";
}
}
mysql_free_result($result);
echo "</select>";
?>
<input type="submit" name="cuest_new" id="cuest_new" value="Contestar" onclick="this.form.action='contesta.php'"/>
</form>
</div>
<div id="left">
<p>Menú principal</p>
<ul>
111
<li><a href="salir_auth.php">SALIR</a></li>
</ul>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Contesta.php
<? include("page_auth.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>:::CONTESTA:::</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
</head>
<body>
<div id="contenedor">
<div id="header">
<ul>
<li><a href="principal.php">HOME</a></li>
<li><a href="">NOSOTROS</a></li>
<li><a href="">CONTACTANOS</a></li>
</ul>
</div>
<div id="content">
<h3>Contesta cuestionario</h3>
<form id="form" name="form" method="post" action="">
<?php
//Se hace conexión a la BD
112
require_once("fn_conect_mysql.php");
db_conect();
//Muestra el nombre de cuestionario seleccionado.
echo "Nombre del cuestionario seleccionado: $vista_cuest";
echo "<br>";
//Se realiza una consulta de los cuestionarios para saber su ID de cuestionario
$query1 = "SELECT ID_CUEST, NOM_CUEST FROM cuestionarios WHERE NOM_CUEST = '$vista_cuest' ";
$res = mysql_query($query1);
$row = mysql_fetch_array($res);
echo "No. del cuestionario seleccionado: $row[ID_CUEST]";
echo "<input name='vista_cuest' type='hidden' value = '$row[NOM_CUEST]'/>";
echo "<input name='id_cuest' type='hidden' value = '$row[ID_CUEST]'/>";
echo "<br>"; echo "<br>";
//Se hace una consulta a la tabla de preguntas que correspondan a l cuestionario seleccionado
$query2 = "SELECT ID_PREG, PREGUNTA FROM preguntas WHERE ID_CUEST = '$row[ID_CUEST]' ";
$res2 = mysql_query($query2);
//Ciclo para insertar preguntas mediante la consulta a MySQL de la tabla de pregunta
for($i=1;$i<=$row2 = mysql_fetch_array($res2);$i++)
{
echo "<br>";
echo "$i.-$row2[PREGUNTA]";
echo "<br>";
echo "<br>";
//Se realiza una consula a las tablas que estan relacionadas con el cuestionario seleccionado.
$query3 = "SELECT RESPUESTA, TIPO, PREG.ID_PREG, RESP.ID_PREG, RESP.ID_RESP FROM PREGUNTAS AS PREG LEFT
JOIN RESPUESTAS AS RESP ON PREG.ID_PREG = RESP.ID_PREG WHERE PREG.ID_PREG = '$row2[ID_PREG]' ORDER BY
RESP.ID_PREG";
$res3 = mysql_query($query3);
//Ciclo para insertar respuestas mediante la consulta a MySQL de las tablas relacionadas al cuestionario seleccionado.
for($j=1;$j<=$row3 = mysql_fetch_array($res3);$j++)
{
//Dependiendo del tipo de pregunta se mostraran las respuestas que contenga la pregunta
113
/*
echo "$row3[RESPUESTA]"; echo "<input type='$row3[TIPO]' name='$row3[PREGUNTA]' /> ";*/
switch ($row3[TIPO]) {
case "TEXT":
echo "$row3[RESPUESTA]"; echo "<input name='da[]' type='hidden' value = '$row[ID_CUEST], $row2[ID_PREG],
$row3[ID_RESP], '/> "; echo "<input name='ta[]' type='text' value=''/> ";
break;
case "RADIO":
echo "$row3[RESPUESTA]"; echo "<input name='data[$row3[ID_PREG]]' type='radio' value = '$row[ID_CUEST],
$row2[ID_PREG], $row3[ID_RESP], \"$row3[RESPUESTA]\" ' /> ";
break;
case "CHECKBOX":
echo "$row3[RESPUESTA]"; echo "<input name='data[]' type='checkbox' value = '$row[ID_CUEST], $row2[ID_PREG],
$row3[ID_RESP], \"$row3[RESPUESTA]\" '/> ";
break;
}
echo "<br>";
}
}
mysql_free_result($res);
?>
<br /><br /><br />
<center>
<input type="submit" name="cuest_new" id="cuest_new" value="Enviar" onclick="this.form.action='insertar_datos.php'"/>
</form>
</center>
</div>
<div id="footer">Todos los derechos reservados</div>
</div>
</body>
</html>
Inserter_datos.php
<html>
<head>
114
<title>CUESTIONARIO CONTESTADO</title>
</head>
<body>
<h1>Cuestionario contestado</h1>
<form id="form" name="form" method="post" action="contesta_cuestionario.php">
<?php
//Pide el archivo de conexión a la BD
require ("fn_conect_mysql.php");
/*if(!$NOM_CUEST)
{
echo "No se han introducido datos";
exit;
}
*/
//Se hace conexión a la BD
db_conect();
//Se coloca en variable el numero de registros en el arreglo de la variable de texto
$indice_da= count($da);
//Se crea ciclo para obtener los registros de las variables de texto
for($x=0;$x<=($indice_da)-1;$x++)
{
//Se crea variable para concatenar dos variables de tipo array
$dat =$da[$x]."\\'".$ta[$x]."\\'";
//echo "$dat<br>";
//Se inserta la variable con los array concatenados en otro array
$data[]= $dat;
}
//Se coloca en variable el numero de registros que contiene la variable que servira para ingresar los registros de las preguuntas
contestadas
$indice= count($data);
echo "Numero de preguntas contestadas = $indice<br>";
115
//Se obtienen todos los registros del arreglo para su inserción mediante ciclo foreach
foreach($data as $data)
{
$data= stripslashes($data);
//echo "$data<br>";
//Se realiza la inserción de el cuestionario por respuesta contestada a la tabla de data
$query = "INSERT INTO data (ID_CUEST, ID_PREG, ID_RESP, DATA) values ($data)";
$result = mysql_query($query);
}
//Muestra la cantidad de cuestionarios contestados si las hay
if ($result)
echo mysql_affected_rows()." Cuestionario contestado introducido en la base de datos.";
?>
<BR />
<input type="submit" value="REGRESAR" />
</form>
</body>
</html>
Page_auth.php
<?php //usuario y contraseña validos
@session_start();
if ($autentificado != "si")
{//si no existe lo regresa al logeo
session_destroy();
//header("Location: index.php");
echo "No eres usuario autentificado";
echo "<a href='index.php'>Autentificar</a>";
exit();
}
?>
Salir_auth.php
116
<?php
session_start();
session_destroy();
?>
<html>
<head>
<title>CONTENIDO NO SEGURO</title>
</head>
<body>
<p>Ahora estas fuera de la aplicacion</p>
<a href="index.php">Autentificar</a>
</body>
</html>
117
REFERENCIAS BIBLIOGRAFICAS
Sergio, Ezequiel Rozic (2004)
"Bases de Datos"
MP Ediciones Users. Cap. 11. Pag.182
César, Pérez López (2005)
"Servidor de Aplicaciones, red y Programación".
AlfaOmega, Ra-Ma Madrid. Cap 12.
Gustavo, Gabriel Poratti (2004)
"Redes"
MP Ediciones Users. Cap. 10 y 2.
Francisco, Charte Ojeda (2005)
"PHP 5"
Anaya Multimedia. Cap 7.
Direcciones Electrónicas.
"Archivos y Bases de Datos"
http://www.rena.edu.ve/cuartaEtapa
"Arquitectura de Base de Datos para Web"
http://www.mailxmail.com/curso-php-mysql-sql-8/arquitectura-base-datos-web
118

Documentos relacionados