Sunteți pe pagina 1din 6

Sistema de encuestas PHP y MySQL

Construccin de una aplicacin web para crear un sistema de encuestas con la tecnologa PHP y la base de datos MySQL.

Sistema de encuestas. Base de datos a utilizar


Algunas veces deseamos saber ciertas preferencias de los visitantes de nuestra pagina o qu opiniones tienen sobre algn tema especfico. Una solucin a esto es tener un sistema de encuestas, el cual contenga opciones, las cuales podamos votar. Antes de empezar debemos tener en cuenta que nuestro sistema de encuesta debe tener los siguientes requerimientos. Permitir al usuario votar ente un nmero de opciones predefinidas. Permitir al usuario ver el resultado de las encuestas. Permitir al usuario conocer el total de la poblacin evaluada al momento de la lectura de las encuestas. Los resultados se mostraran en forma grfica y numeral.

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;

Imagenes y pginas a utilizar en el sistema de encuestas


Ser importante tener cuatro imgenes, las cuales servirn para mostrar el resultado grfico de la encuesta. Cabe recalcar que el tamao de las imgenes se puede expresar en forma porcentual respecto de la posicin donde se encuentra. As
<IMG HEIGHT="5" WIDTH="100%" SRC="imagenes/barra1.gif">

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.

Pgina que muestra la encuesta


Ahora disearemos nuestro formulario de encuesta. Este formulario deber conectarse a nuestra base de datos para obtener la pregunta y las posibles respuestas. Aunque nuestro sistema est preparado para mostrar una nica encuesta, la base

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.

Imagen ejemplo de una encuesta

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.

Pgina que contabiliza y muestra los resultados de la encuesta


Ahora definimos nuestra pagina de resultados, la cual, lo primero que deber hacer, es obtener el valor de la variable voto y del identificador de la encuesta que se ha votado. Para poder actualizar nuestra base de datos con el objetivo de registrar el voto recibido, usaremos una instruccin de este tipo:
UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid

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.

Imagen ejemplo de los resultados de una encuesta

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">

Nuestro script quedar de la siguiente manera:


<? //recibo el voto $voto = $_POST["voto"]; //recibo el id de la encuesta $encid = $_POST["encid"]; $servidor="localhost"; $usuario="Administrador"; $password=""; $base="prueba"; $SQLid = mysql_connect($servidor,$usuario,$password); mysql_select_db($base,$SQLid); $SQLquery = "UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid"; $SQLresult = mysql_query($SQLquery,$SQLid); $SQLquery = "SELECT * FROM tblenc where encid=$encid"; $SQLresult = mysql_query($SQLquery,$SQLid); $SQLrow = mysql_fetch_array($SQLresult); ?> <P ALIGN="center"><font size="4"><strong><em>RESULTADOS PARCIALES DE LA ENCUESTA</em></strong></font></P> <P ALIGN="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <? echo $SQLrow["encprg"] ?> </font></strong></P> <TABLE ALIGN="center" WIDTH="75%" BORDER="0" CELLSPACING="1" CELLPADDING="1"> <!--DWLayoutTable--> <TR> <TD ALIGN="left" WIDTH="23%"><? echo $SQLrow["encrpt1"]?> <div align="left"></div></TD> <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval1"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra1.gif"></TD> <TD ALIGN="center" WIDTH="14%"><? echo $SQLrow["encval1"]?> votos</TD> </TR> <TR> <TD ALIGN="left"><? echo $SQLrow["encrpt2"]?> <div align="left"></div></TD> <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval2"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra2.gif"></TD> <TD ALIGN="center"><? echo $SQLrow["encval2"]?> votos</TD> </TR> <TR> <TD ALIGN="left"><? echo $SQLrow["encrpt3"]?> <div align="left"></div></TD> <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval3"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra3.gif"></TD> <TD ALIGN="center"><? echo $SQLrow["encval3"]?> votos</TD> </TR> <TR> <TD ALIGN="left"><? echo $SQLrow["encrpt4"]?> <div align="left"></div></TD> <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval4"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra4.gif"></TD> <TD ALIGN="center"><? echo $SQLrow["encval4"]?> votos</TD> </TR> </TABLE> <P ALIGN="center">Total de votos emitidos: <? echo $SQLrow["enctot"]?></P>

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.

S-ar putea să vă placă și