Newsgroup: it.comp.www.php
Titolo: script per creare grafici

Sto cercando di creare uno script per fare dei grafici, lo posto qui
<?
header ("Content-type: image/png");
# mi connetto al db
require "connection.php";
# interrogo il db per vedere quante schede ci sono
$query= "SELECT * FROM `5200_1` limit 1";
$query=mysql_query($query);
#dal risultato di mysql_num_fields($query) tolgo 3: il cmapo id, il campo
nomi grafici ed il campo gruppo
$numero_schede=mysql_num_fields($query)-3;
#adesso vado a leggere i nomi delle schede e li metto in un array
$query= "SELECT * FROM `5200_1` limit 1";
$query=mysql_query($query);
for ($i=2; $i < $numero_schede+2; $i++)
{ 
 $nome_scheda[$i]=mysql_field_name($query, $i);
}
#adesso inizio ad estrarre i dati per i grafici
#vado ad estrarre i dati gruppo per gruppo, per prima cosa determino le risoluzioni presenti in ogni gruppo
$indice_gruppo=1;
$query="SELECT * FROM `5200_1` where gruppo='$indice_gruppo' LIMIT 0 , 30";
$query=mysql_query($query);
$numero_risoluzioni=mysql_num_rows($query);
# echo $numero_risoluzioni;
#vado a prendere il massimo per fare la scala.
$h=0;
foreach ($nome_scheda as $scheda)
{
 $query="SELECT `$scheda` FROM `5200_1` where gruppo='$indice_gruppo' LIMIT 0 , 30";
 $query=mysql_query($query); 
 while ($line = mysql_fetch_array($query)) 
 {
  $prestazione[$h]=$line[0];
  # echo "<br>$line[0]";
  $h=$h+1;
 }
}
#impostazioni del grafico
$larghezza_immagine=490;
$bordo_sinistro=100;
$bordo_destro=40;
$bordo_alto=30;
$bordo_basso=50;
$lunghezza_massima_barra=$larghezza_immagine-$bordo_destro;
$correttivo=$lunghezza_massima_barra/max($prestazione);
$altezza_barra=10;
$spaziatura_gruppi=45;
$altezza=$bordo_basso+$bordo_alto+$numero_schede*$altezza_barra+$numero_risoluzioni*$numero_schede*$altezza_barra;
$img_handle = ImageCreate ($larghezza_immagine, $altezza) or die ("Cannot Create image"); 
# definizione colori
$black=ImageColorAllocate($img_handle, 0, 0, 0);
$white=ImageColorAllocate($img_handle, 255, 255, 255);
$red=ImageColorAllocate($img_handle, 255
, 0, 0);
$colori=array($black, $red,$white, $red, $white);
$back=ImageColorAllocate($img_handle, 255, 255, 0);
imagefill($img_handle, 0, 0, $back);
#Disegnamo gli assi verticali
for ($e=0; $e<=($larghezza_immagine-$bordo_destro+10); $e++)
{
 $bordo_sinistro=$bordo_sinistro+50;
 imageline ($img_handle, $bordo_sinistro, $bordo_alto, $bordo_sinistro,
$altezza-$bordo_alto, $red);
}
foreach ($nome_scheda as $scheda)
{ 
 $query="SELECT `$scheda` FROM `5200_1` where gruppo='$indice_gruppo' LIMIT 0 , 30";
 # echo "<br>$query";
 $query=mysql_query($query);
 $k=0;
 $n=0;
 while ($line = mysql_fetch_array($query)) 
 {
  $k=$k+1;
  $prestazione1[$k]=$line[0];  
 } 
 foreach ($prestazione1 as $barra)
 {
  $n=$n+1;
  imagefilledrectangle ($img_handle, $bordo_sinistro,$bordo_alto+$n*10+$j , $prestazione1[$n]*$correttivo, $altezza_barra+$bordo_alto+$n*10+$j, $colori[$n]); 
  # echo "<br>$img_handle, $bordo_sinistro,$bordo_alto+$n*10+$j , $prestazione1[$n]*$correttivo, $altezza_barra+$bordo_alto+$n*10+$j, $colori[$n]";  
 }
 $j=$j+$spaziatura_gruppi;
}
#adesso mettiamo in nomi delle schede
# foreach ($nome_scheda as $ciao)
# {
# imagettftext($img_handle, 14, 0, 15, $bordo_alto+15+15+$d, $black, "c:\winnt\fonts\arial.ttf", "Radeon \n 9100");
# $d=$d+45;
# }
#asse delle y
imageline ( $img_handle, $bordo_sinistro, $bordo_alto, $bordo_sinistro, $altezza-$bordo_alto, $black);
#asse x
imageline ( $img_handle, $bordo_sinistro, $altezza-$bordo_alto, $larghezza_immagine-$bordo_destro+10, $altezza-$bordo_alto, $black);
# creo l'immagine
ImagePng ($img_handle); 
?>
Vorrei mettere nell'immagine delle righe verticali equispaziate, il pezzo di codice che lo fa è 
#Disegnamo gli assi verticali
for ($e=0; $e<=($larghezza_immagine-$bordo_destro+10); $e++)
{
 $bordo_sinistro=$bordo_sinistro+50;
 imageline ($img_handle, $bordo_sinistro, $bordo_alto, $bordo_sinistro, $altezza-$bordo_alto, $red);
}
se metto questo pezzo di codice non mi disegna più le barre orrizontali del grafico, i
l che è molto strano ;((
Qualche suggerimento??
grazie
Andrea

l che è molto strano ;((
C'entra il fatto che stai spostando sempre piu' in la' $bordo_sinistro?
	$xxx = $bordo_sinistro;
	for ($e=0; $e<=...
	{
		$xxx += 50;
		imageline ($img_handle, $xxx, $bordo_alto,
			 $xxx, $altezza-$bordo_alto, $red);
	}
Cosi' dovrebbe andare, penso.
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

> C'entra il fatto che stai spostando sempre piu' in la' $bordo_sinistro?
esatto, ho corretto cosě
Andrea
<?
 header ("Content-type: image/png");
# mi connetto al db
require "connection.php";
# interrogo il db per vedere quante schede ci sono
$query= "SELECT * FROM `5200_1` limit 1";
$query=mysql_query($query);
#dal risultato di mysql_num_fields($query) tolgo 3: il cmapo id, il campo
nomi grafici ed il campo gruppo
$numero_schede=mysql_num_fields($query)-3;
#adesso vado a leggere i nomi delle schede e li metto in un array
$query= "SELECT * FROM `5200_1` limit 1";
$query=mysql_query($query);
for ($i=2; $i < $numero_schede+2; $i++)
{ 
 $nome_scheda[$i]=mysql_field_name($query, $i);
}
#adesso inizio ad estrarre i dati per i grafici
#vado ad estrarre i dati gruppo per gruppo, per prima cosa determino le risoluzioni presenti in ogni gruppo
$indice_gruppo=2;
$query="SELECT * FROM `5200_1` where gruppo='$indice_gruppo' LIMIT 0 , 30";
$query=mysql_query($query);
$numero_risoluzioni=mysql_num_rows($query);
# echo $numero_risoluzioni;
#vado a prendere il massimo per fare la scala.
$h=0;
foreach ($nome_scheda as $scheda)
{
 $query="SELECT `$scheda` FROM `5200_1` where gruppo='$indice_gruppo' LIMIT 0 , 30";
 $query=mysql_query($query); 
 while ($line = mysql_fetch_array($query)) 
 {
  $prestazione[$h]=$line[0];
  # echo "<br>$line[0]";
  $h=$h+1;
 }
}
#impostazioni del grafico
$larghezza_immagine=490;
$bordo_sinistro=100;
$bordo_destro=40;
$bordo_alto=30;
$bordo_basso=50;
$lunghezza_massima_barra=$larghezza_immagine-$bordo_destro-$bordo_sinistro;
$correttivo=$lunghezza_massima_barra/max($prestazione);
$altezza_barra=10;
$spaziatura_gruppi=45+($numero_risoluzioni)*10;
$altezza=$bordo_basso+$bordo_alto+$numero_schede*$numero_risoluzioni*$altezza_barra+45*($numero_schede-1)+10;
# echo "$bordo_basso+$bordo_alto+$numero_schede*$altezza_barra*$numero_risoluzioni+$spaziatura_gruppi*($numero_schede-1)";
$img_handle = ImageCreate ($larghezza_immagine, $altezza) or
 die ("Cannot Create image");
# definizione colori
$black=ImageColorAllocate($img_handle, 0, 0, 0);
$white=ImageColorAllocate($img_handle, 255, 255, 255);
$red=ImageColorAllocate($img_handle, 255, 0, 0);
$colori=array($black, $red,$white, $red, $white);
$back=ImageColorAllocate($img_handle, 255, 255, 0);
$grey=ImageColorAllocate($img_handle, 206, 206, 206);
imagefill($img_handle, 0, 0, $back);
$larghezza_immagine1=$larghezza_immagine;
$bordo_destro1=$bordo_destro;
$bordo_sinistro1=$bordo_sinistro;
#Disegnamo gli assi verticali
for ($e=0; $e<=($larghezza_immagine-$bordo_destro+10); $e=$e+50)
{
 $bordo_sinistro1=$bordo_sinistro1+50;
 imageline ($img_handle, $bordo_sinistro1, $bordo_alto, $bordo_sinistro1,
$altezza-$bordo_basso, $grey);
}
foreach ($nome_scheda as $scheda)
{ 
 $query="SELECT `$scheda` FROM `5200_1` where gruppo='$indice_gruppo' LIMIT 0 , 30";
 # echo "<br>$query";
 $query=mysql_query($query);
 $k=0;
 $n=0;
 while ($line = mysql_fetch_array($query)) 
 {
  $k=$k+1;
  $prestazione1[$k]=$line[0];  
 } 
 foreach ($prestazione1 as $barra)
 {
  $n=$n+1;  
  imagefilledrectangle ($img_handle, $bordo_sinistro,$bordo_alto+$n*10+$j, $bordo_sinistro+$prestazione1[$n]*$correttivo, $altezza_barra+$bordo_alto+$n*10+$j, $colori[$n]); 
  # echo "<br>$img_handle, $bordo_sinistro,$bordo_alto+$n*10+$j , $prestazione1[$n]*$correttivo, $altezza_barra+$bordo_alto+$n*10+$j, $colori[$n]";  
 }
 $j=$j+$spaziatura_gruppi;
}
#adesso mettiamo in nomi delle schede
# foreach ($nome_scheda as $ciao)
# {
# imagettftext($img_handle, 14, 0, 15, $bordo_alto+15+15+$d, $black, "c:\winnt\fonts\arial.ttf", "Radeon \n 9100");
# $d=$d+45;
# }
#asse delle y
imageline ( $img_handle, $bordo_sinistro, $bordo_alto, $bordo_sinistro, $altezza-$bordo_basso, $black);
#asse x
imageline ( $img_handle, $bordo_sinistro, $altezza-$bordo_basso, $larghezza_immagine-$bordo_destro+10, $altezza-$bordo_basso, $black);
# creo l'immagine
 imagePng ($img_handle); 
?>