Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/07/2004, 11:07
kaslimon
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 86
Antigüedad: 20 años, 9 meses
Puntos: 0
Pues haciendo caso a superCluster intentare afrontar el problema raiz como un campeon. El motivo por el cual he evitado esta solución es porque la veo bastante compleja, debido a la organización del código.

Hay partes del código en inglés (variables) ya que los he obtendio en un libro, se entienden bien y las podría haber pasado a castellano pero temía equivocarme.

ahi va el código en cuestión:

//################################################## ######################################
// Encuestas V 1.0 (Recibe datos y muestra resultados)
//################################################## ######################################


//Validamos la información llegada de la encuesta
if (!isset($_POST["voto"]))
{
print("<br/><br/></br><font size='4' color='red'><center>Debe seleccionar una respuesta</center></font><br/>");
print("<center><button onclick='window.close();'> Cerrar </button></center>");
exit;
}

$voto=$_POST["voto"];
$id_enc=$_POST["id_encuesta"];


require_once("conexion.php");
$conexion=conectar();

//Insertamos el voto en la BD
$resultado_voto="resultado".$voto;
$sqlUpdate="UPDATE encuestas SET total_votos=total_votos + 1, $resultado_voto=$resultado_voto + 1 WHERE id=$id_enc";
$rs1=mysql_query($sqlUpdate,$conexion) or die ("Error al consultar la base de datos: " . mysql_error());


//Tomamos los datos que vamos a mostrar
$sqlSelect="SELECT * FROM encuestas WHERE id=$id_enc";
$rs2=mysql_query($sqlSelect,$conexion) or die ("Error al consultar la base de datos: " . mysql_error());
$resultado=mysql_fetch_array($rs2);


$numero_opciones= $resultado["numero_opciones"]; // Número de respuestas
$total_votos= $resultado["total_votos"];
$pregunta=$resultado["pregunta"];



/*********************************************
Cálculos iniciales para el gráfico
**********************************************/
$num_candidates=$numero_opciones;
$total_votes=$total_votos;

putenv('GDFONTPATH=C:\WINDOWS\Fonts');
$width=600; //anchura de la imagen en píxeles
$left_margin = 50;
$right_margin = 50;
$bar_height=40;
$bar_spacing= $bar_height/2;
$font = 'Arial';
$title_size = 14;
$main_size=12;
$small_size=10;
$text_indent =15; //Ubicación para las etiquetas de texto a la izquierda

//establecemos el puntos inicial desde el que dibujar
$x=$left_margin + 60; //lugar en el que dibujar la linea base del gráfico.
$y=50; //lugar en el que dibujar la línea base del gráfico.
$bar_unit = ($width - ($x + $right_margin)) / 100; //un "punto" en el gráfico

//Calculamos la altura del gráfico - las barras, más los huecos, más cierta distancia del margen
$height = $num_candidates * ($bar_height + $bar_spacing) + 50;

$height2 =$num_candidates * ($bar_height + $bar_spacing) + 180; //Altura incluyendo la leyenda



/*******************************************
Crear la imagen de base
*******************************************/

// creamos un lienzo vacío
$im = imagecreate($width,$height2);

// Asignamos colores
$white=ImageColorAllocate($im,255,255,255);
$red=ImageColorAllocate($im,255,0,0);
$blue=ImageColorAllocate($im,0,64,128);
$black=ImageColorAllocate($im,0,0,0);
$pink = ImageColorAllocate($im,255,78,243);
$yellow = ImageColorAllocate($im,255,255,132);


$text_color = $black;
$percent_color = $black;
$bg_color = $yellow;
$line_color = $blue;
$bar_color = $blue;
$number_color = $red;

// Creamos el lienzo en el que dibujar
ImageFilledRectangle($im,0,0,$width,$height2,$bg_c olor);

// Dibujamos un rectángulo en el lienzo
ImageRectangle($im,0,0,$width-1,$height2-1,$line_color);

// Añadimos el título
$title = $pregunta;
$title_dimensions = ImageTTFBBox($title_size, 0, $font, $title);
$title_length = $title_dimensions[2] - $title_dimensions[0];
$title_height = abs($title_dimensions[7] - $title_dimensions[1]);
$title_above_line = abs($title_dimensions[7]);
$title_x = ($width-$title_length)/2; // center it in x
$title_y = ($y - $title_height)/2 + $title_above_line; // center in y gap
ImageTTFText($im, $title_size, 0, $title_x, $title_y,
$text_color, $font, $title);

// Dibujamos una línea base ligeramente por encima de la primera barra hasta un poco por debajo de la última
ImageLine($im, $x, $y-5, $x, $height-15, $line_color);




/*******************************************
Dibujar datos en el gráfico
*******************************************/

// Dibujamos las barras basándonos en los datos de la base de datos
for ($i=1;$i<=$numero_opciones;$i++) {
$etiqueta="Opción ".$i;
$resultado_enc="resultado".$i;
$votos_respuesta=$resultado[$resultado_enc];

if ($total_votes > 0)
$percent = intval(round(($votos_respuesta/$total_votes)*100));
else
$percent = 0;

// mostramos el porcentaje de este valor
ImageTTFText($im, $main_size, 0, $width-40, $y+($bar_height/2),
$percent_color, $font, $percent.'%');
if ($total_votes > 0)
$right_value = intval(round(($votos_respuesta/$total_votes)*100));
else
$right_value = 0;

// longitud de la barra para este valor
$bar_length = $x + ($right_value * $bar_unit);

// dibujamos la barra
ImageFilledRectangle($im, $x, $y-2, $bar_length, $y+$bar_height, $bar_color);

// Dibujamos el título para este valor
ImageTTFText($im, $main_size, 0, $text_indent, $y+($bar_height/2),
$text_color, $font, $etiqueta);

// Dibujamos la línea mostrando el 100%
ImageRectangle($im, $bar_length+1, $y-2,
($x+(100*$bar_unit)), $y+$bar_height, $line_color);

// Mostramos los número
ImageTTFText($im, $small_size, 0, $x+(100*$bar_unit)-60, $y+($bar_height/2),
$number_color, $font, $votos_respuesta.'/'.$total_votes);

// Pasamos a la siguiente barra
$y=$y+($bar_height+$bar_spacing);
}

//Mostramos la leyenda
for ($i=1;$i<=$numero_opciones;$i++) {
$etiqueta="Opción ".$i.":";
$opcion_enc="opcion".$i;
$opcion=$resultado[$opcion_enc];

ImageTTFText($im, $small_size, 0, $text_indent + 20, $y+($bar_height/2), $text_color, $font, $etiqueta);
ImageTTFText($im, $small_size, 0, $text_indent + 90, $y+($bar_height/2), $text_color, $font, $opcion);

$y=$y + $bar_spacing;

}

/*******************************************
Mostrar imagen
*******************************************/
Header('Content-type:image/png');
$ruta="imagenes\\temp\\encuesta".time().".png";
ImagePng($im,$ruta);


/*******************************************
Liberar recursos
*******************************************/
ImageDestroy($im);


mysql_free_result($rs2);
//Cerramos la conexion
mysql_close($conexion);
?>
__________________
"Quiero saber de todo.....y no se nada"