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
| <?php
$host="localhost";
$utilisateur="root";
$motdepasse="";
$base="arrets";
$conexion = new PDO('mysql:host='.$host.';dbname='.$base, $utilisateur, $motdepasse);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sqlQuery = "SELECT type as type, sum(duree) as duree from arret group by type order by sum(duree) desc";
$sth = $conexion->prepare($sqlQuery, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$result = $sth->fetchAll(PDO::FETCH_OBJ);
$i=0;
$js=array();
foreach($result as $row)
{
//Prendre la premiere quantite vendue comme le minimum et maximum
//Mettre les noms de produit et les mois de ventes dans des tableaux
if($i==0)
{
$min=$row->duree;
$max=$row->duree;
array_push($js, $row->type);
}
//Inserer le mois de vente dans le tableau s'il n'est pas encore enregistrer
if(!in_array($row->type,$js))
{
array_push($js, $row->type);
}
if($row->duree < $min)
{
$min=$row->duree;
}
else
{
if($row->duree > $max)
{$max=$row->duree;}
}
$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 par rapport au nombre de ligne et nombre de mois
$largeur=$i*20+(count($js)*10)+100;
$hauteur=400;
$absis=80;
$courbe=imagecreatetruecolor($largeur, $hauteur);
//Générer un tableau de couleurs
$couleur=array();
$red=85;
$blue=85;
$green=85;
$couleur[$n]=imagecolorallocate($courbe, $red,$green , $blue);
//Les autre couleurs utils
$ligne=imagecolorallocate($courbe, 220, 220, 220);
$fond=imagecolorallocate($courbe, 250, 250, 250);
$noir=imagecolorallocate($courbe, 0, 0, 0);
$blanc=imagecolorallocate($courbe, 255, 255, 255);
$rouge=imagecolorallocate($courbe, 255, 0, 0);
//Colorer le fond
imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
//Tracer l'abscisse et l'ordonnée
imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
if($min!=0)
{
$absis+=30;
$a=30;
}
$nbOrdonne=10;
//Calculer les échelles suivants les abscisses et ordonnées
$echelleX=($largeur-90-((count($js)*10)))/$i;
$echelleY=($hauteur-$absis-20)/$nbOrdonne;
$i=$min;
$py=($max-$min)/$nbOrdonne;
$pasY=$absis;
//Tracer les grides
while($pasY<($hauteur-19))
{
imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
$pasY+=$echelleY;
$i+=$py;
}
$pasX=60;
foreach($result as $row)
{
//Ecrire le mois en Français en abscisse
imagestring($courbe, 2, $pasX,$hauteur-$absis+32 , type, $noir);
//Décaller 10 px du mois précédent
$pasX+=10;
//Calculer la hauteur de la rectangle
$y=($hauteur) -(($row->duree -$min) * ($echelleY/$py))-$absis;
//Prendre la couleur correspondante au produit
$im = imagecreatetruecolor(55, 30);
$white = imagecolorallocate($im, 255, 255, 255);
//Dessiner le rectangle
imagefilledrectangle($courbe,$pasX-10 , $hauteur-$absis+$a, $pasX+10, $y, $white);
//Ecrire la valeur en verticale
imagefttext($courbe, 10, 270, $pasX-3, $y+5, $blanc, $font_file, $row->duree);
//Decaller le prochain rectangle
$pasX+=$echelleX;
}
imagepng($courbe);
imagedestroy($courbe);
?> |
Partager