1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
<?php
$host="localhost";
$utilisateur="root";
$motdepasse="****";
$base="eco_energy_graphe";
$conexion=mysql_connect($host,$utilisateur,$motdepasse) or die('Connexion impossible: ' . mysql_error());
$db=mysql_select_db($base, $conexion) or die('Connexion a la base impossible : ' . mysql_error());
$query=mysql_query('SELECT MONTH(dates) AS mois, libelle_produit,(SELECT SUM(quantite) FROM vente
WHERE produit.id_produit=vente.id_produit AND MONTH(dates)=mois AND YEAR(dates)=2011)as qtvendu FROM vente,produit
WHERE produit.id_produit=vente.id_produit AND produit.id_produit=1 AND YEAR(dates)=2011 GROUP BY mois ORDER BY mois ASC');
?>
<?php
$moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre');
$resultat=array();
$i=0;
while($row=mysql_fetch_object($query))
{
//var_dump($row); echo "<br/> : ".$row->qtvendu;
//Mettre la ligne dans le tableau
$resultat[$row->mois]=$row->qtvendu;
//Prendre la première quantité vendu comme minimum et maximum
if($i==0)
{
$min=$row->qtvendu;
$max=$row->qtvendu;
}
//Tester si la quantité vendu est inférieur au minimum et le prendre si il l'est
if($row->qtvendu < $min)
{
$min=$row->qtvendu;
}
//Tester si la quantité vendu est inférieur au maximum et le prendre si il l'est
else
{
if($row->qtvendu > $max)
{
$max=$row->qtvendu;
}
}
$i++;
}
#################
//Type mime de l'image
header('Content-type: image/png');
//Chemin vers le police à utiliser
$font_file = './arial.ttf';
//Adapter la largeur de l'image avec le nombre de donnée
$largeur=$i*50+90;
$hauteur=400;
//Hauteur de l'abscisse par rapport au bas de l'image
$absis=80;
//Création de l'image
$courbe=imagecreatetruecolor($largeur, $hauteur);
//Allouer les couleurs à utiliser
$bleu=imagecolorallocate($courbe, 0, 0, 255);
$ligne=imagecolorallocate($courbe, 220, 220, 220);
$fond=imagecolorallocate($courbe, 250, 250, 250);
$noir=imagecolorallocate($courbe, 0, 0, 0);
$rouge=imagecolorallocate($courbe, 255, 0, 0);
//Colorier le fond
imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
//Tracer l'axe des abscisses
imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
//Tracer l'axe des ordonnées
imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
//Decaler 10px vers le haut le si le minimum est différent de 0
if($min!=0)
{
$absis+=10;
$a=10;
}
//Nombres des grides verticales
$nbOrdonne=10;
//Calcul de l'echelle des abscisses
$echelleX=($largeur-100)/$i;
//Calcul de l'echelle des ordonnees
$echelleY=($hauteur-$absis-20)/$nbOrdonne;
$i=$min;
//Calcul des ordonnees des grides
$py=($max-$min)/$nbOrdonne;
$pasY=$absis;
while($pasY<($hauteur-19))
{
//Affiche la valeur de l'ordonnee
imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
//Trace la gride
imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
//Decaller vers le haut pour la prochaine gride
$pasY+=$echelleY;
//Valeur de l'ordonnee suivante
$i+=$py;
}
################
$j=-1;
//Position de la première mois de vente
$pasX=90;
//Parcourir le tableau pour le traçage de la diagramme
foreach ($resultat as $mois => $quantite) {
//calculer la hateur du point par rapport à sa valeur
$y=($hauteur) -(($quantite -$min) * ($echelleY/$py))-$absis;
//dessiner le point
imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
//Afficher le mois en français avec une inclinaison de 315°
imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[$mois-1]);
//Tacer une ligne veticale de l'axe de l'abscisse vers le point
imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
if($j!==-1)
{
//liée le point actuel avec la précédente
imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$noir);
}
//Afficher la valeur au dessus du point
imagestring($courbe, 2, $pasX-15,$y-14 , $quantite, $bleu);
$j=$quantite;
//enregister la hauteur du point actuel pour la liaison avec la suivante
$yprev=$y;
//Decaller l'abscisse suivante par rapport à son echelle
$pasX+=$echelleX;
}
//Envoyer le flux de l'image
if(imagepng($courbe)) echo "OK";
else echo "Non OK";
//Desallouer le memoire utiliser par l'image
imagedestroy($courbe);
?> |