> Manuales > Sistema de encuestas PHP y MySQL

La explicación y el código de la página que recibe el voto de un usuario, lo contabiliza y muestra los resultados parciales de la encuesta hasta ese momento.

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 instrucción 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 número de votos realizados. Para asegurarnos de que se incrementan sólo los votos relacionados con la encuesta actual, con el enunciado where, limitamos la actualización solamente a la encuesta con el identificador recibido del formulario.


Imagen ejemplo de los resultados de una encuesta

Finalmente, nuestra página mostrará el resultado de la encuesta, aquí dimensionaremos el tamaño de las imágenes para mostrar los resultados mediante porcentajes, los cuales serán obtenidos por la división del número de votos de una respuesta multiplicado por cien, entre el número 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>


Sólo queda definir la página de administración de la encuesta, la cual deberá contar con un administrador que haga posible la alteración de estos datos, esto se puede hacer con un sistema de autentificación con clave encriptada para dar seguridad, también se puede utilizar cookies y/o sesiones para que un usuario no vote mas de una vez en la página, 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.

Carlos Eduardo Sotelo Pinto

Pregrado de Ingeniería de Sistemas

Manual