Dessiner en php
Hors ligneJekkil Le 26/07/2006 à 20:30 Profil de Jekkil Configuration de Jekkil

Bonjour à tous,

  J'essaie de dessiner un graphe en PHP à partir de valeurs que je récupère dans une base de données. Seulement j'obtiens bien l'image en faisant un test avec quelques valeurs, mais quand j'effectue ma requête sql pour aller chercher les vraies valeurs, plus rien n'est dessiné.

Le code test qui marche :


<?php
     $nbre_test
[1]=40;  // 3 valeurs de test
     $nbre_trouv[1]=31;
    
     $nbre_test
[2]=24;
     $nbre_trouv[2]=10;
    
     $nbre_test
[3]=28;
     $nbre_trouv[3]=22;

     $image=imagecreate(600,400);
    
     $blanc
=imageColorAllocate($image,255,255,255);
     $noir=imageColorAllocate($image,0,0,0);
     $ciel=imageColorAllocate($image,200,200,255);
     $orange=imageColorAllocate($image,250,157,0);
     $jaune=imageColorAllocate($image,220,232,0);
    
     ImageLine
($image,0,201,600,201,$noir); // axe horizontal
     ImageLine($image,0,201,0,0,$noir); // axe vertical
    
     ImageLine
($image,1,40,600,40,$ciel) ;
     ImageLine($image,1,80,600,80,$ciel) ;
     ImageLine($image,1,120,600,120,$ciel) ;
     ImageLine($image,1,160,600,160,$ciel) ;
    
    
for ($i=1;$i<4;$i++) {
          $x1 = $i*3+($i-1)*5;
          $x2 = $i*3+$i*5;
          $y1 = 200 - $nbre_test[$i];
          $y2 = 200;
          ImageFilledRectangle($image,$x1,$y1,$x2,$y2,$orange);
          $y1 = 200 - $nbre_trouv[$i];
          ImageFilledRectangle($image,$x1,$y1,$x2,$y2,$jaune);
     }
    
     imagePng
($image);
     imageDestroy($image);
?>


Le code qui ne marche pas :


<?php
     $pseudo
='anonymous';
     $requete = mysql_query("SELECT nb_kj_test,nb_kj_bon FROM test_stat WHERE pseudo='$pseudo'
ORDER BY date DESC LIMIT 0,3"
);
     $p=1;
     while($don = mysql_fetch_row($requete)) {
          $nbre_test[$p] = $don[0];
          $nbre_trouv[$p] = $don[1];
          $p++;
     }

     $image=imagecreate(600,400);
    
     $blanc
=imageColorAllocate($image,255,255,255);
     $noir=imageColorAllocate($image,0,0,0);
     $ciel=imageColorAllocate($image,200,200,255);
     $orange=imageColorAllocate($image,250,157,0);
     $jaune=imageColorAllocate($image,220,232,0);
    
     ImageLine
($image,0,201,600,201,$noir); // axe horizontal
     ImageLine($image,0,201,0,0,$noir); // axe vertical
    
     ImageLine
($image,1,40,600,40,$ciel) ;
     ImageLine($image,1,80,600,80,$ciel) ;
     ImageLine($image,1,120,600,120,$ciel) ;
     ImageLine($image,1,160,600,160,$ciel) ;
    
    
for ($i=1;$i<4;$i++) {
          $x1 = $i*3+($i-1)*5;
          $x2 = $i*3+$i*5;
          $y1 = 200 - $nbre_test[$i];
          $y2 = 200;
          ImageFilledRectangle($image,$x1,$y1,$x2,$y2,$orange);
          $y1 = 200 - $nbre_trouv[$i];
          ImageFilledRectangle($image,$x1,$y1,$x2,$y2,$jaune);
     }
    
     imagePng
($image);
     imageDestroy($image);
?>


A noter que j'ai testé ma requête à part et qu'elle me retourne bien ce que je lui demande...

Je ne comprends vraiment d'où peut venir le problème.

Merci d'avance pour votre aide.

Jekkil.
Hors ligneAnthony Le 26/07/2006 à 20:47 Profil de Anthony Configuration de Anthony

Admin
Salut,

fais un "echo $p;" juste après ton while, si ça affiche "1" c'est que t'as un problème dans le while ;)
--

Hors ligneJekkil Le 26/07/2006 à 21:23 Profil de Jekkil Configuration de Jekkil

Salut Anthony,

Le codage de ce graphe se trouve une sur page "graphe.php" dans le dossier "fonction".
Je l'appelle de cette façon :

<img src="fonction/graphe.php">

Dès qu'il y a une petite erreur dans le code, il n'affiche plus rien.
(par exemple, j'utilisais un $bleu que je n'avais pas initialisé et rien ne s'affichait... il m'a fallu un bon quart d'heure pour trouver ça !)

Après exécution, je n'ai aucun retour d'erreur m'indiquant un numéro de ligne.

J'ai testé ma requête de cette façon et elle retourne bien ce que j'attends :


<?php
$pseudo
='anonymous';
          $requete mysql_query("SELECT nb_kj_test,nb_kj_bon FROM test_stat WHERE pseudo='$pseudo'
ORDER BY date DESC LIMIT 0,3"
);
          $p=1;
          while($don mysql_fetch_row($requete)) {
               $nbre_test[$p] = $don[0];
               $nbre_trouv[$p] = $don[1];
               $p++;
          }
          for ($i=1;$i<4;$i++) {
               echo $nbre_test[$i].'-';
               echo $nbre_trouv[$i].' ';
          }
?>


Qu'en penses-tu ?
Hors ligneAnthony Le 26/07/2006 à 22:22 Profil de Anthony Configuration de Anthony

Admin
T'es sûr que dans ton fichier tu n'as pas oublié de mysql_connect(), de mysql_select_db() avant le mysql_query ?
--

Hors ligneJekkil Le 26/07/2006 à 23:14 Profil de Jekkil Configuration de Jekkil

Effectivement, je n'avais pas mis de mysql_connect(), de mysql_select_db() avant le mysql_query dans mon fichier "graphe.php". J'ai corrigé ça... mais ça n'a rien changé au résultat .
(je pensais que le mysql_connect() et compagnie de la page d'où j'appelais graphe.php suffirait)

En tout cas, le problème n'a pas l'air de venir de là...

On a la possibilité de faire des requêtes sql dans ce genre de situation au moins ?

Merci pour tes réponses très rapides ;)
Hors ligneAnthony Le 26/07/2006 à 23:56 Profil de Anthony Configuration de Anthony

Admin
Ouais tu peux faire des requêtes y'a pas de problème :)

bon je te propose de remplacer ça :


<?php
     $pseudo
='anonymous';
     $requete = mysql_query("SELECT nb_kj_test,nb_kj_bon FROM test_stat WHERE pseudo='$pseudo'
ORDER BY date DESC LIMIT 0,3"
);
     $p=1;
     while($don = mysql_fetch_row($requete)) {
          $nbre_test[$p] = $don[0];
          $nbre_trouv[$p] = $don[1];
          $p++;
     }
?>


par ça :


<?php
     $pseudo
='anonymous';
    //ici n'oublie pas le mysql_connect(), etc...
     $requete = mysql_query('SELECT nb_kj_test,nb_kj_bon FROM test_stat WHERE pseudo='$pseudo'
ORDER BY date DESC LIMIT 3'
);
     $p=1;
     while($don = mysql_fetch_row($requete)) {
          $nbre_test[$p] = $don[0];
          $nbre_trouv[$p] = $don[1];
          $p++;
     }

    exit('la variable $p vaut :',$p,'<br />');
?>


et tu me dis ce que ça affiche :)
--

Hors ligneJekkil Le 27/07/2006 à 00:43 Profil de Jekkil Configuration de Jekkil

Mon premier code de test, celui sans requete sql, m'affiche un rectangle blanc sur lequel j'affiche mes 3 valeurs tests sous la forme de bâtons. Le reste de la page web s'affiche normalement

Mon deuxième code, avec la requête : rien ne s'affiche (même pas de rectangle blanc). Le reste de la page web s'affiche normalement.

Mon deuxième code en faisant le remplacement que tu as proposé (mais en changeant les ' par des " en début et fin de requête, et les , par des . dans le exit => sinon ça marche pas) : rien ne s'affiche (même pas de rectangle blanc). Le reste de la page web s'affiche normalement.

Si j'insère ton code au début de la page web d'où j'appelle <img src="fonction/graphe.php">
ça retourne : "la variable $p vaut :4" et la page web ne s'affiche plus.


[EDIT]
Anthony, j'ai enfin réussi à dessiner ce graphe.

<?php
    
//ici n'oublie pas le mysql_connect(), etc... 
?>

Ca devait être ça le problème... Ce que je comprends pas, c'est que j'avais essayé une première fois, comme tu me l'avais dit, et que ça n'avait rien dessiné . Probablement qu'à ce moment, j'avais un autre défaut sur la page qui faisait tout planter.

Néanmois, le problème est résolu et je t'en remercie .
Hors ligneAnthony Le 27/07/2006 à 12:51 Profil de Anthony Configuration de Anthony

Admin
Ok
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels