[RESOLU] Graphique statistique

Eléphanteau du PHP | 17 Messages

12 juin 2014, 19:03

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);
?>

Mammouth du PHP | 1339 Messages

12 juin 2014, 19:58

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);
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 17 Messages

12 juin 2014, 21:04

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 :?

Mammouth du PHP | 1339 Messages

12 juin 2014, 21:14

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);
?>
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 17 Messages

12 juin 2014, 21:43

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