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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
$i=0;
$element=array();
$js=array();
while($row=mysql_fetch_object($query)) // La il me donne une erreur, même en changeant par $query le nom de la requête
{
//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->qtvendu; // ICI JE MET "REFE"
$max=$row->qtvendu; // IDEM ICI
array_push($element, $row->libelle_produit); // ICI REF
array_push($js, $row->mois);
}
//Inserer le nom de produit dans le tableau s'il n'est pas encore enregistrer
if(!in_array($row->libelle_produit,$element)) // REMPLACEMENT PAR REF
{
array_push($element, $row->libelle_produit); // REMPLACEMENT PAR REF
}
//Inserer le mois de vente dans le tableau s'il n'est pas encore enregistrer
if(!in_array($row->mois,$js))
{
array_push($js, $row->mois);
}
if($row->qtvendu < $min) // REMPLACEMENT PAR REFE
{
$min=$row->qtvendu; // REMPLACEMENT PAR REFE
}
else
{
if($row->qtvendu > $max) // REMPLACEMENT PAR REFE
{$max=$row->qtvendu;} // idem
}
$i++;
}
//Mettre les mois en Francais dans un tableau
$moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre');
//II-C-4. Préparation de l'image
▲
//Connaissant le nombre de lignes, la quantité minimum et maximum, et le nombre de mois de vente de l'année, nous allons adapter l'échelle et la largeur de l'image par rapport à ces données. Nous allons //aussi générer des couleurs suivant les produits vendus.
//Sélectionnez
//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=0;
$blue=0;
$green=0;
for($n=0;$n<count($element);$n++)
{
$x = $n%3;
switch ($x){
case(0):
$red+=85;
break;
case(1):
$blue+=85;
break;
case(2):
$green+=85;
break;
}
$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;
}
// II-C-5. Traçage du diagramme
▲
//Pour tracer l'histogramme, dessinons des rectangles dont les hauteurs sont calculées par rapport à l'échelle et aux quantités de produits vendus durant le mois avec les couleurs qui sont générées pour //chacun d'eux.
//Sélectionnez
$pasX=60;
mysql_data_seek($query, 0);
$mois=0;
while($row=mysql_fetch_object($query))
{
if($mois<($row->mois))
{
//Ecrire le mois en Français en abscisse
imagestring($courbe, 2, $pasX,$hauteur-$absis+32 , $moisFr[$row->mois-1], $noir);
//Décaller 10 px du mois précédent
$pasX+=10;
}
//Calculer la hauteur de la rectangle
$y=($hauteur) -(($row->qtvendu -$min) * ($echelleY/$py))-$absis; //REMPLACEMENT PAR REFE
//Prendre la couleur correspondante au produit
$clr=$couleur[array_search($row->libelle_produit, $element)]; // REMPLACEMENT PAR REF
//Dessiner le rectangle
imagefilledrectangle($courbe,$pasX-10 , $hauteur-$absis+$a, $pasX+10, $y, $clr);
//Ecrire la valeur en verticale
imagefttext($courbe, 10, 270, $pasX-3, $y+5, $blanc, $font_file, $row->qtvendu); // REMPLACEMENT PAR REFE
//Decaller le prochain rectangle
$pasX+=$echelleX;
$mois=$row->mois;
}
//La legende
$pasX=50;
//Hauteur de la premiere
$pasY=$hauteur-$absis+47;
foreach ($element as $index=>$libelle) // LA JE NE SAIS PAS A QUOI CORRESPOND $INDEX ET $LIBELLE
{
if(($index % 4)==3)
{
$pasX+=120;
$pasY=$hauteur-$absis+47;
}
//Le nom du poduit avec sa couleur
imagestring($courbe, 2, $pasX,$pasY , $libelle, $couleur[$index]);idem/ LA JE NE SAIS PAS A QUOI CORRESPOND $INDEX ET $LIBELLE
{
//Un petit rectangle
imagefilledrectangle($courbe,$pasX+80 , $pasY, $pasX+100, $pasY+12, $couleur[$index]); idem LA JE NE SAIS PAS A QUOI CORRESPOND $INDEX
{
$pasY+=20;
}
imagepng($courbe);
imagedestroy($courbe); |
Partager