dominios y alojamiento web en hostalia

Página que contabiliza y muestra los resultados de la encuesta

29 de agosto de 2003
Valoración del artículo:
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.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
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.

Compartir en redes sociales

Comentarios
Fueron enviados 5 comentarios al artículo
5 comentarios revisados:
Por: Logan
07/7/2006
La encuesta funciona bien, solo es caso de descargar el fichero y hacer la base de datos en caso de no crearse automáticamente ;)
Por: Eduardo
14/7/2006
ESTO PUEDE SER LA SOLUCION DEL PROBLEMA JEJEJE

//ESTE ARCHIVO DALE POR NOMBRE "encuesta_blt.inc.php"
<?
mysql_connect('localhost','','')or die('ERROR EN LA CONEXION :'.mysql_error());
mysql_select_db('voto2')or die('ERROR AL ESCOJER LA BD :'.mysql_error());

function show_encuesta($id_ENCUESTA,$proteccion_IP){
// COLOCO TODAS MIS PREGUNTAS Y OPCIONES
$encuesta[1]=array('¿Que te parece el nuevo sitio?',array('Excelente','Muy bueno','Bueno','Feo','Muy Feo','Chau'));
//END
if (!array_key_exists($id_ENCUESTA,$encuesta)) return ('El id de la encuesta no se encuentra disponible');
else
$pregunta_de_la_encuesta = array_shift($encuesta[$id_ENCUESTA]);
$opciones_de_la_encuesta = array_pop ($encuesta[$id_ENCUESTA]);
if(isset($_POST[opcion])){
$ssqls=mysql_query('SELECT * FROM encuesta_blt WHERE ip="'.$REMOTE_ADDR.'"')or die(mysql_error());
/*if($proteccion_IP && mysql_num_rows($ssqls)>=1){
$html_encuesta='<font color="#FF0000" face="tahoma" size="2"><strong>Ya usted tiene un voto registrad</strong>o </font>';
} */
//else {
mysql_query('INSERT INTO encuesta_blt VALUES("'.$id_ENCUESTA.'","'.$_POST[opcion].'","'.$REMOTE_ADDR.'")')or die(mysql_error()); }
//}

$ssql=mysql_query('SELECT * FROM encuesta_blt WHERE id_encuesta="'.$id_ENCUESTA.'"')or die(mysql_error());
$total_votos=mysql_num_rows($ssql);

// IMPRIMIR LOS RESULTADOS.
$html_encuesta.='<form action="'.$_SERVER[REQUEST_URI].'" method="POST">';
$html_encuesta.= '<strong>'.$pregunta_de_la_encuesta.'</strong>';
$html_encuesta.='<br>';
//SI EL VALOR PARA MOSTRAR EL RESULTADO ES DISTINTO A "TURE" ENTONCES DA LA OPCION PARA VOTAR
if ($_GET[ver]!="true" ){
foreach($opciones_de_la_encuesta as $KEY => $OPCION){
$ssql=mysql_query('SELECT * FROM encuesta_blt WHERE id_encuesta="'.$id_ENCUESTA.'" and id_opcion="'.$KEY.'"')or die(mysql_error());
$votos_x_opcion=mysql_num_rows($ssql);
$estimar_porcentaje= @round($votos_x_opcion*100/$total_votos,1);
$html_encuesta.= '<input name="opcion" type="radio" value="'.$KEY.'"';
if($_POST[opcion]==$KEY && isset($_POST[opcion])){$html_encuesta.='checked'; }

$html_encuesta.= '>'.$OPCION.'<br>';
}
}
//SI EL VALOR PARA MOSTRA LOS RESULTADOS ES "TURE" ENTONCES MUESTRA Y SACA EL INPUT
if ($_GET[ver]=="true" ){
foreach($opciones_de_la_encuesta as $KEY => $OPCION){
$ssql=mysql_query('SELECT * FROM encuesta_blt WHERE id_encuesta="'.$id_ENCUESTA.'" and id_opcion="'.$KEY.'"')or die(mysql_error());
$votos_x_opcion=mysql_num_rows($ssql);
$estimar_porcentaje= @round($votos_x_opcion*100/$total_votos,1);
//$html_encuesta.= '<input name="opcion" type="radio" value="'.$KEY.'"';
if($_POST[opcion]==$KEY && isset($_POST[opcion])){$html_encuesta.='checked'; }

$html_encuesta.= '*'.$OPCION.'';
$html_encuesta.= ' '.$estimar_porcentaje.'% Votos: '.$votos_x_opcion.'</strong><br>';
}
}



$html_encuesta.='<br><input type="submit" value="Votar">';
if ($_GET[ver]!="true"){
$html_encuesta.='<a href="?ver=true">Resultados</a>';
}
else{
$html_encuesta.='<a href="?ver=false">Esconder Resultados</a>';
}
$html_encuesta.='</form>';
return $html_encuesta;
}
?>

ahora pon este codigo en el lugar que quieras que se vea el sistema de votacion


<?
include('encuesta_blt.ini.php');
echo show_encuesta(1,true);
?>

Derechos de Powerred by desarrolloweb.com
Por: Eduardo
14/7/2006
Casi me olvidaba.........
LA BASE DE DATOS sql.sql

CREATE TABLE `votacion` (
`id_encuesta` varchar(5) NOT NULL default '',
`id_opcion` varchar(5) NOT NULL default '',
`ip` varchar(15) NOT NULL default '' )
TYPE=MyISAM;
Por: Edgar
30/4/2007
Solucione el problema agregando el "@" y el problema se corrige,pruebalo

$SQLrow=@mysql_fetch_array($SQLresult);
Por: conquistador
19/2/2008
El problema con mysql_fetch_array en la línea 18 es porque los campos estan vacios y no se pasa ningun tipo de parametro.

Ejecute esta consulta y cambie los valores por los que usted desee..

INSERT INTO `test`.`tblenc` (
`encid` ,
`encprg` ,
`encrpt1` ,
`encrpt2` ,
`encrpt3` ,
`encrpt4` ,
`encval1` ,
`encval2` ,
`encval3` ,
`encval4` ,
`enctot`
)
VALUES (
NULL , '¿Que opina?', 'Exelente', 'Bueno', 'Malo', 'Regular', '0', '0', '0', '0', '0'
);

Con esto se resuelve todo el problema

Manuales relacionados
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...