Documente Academic
Documente Profesional
Documente Cultură
Construccin de una aplicacin web para crear un sistema de encuestas con la tecnologa PHP y la base de datos MySQL.
Referencias: Este manual supone que el lector tiene conocimientos, aunque sean bsicos, sobre las tecnologas PHP y MySQL. En DesarrolloWeb disponemos del material necesario para disponer de dicha base, principlamente en nuestra seccin PHP a fondo, y particularmente en nuestro Manual de PHP y el Taller de MySQL.
Para resolver esto utilizaremos una base de datos con dos tablas, una correspondiente a las opciones de la encuesta y la otra para los datos del administrador.
Nota: La tabla de administracin no afecta directamente al funcionamiento del sistema de encuestas. Simplemente servira para guardar nombres de usuario y clave de las personas que podran administrar la aplicacin de encuestas. No la vamos a ver por ahora, aunque os remitimos al manual de Sistema de autentificacin PHP, donde enseamos a construir un sistema protegido por usuario/clave. Asmismo, queremos indicar que la creacin de la base de datos podra variar dependiendo del desarrollador que la realice, pudiendo haber otras opciones tambin interesantes para modelizar este sistema de encuestas.
Nuestra primera tabla constar de 11 campos de la siguiente manera. 1. 2. 3. 4. Un campo para la pregunta de la encuesta. Cuatro posibles respuestas, las cuales sern las que nos interesa saber. Cuatro valores acumulativos del nmero de votos por cada respuesta. Un campo para el valor total de votos.
Hasta ahora slo hemos indicado 10 campos. El campo 11, que en realidad es el primero, es nuestra clave primaria de la tabla. El script SQL para la creacin de la tabla se encuentra a continuacin.
DROP TABLE IF EXISTS tblenc; CREATE TABLE tblenc ( encid int(11) NOT NULL auto_increment, encprg varchar(50) default NULL, encrpt1 varchar(50) default NULL, encrpt2 varchar(50) default NULL,
encrpt3 varchar(50) default NULL, encrpt4 varchar(50) default NULL, encval1 int(11) NOT NULL default '0', encval2 int(11) NOT NULL default '0', encval3 int(11) NOT NULL default '0', encval4 int(11) NOT NULL default '0', enctot int(11) NOT NULL default '0', PRIMARY KEY (encid) ) TYPE=MyISAM;
Las imgenes que tendremos sern las siguientes: barra1.gif barra2.gif barra3.gif barra4.gif Las pginas involucradas Antes de empezar a meternos con el cdigo PHP de este sistema de encuestas vamos a describir las principales pginas involucradas. Pgina que muestra la encuesta Tendremos una primera pgina donde podremos ver la encuesta actual, con sus diferentes respuestas, colocadas dentro de un formulario. Podremos elegir una respuesta y enviarla para la contabilizacin del voto. Pgina que contabiliza el voto y muestra los resultados La segunda pgina es la que recibe los datos del formulario y los registra en la tabla de la encuesta, aadiendo una unidad a la respuesta escogida y al campo donde introducimos el nmero total de respuestas. Posteriormente, esta misma pgina mostrar una tabla con los resultados parciales de la encuesta, despus de la contabilizacin del voto emitido por el usuario. Pgina de administracin No la vamos a ver, por lo menos todava. Servira para editar los datos de una encuesta o crear encuestas nuevas. Sera slo accesible por el administrador de la pgina.
de datos es capaz de guardar varias. De este modo podramos tener la encuesta actual y el histrico de todas las encuestas que se han realizado en la pgina. La ltima encuesta introducida ser la que se mostrar en la pgina actual.
Para extraer la ltima encuesta introducida se utilizar una sentencia SQL en la que se ordenarn las encuestas por su identificador, de manera descendente.
SELECT * FROM tblenc order by encid desc
Otro detalle en el que debemos fijarnos es en la creacin de un campo hidden (oculto) de formulario para enviar a la pgina de resultados el identificador de la encuesta a la que se est votando.
<? $servidor="localhost"; $usuario="nobody"; $password="nobody"; $base="encuesta"; $SQLid = mysql_connect($servidor,$usuario,$password); mysql_select_db($base,$SQLid); $SQLquery = "SELECT * FROM tblenc order by encid desc"; $SQLresult = mysql_query($SQLquery,$SQLid); $SQLrow = mysql_fetch_array($SQLresult); ?> <form name="form1" method="post" action="encuesta.php"> <input type=hidden name="encid" value="<?echo $SQLrow[0]?>"> <table width="270" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#006600"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sansserif">::::::::::::::::::::::::::::::::::::::</font></td> </tr> <tr> <td bgcolor="#FFFFCC"> <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sansserif"><strong> <? echo $SQLrow[1]?> </strong></font></div></td> </tr> <tr> <td bgcolor="#FFFFCC"> <p> <font size="2"> <label> <input type="radio" name="voto" value="1"> <? echo $SQLrow[2]?></label> <br> <label> <input type="radio" name="voto" value="2"> <? echo $SQLrow[3]?></label> <br> <label> <input type="radio" name="voto" value="3">
<? echo $SQLrow[4]?></label> <br> <label> <input type="radio" name="voto" value="4"> <? echo $SQLrow[5]?></label> <br> </font></p></td> </tr> <tr> <td bgcolor="#FFFFCC"> <div align="center"> <input type="submit" name="Submit" value="Aceptar"> </div></td> </tr> </table> </form>
Esta pgina almacena en una variable llamada voto el valor de la respuesta de nuestro encuestado, para luego ser enviada a la pgina de resultados.
Como podemos observar, utilizamos el valor de la variable voto como parte del nombre del campo a evaluar, incrementamos el mismo e incrementamos el campo total, que es donde se acumular el nmero de votos realizados. Para asegurarnos de que se incrementan slo los votos relacionados con la encuesta actual, con el enunciado where, limitamos la actualizacin solamente a la encuesta con el identificador recibido del formulario.
Finalmente, nuestra pgina mostrar el resultado de la encuesta, aqu dimensionaremos el tamao de las imgenes para mostrar los resultados mediante
porcentajes, los cuales sern obtenidos por la divisin del nmero de votos de una respuesta multiplicado por cien, entre el nmero total de votos. As.
<IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval1"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra1.gif">
Slo queda definir la pgina de administracin de la encuesta, la cual deber contar con un administrador que haga posible la alteracin de estos datos, esto se puede hacer con un sistema de autentificacin con clave encriptada para dar seguridad, tambin se puede utilizar cookies y/o sesiones para que un usuario no vote mas de una vez en la pgina, y otros trucos que pueden ser de gran utilidad para este sistema. Pero ya no son tema de estudio de este manual. Queda al ingenio del desarrollador y a los requerimientos del sistema.