Jump to content

[PHP], $_SESSION et tracé de graphe


otto

Recommended Posts

Bonjour/bonsoir

J'ai besoin de faire des graphique sur mon site Oaieb...

J'ai donc fait une petit fichier qui dessine!

<?php 
session_start();
//print_r($_SESSION);
$graph_title=$_SESSION['graph_title'];//unset($_SESSION['graph_title']);
$amounts=$_SESSION['amounts'];//unset($_SESSION['amounts']);
$bar=$_SESSION['bar'];//unset($_SESSION['bar']);
$couleur=$_SESSION['couleur'];//unset($_SESSION['couleur']);
$legende=$_SESSION['legende'];//unset($_SESSION['legende']);
$bar_height = 12;// how many pixels to leave between bars (vertically)
$bar_spacing = 5;// set grid spacing, any less than 25 will fudge the text. min 50 is preferable.
$grid_space = 50;// amount of space to give for bar titles (horizontally)
$bar_title_space = 200;// vertical space to leave for title
$graph_title_space = 20;// (optional) graph footer (could also come from session)
$graph_footer = "";  //"Coded By Howard Yeend. puremango.co.uk";// vertical space to leave for footer
$graph_footer_space = 20;// colour of bars
$bar_colour = 1;// 0=red, 1=green, 2=blue, 3=random
header("Content-type: image/png");

$scale_gen=max($amounts)/ 380;
$pic_width = $bar_title_space+400+($grid_space*1.5); //ajout min pour mise a l'echelle
$pic_height = ($bar_height+$bar_spacing+2)*sizeof($amounts)+20+$graph_title_space+$graph_footer_space;
$pic = ImageCreate($pic_width+1,$pic_height+1);// create image
// allocate colours
$white = ImageColorAllocate($pic,255,255,255);
$grey  = ImageColorAllocate($pic,200,200,200);
$lt_grey  = ImageColorAllocate($pic,210,210,210);
$black = ImageColorAllocate($pic,0,0,0);
ImageString($pic,5,($pic_width/2)-(strlen($graph_title)*5),0,$graph_title,$black);	// draw graph title
ImageString($pic, 2,($pic_width/2)-(strlen($graph_footer)*3),$pic_height-$graph_footer_space, $graph_footer, $grey);	// draw graph footer
// draw grid markers
for($x_axis=$bar_title_space; ($x_axis-$bar_title_space)<380+$grid_space; $x_axis+=$grid_space)
	{
	ImageLine($pic,$x_axis,$graph_title_space,$x_axis,$pic_height-$graph_footer_space,$grey); // draw vertical grid marker
	ImageLine($pic,$x_axis,($pic_height-$graph_footer_space-25),$x_axis-($bar_title_space+$grid_space),($pic_height-$graph_footer_space-25),$grey);// draw horizontal line above grid numbers
	ImageString($pic, 3, $x_axis+5, ($pic_height-$graph_footer_space-20), ceil(($x_axis-($bar_title_space))*$scale_gen), $black);		// draw grid numbers
	}
// draw bars
$y_axis=$graph_title_space;
for($i=1;$i<=count($amounts);$i++)
	{
	// write the bar title
	ImageString($pic, 2, ($bar_title_space-(strlen($legende[$i])*6)), $y_axis, $legende[$i], $black);
	// allocate a colour for this bar
	$tempCol = ImageColorAllocate($pic,$couleur[$i]['r'],$couleur[$i]['v'],$couleur[$i]['b']);
	// draw the bar
	ImageFilledRectangle($pic,($bar_title_space+1),$y_axis,$amounts[$i]/$scale_gen+$bar_title_space,($y_axis+$bar_height),$tempCol); //scale bar
	if(($amounts[$i])<1500)
		{
		// if it's a tiny amount, write the amount outside the bar in black
		ImageString($pic, 2, ($amounts[$i]/$scale_gen+3)+$bar_title_space, $y_axis, $bar[$i], $black);
		} 
	else 
		{
		// or if over 15, write the amount inside the bar in white
		// the strlen stuff is to ensure number is aligned with the end of the bar. works quite well, too.
		ImageString($pic, 2, ($amounts[$i]/$scale_gen-(strlen($bar[$i])*6))+$bar_title_space, $y_axis, $bar[$i], $white);
		}
	// move down
	$y_axis+=($bar_spacing+1)+$bar_height;
	}
// output image
ImagePNG($pic);
// remove image from memory
ImageDestroy($pic);
?>

Le problème c'est que dés que je veux faire 2 graphiques sur la même page...ca ne marche pas totalement : j'ai le même en double exemplaire...

Petit détails, a vu de nez, je n'ai pas le droit d'utiliser ImagePNG($pic,"toto.png")...

Link to comment
Share on other sites

  • 1 month later...

Slt !

Si tu veux pas te prendre la tête il existe une libraire toute désignée pour les graphiques... Il s'agit d'Artichow.

Bon ca résout pas ton problème mais ca le contourne :cartonrouge:

En plus Artichow est vraiment paramétrable et permet même de générer des images anti-spam.

L'essayer c'est l'adopter :cartonrouge:

Link to comment
Share on other sites

Le problème vient du fait que tu utilises les variables de Session de façon directe... et donc tu ne peux contenir qu'un seul graph.

Une solution serait d'utiliser des tableaux, qui seraient stockés dans tes variables de Session

Genre:


$_SESSION("Graph1"), $_SESSION("Graph2"),...

//définition d'un graph
$_SESSION("Graph[i]") = array('graph_title' =>$graph_title,
											'amounts' =>$amounts,
										   'bar' =>$bar,
											'couleur' =>$couleur,
										   'legende'=>$legende);


et tu les Affiches un par un, avec a la limite un boucle for jouant sur l'ID du graph

for($i=1,$i<=$_SESSION("NbrdeGraphs"),$i++){
Affiche_graph($_SESSION("Graph"+$i));
}

Par contre, si je peux me permettre quelques conseils... j'ai repris tes termes, mais si tu pouvais éviter d'utiliser a la fois des noms anglais et francais, ce serai plus cool pour relire... et tu verras ca quadn tu reprendras ton code.. ca ira tout de suite mieux. (et a la limite je te conseilles le francais, au moins tu différencies vraiment ce que tu as fait toi et ce qui est natif de php)

Voila, en espérant que cela pourra te donner un soupcon de pistes.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...