Page 1 sur 1

Graphique statistique

Posté : 12 juin 2014, 19:03
par Meryem
Bonjour tout le monde,
SVP j'ai besoin de votre aide dans mon code de graphique statistique, le navigateur m'affiche une page blanche avec une image au top qui n'est pas affichée :
voila le code que j'utilise :
<?php
include('connect.inc');
$query=mysql_query('SELECT MONTH(date) AS mois, YEAR(date) AS annee, engin,(SELECT SUM(numero) FROM signalement WHERE nature_sign="incident" AND MONTH(date)=mois AND YEAR(date)=annee)as qtincident FROM signalement GROUP BY mois ORDER BY mois ASC')  or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$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))
{
    $resultat[$row->mois]=$row->qtincident;
    if($i==0)
		{
			$min=$row->qtincident;
			$max=$row->qtincident;
		}
    if($row->qtincident < $min)
		{
			$min=$row->qtincident;
		}
    else
		{
			if($row->qtincident > $max)
			 {
			 	$max=$row->qtincident;
			}
		}
    $i++;
}
header('Content-type: image/png');
$font_file = './arial.ttf';
$largeur=$i*50+90;
$hauteur=400;
$absis=80;
$courbe=imagecreatetruecolor($largeur, $hauteur);
$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);
imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
if($min!=0)
{
    $absis+=10;
    $a=10;
}
$nbOrdonne=10;
$echelleX=($largeur-100)/$i;
$echelleY=($hauteur-$absis-20)/$nbOrdonne;
$i=$min;
$py=($max-$min)/$nbOrdonne;
$pasY=$absis;
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;
}
$j=-1;
 $pasX=90;
 foreach ($resultat as $mois => $numero) {
   $y=($hauteur) -(($numero -$min) * ($echelleY/$py))-$absis;
   imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
   imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[$mois-1]);
   imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
   if($j!==-1)
    {
      imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$noir);
    }
   imagestring($courbe, 2, $pasX-15,$y-14 , $numero, $bleu);
   $j=$numero;
   $yprev=$y;
   $pasX+=$echelleX;
}
imagepng($courbe);
imagedestroy($courbe);
?>

Re: Graphique statistique

Posté : 12 juin 2014, 19:58
par Elie
Déjà tout ce code est franchement chelou ...
while($row=mysql_fetch_object($query))
{
    $resultat[$row->mois]=$row->qtincident;
    if($i==0)
                {
                        $min=$row->qtincident;
                        $max=$row->qtincident;
                }
    if($row->qtincident < $min)
                {
                        $min=$row->qtincident;
                }
    else
                {
                        if($row->qtincident > $max)
                         {
                                $max=$row->qtincident;
                        }
                }
    $i++;
}
Un truc du genre serait pas plus simple ?
$i = mysql_num_rows($query);
while($row=mysql_fetch_object($query))
{
    $resultat[$row->mois]=$row->qtincident;
}
$max = max($resultat);
$min = min($resultat);
Ensuite a force de faire des couper/sauvegarder, c'est cette phrase qui pause probleme :
   imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, NULL, $moisFr[$mois-1]);
Avec ca ca marche meme si c'est pas tres beau
imagestring($courbe, 2, $pasX , $hauteur-$absis+20, $moisFr[$mois-1], $noir);

Re: Graphique statistique

Posté : 12 juin 2014, 21:04
par Meryem
Merci d'abord pour votre aide :)
J'ai remplacé dans mon code ce que vous venez de me donner mais y a tjrs la même chose, ça n'a pas marché aussi :?

Re: Graphique statistique

Posté : 12 juin 2014, 21:14
par Elie
Le problème vient alors de ta requete SQL car avec mon code simplifié ca marche :
<?php
$moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre');
$resultat=array(2 => 24, 6 => 32, 7 => 60);
$i=3;
$min = 24;
$max = 60;
header('Content-type: image/png');
$font_file = './arial.ttf';
$largeur=$i*50+90;
$hauteur=400;
$absis=80;
$courbe = imagecreatetruecolor($largeur, $hauteur);
$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);
imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
if($min!=0)
{
    $absis+=10;
    $a=10;
}
$nbOrdonne=10;
$echelleX=($largeur-100)/$i;
$echelleY=($hauteur-$absis-20)/$nbOrdonne;
$i=$min;
$py=($max-$min)/$nbOrdonne;
$pasY=$absis;
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;
}
$j=-1;
 $pasX=90;
 foreach ($resultat as $mois => $numero) {
   $y=($hauteur) -(($numero -$min) * ($echelleY/$py))-$absis;
   imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
   //imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, 1, $moisFr[$mois-1]);
   imagestring($courbe, 2, $pasX , $hauteur-$absis+20, $moisFr[$mois-1], $noir);
   imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
   if($j!==-1)
    {
      imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$noir);
    }
   imagestring($courbe, 2, $pasX-15,$y-14 , $numero, $bleu);
   $j=$numero;
   $yprev=$y;
   $pasX+=$echelleX;
}
imagepng($courbe);
imagedestroy($courbe);
?>

Re: Graphique statistique

Posté : 12 juin 2014, 21:43
par Meryem
Oui j'ai testé avec le code que vous avez testé et c'est marché, mais je ne sais pas c'est quoi le problème dans ma requête j'ai testé la requête dans la console de Mysql et c'est marché !!
voila ma requête:
$query=mysql_query('SELECT MONTH(date) AS mois, YEAR(date) AS annee, engin,(SELECT SUM(numero) FROM signalement WHERE nature_sign="incident" AND MONTH(date)=mois AND YEAR(date)=annee)as qtincident FROM signalement GROUP BY mois ORDER BY mois ASC')  or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
Merci infiniment pour votre aide