Encuesta bastante sencilla con gráficos

He estado intentando hacer una encuesta que una vez hayas votado te muestre un gráfica en color con los votos.
La primera parte de hacer el recuento de votos me sale, pero lo que no consigo hacer es como mostrar las barras.
Lo estoy intentando hacer una manera bastante sencilla( por no decir chapuza) pero lo necesito hacer de esa manera, a ver si me puedes exar una mano.
TE adjunto el código php, el html no creo que haga falta, unicamente tiene los 3 radio buttons para las opciones.
A ver si me puedes echar una mano, muchísimas gracias.
Codiho php:
<?php 
switch ($opcion){ 
case "azul": 
$pid=fopen ("C:\Archivos de programa\EasyPHP5.3.0\www\contador_azul.txt", "r+"); 
$contador=fgets($pid,7); 
rewind ($pid); 
$contador=$contador+1; 
fputs ($pid,$contador); 
fclose($pid); 
break; 
case "rojo": 
$pid=fopen ("C:\Archivos de programa\EasyPHP5.3.0\www\contador_rojo.txt", "r+"); 
$contador=fgets($pid,7); 
rewind ($pid); 
$contador=$contador+1; 
fputs ($pid,$contador); 
fclose($pid); 
break; 
case "verde": 
$pid=fopen ("C:\Archivos de programa\EasyPHP5.3.0\www\contador_verde.txt", "r+"); 
$contador=fgets($pid,7); 
rewind ($pid); 
$contador=$contador+1; 
fputs ($pid,$contador); 
fclose($pid); 
break; 
default: 
echo "No hay mas opciones"; 

?> 
<table border=0>
<tr>
<td width="<?php echo $opcion value="azul" ?>" bgcolor="blue"></td>
</tr>
</table>
<table border=0>
<tr>
<td width="<?php echo $opcion value="rojo" ?>" bgcolor="red"></td>
</tr>
</table>
<table border=0>
<tr>
<td width="<?php echo $opcion value="verde" ?>" bgcolor="green"></td>
</tr>
</table>

1 respuesta

Respuesta
1
¿Qué es contador_verde, azul y rojo?
¿Pensaste en usar una librería como phplot? Es bastante más sencillo de lo que parece (créeme, debido a mi memoria selectiva tengo que empezar desde cero cada vez que quiero usarlo!) Y tienes un rango bastante amplio sobre tipos de encuestas (barra, pastel, lineas, puntos), con sus leyendas y tal...
Sólo sería para mostrar los datos de la encuesta, claro...
Te dejo un enlace a un tutorial sobre el phplot y una imagen de muestra:

Así que ahora puedes decidir si quieres utilizar el phplot (casi que te lo recomiendo; con vistas a encuestas más grandes, posibles modificaciones o algo así) y si quieres seguir con lo que has planteado, pues oye, seguimos, que no me cuesta nada ayudarte! Aunque eso sí, me vas a tener que explicar un poco tu código ;)
contador_verde, azul, etc...
Es el archivo .txt donde guardo los votos, no me sirve hacerlo de esa manera, es una ejercicio que me han pedido de ese modo, lo siento, si supongo que hay manera mil veces más fáciles que esta, pero así de retorcido es mi profesor xD
Pues qué jodío el tío!
Mira, yo lo que haría es esto, te lo explico y luego si tienes problemas a la hora de pasarlo a código, me dices y te echo un cable:
1. Saca el número total de votos, para calcular el porcentaje de cada opción, es decir: el porcentaje que vamos a mostrar para cada voto: porcentaje_voto = 100*color/total_votos
2. Asígnale un ancho fijo a la tabla y quita todo lo que has puesto a los tds (que te quede sólo
<td></td>
)
3. Luego en cada celda, creas un div y le aplicas un estilo con el color que corresponde y un ancho en porcentaje que se corresponde con el color, es decir
<td>
<div style="background-color:red;width:<?echo $porcentaje_voto_rojo;?>%; color: white">Opción 1</div>
</td>
¿Qué te parece?
De todas maneras, a lo mejor en vez de complicarte con mi respuesta, te funciona sólo con ponerle un width a la tabla... aunque si te digo la verdad, no entiendo esto:
width="<?php echo $opcion value="verde" ?>"
El $opcion supongo que es para sacar el ancho, pero el value no sé por qué lo metes en el width ;D
El value lo he puesto por poner jaja porque no se que variable poner para que me ponga el ancho de las votaciones.
Por si pongo width=" <?php echo $opcion ?>" supongo que no sabrá de que color tiene que `poner el ancho o algo.. no se era paranoias mías xD
Que se que esta mal jaja por eso no me funciona.
¿Y una pregunta el porcentaje donde tendría que ponerlo para que me lo recogiera?
¿Te refieres a en el div o en el td?
nose en recoger el porcentaje_voto = 100*color/total_votos
Que no se donde tengo que ponerlo.
<table width="300">
<tr>
<td>
<div style="background-color:blue;color:blue;width:30%">.</div>
</td>
</tr>
<tr>
<td>
<div style="background-color:red;color:red;width:80%">.</div>
</td>
</tr>
<tr>
<td>
<div style="background-color:green;color:green;width:10%">.</div>
</td>
</tr>
</table>
Tienes que sustituir ahí el número por el porcentaje que sacas de cada color... pero el símbolo de % lo tienes que dejar.
He puesto un punto dentro de cada div, porque si está vacío no salen; y le he asignado el mismo color de fuente que de fondo para que no se vea que hay un punto escrito.
¿Así te vale? Si quieres que te especifique más... lo intento XD
Si no me equivoco, los votos los recoges con $contador=fgets($pid,7);, no?
Entonces tendrías que hacer, por ejemplo, para cada color:
$pid=fopen ("C:\Archivos de programa\EasyPHP5.3.0\www\contador_verde.txt", "r+"); 
$contador=fgets($pid,7);
$verde = fgets($pid,7);
Y luego:
<div style="background-color:green;color:green;width:<?php echo 100*$verde/($verde+$azul+$rojo);?>%">.</div>
madremia que negada que soy xD
Mira creo que lo he puesto como me has dicho y me salen solo las barras azul y verde pero con un tamaño exagerado :P
<?php
switch ($opcion){
case "azul":
$pid=fopen ("G:\Clase\Albert\EasyPHP5.3.0\www\contador_azul.txt", "r+");
$contador_uno=fgets($pid,7);
rewind ($pid);
$contador_uno=$contador_uno+1;
fputs ($pid,$contador_uno);
fclose($pid);
break;
case "rojo":
$pid=fopen ("G:\Clase\Albert\EasyPHP5.3.0\www\contador_rojo.txt", "r+");
$contador_dos=fgets($pid,7);
rewind ($pid);
$contador_dos=$contador_dos+1;
fputs ($pid,$contador_dos);
fclose($pid);
break;
case "verde":
$pid=fopen ("G:\Clase\Albert\EasyPHP5.3.0\www\contador_verde.txt", "r+");
$contador_tres=fgets($pid,7);
rewind ($pid);
$contador_tres=$contador_tres+1;
fputs ($pid,$contador_tres);
fclose($pid);
break;
}
?>
<table width="300">
<tr>
<td>
<div style="background-color:blue;color:blue;width:<?php echo 100*$contador_uno/($contador_uno+$contador_dos+$contador_tres); ?>%>azul</div>
</td>
</tr>
<tr>
<td>
<div style="background-color:red;color:red;width:<?php echo 100*$contador_dos/($contador_uno+$contador_dos+$contador_tres); ?>%>rojo</div>
</td>
</tr>
<tr>
<td>
<div style="background-color:green;color:green;width:<?php echo 100*$contador_tres/($contador_uno+$contador_dos+$contador_tres); ?>%>verde</div>
</td>
</tr>
</table>
Tranquila, que pa eso estamos. Cambia por esto y dime a ver qué porcentajes te salen (he cambiado el color de la fuente y te he puesto los porcentajes detrás del color), por si acaso está sacando algún porcentaje raro (¿y si te saca 0% en el rojo?):
<?php
switch ($opcion){
case "azul":
$pid=fopen ("G:\Clase\Albert\EasyPHP5.3.0\www\contador_azul.txt", "r+");
$contador_uno=fgets($pid,7);
rewind ($pid);
$contador_uno=$contador_uno+1;
fputs ($pid,$contador_uno);
fclose($pid);
break;
case "rojo":
$pid=fopen ("G:\Clase\Albert\EasyPHP5.3.0\www\contador_rojo.txt", "r+");
$contador_dos=fgets($pid,7);
rewind ($pid);
$contador_dos=$contador_dos+1;
fputs ($pid,$contador_dos);
fclose($pid);
break;
case "verde":
$pid=fopen ("G:\Clase\Albert\EasyPHP5.3.0\www\contador_verde.txt", "r+");
$contador_tres=fgets($pid,7);
rewind ($pid);
$contador_tres=$contador_tres+1;
fputs ($pid,$contador_tres);
fclose($pid);
break;
}
?>
<table width="300">
<tr>
<td>
<div style="background-color:blue;color:white;width:<?php echo 100*$contador_uno/($contador_uno+$contador_dos+$contador_tres); ?>%>azul: <?php echo 100*$contador_uno/($contador_uno+$contador_dos+$contador_tres); ?></div>
</td>
</tr>
<tr>
<td>
<div style="background-color:red;color:white;width:<?php echo 100*$contador_dos/($contador_uno+$contador_dos+$contador_tres); ?>%>rojo: <?php echo 100*$contador_dos/($contador_uno+$contador_dos+$contador_tres); ?></div>
</td>
</tr>
<tr>
<td>
<div style="background-color:green;color:white;width:<?php echo 100*$contador_tres/($contador_uno+$contador_dos+$contador_tres); ?>%>verde: <?php echo 100*$contador_tres/($contador_uno+$contador_dos+$contador_tres); ?></div>
</td>
</tr>
</table>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas