PHP + SQL + Jpgraph = j'y arrive pas

PHP + SQL + Jpgraph = j'y arrive pas - PHP - Programmation

Marsh Posté le 09-04-2014 à 13:16:37    

Bonjour
tout est dans le titre,
j'essaie de faire un graphe à partir d'une base sql
 
pour l'instant tout est dans wamp pour la facilité d'utilisation.
 
Voila mon code, merci de votre aide
 

Code :
  1. <?php
  2. include ("src/jpgraph.php" );
  3. include ("src/jpgraph_line.php" );
  4. //connexion base de donéne sql
  5. $host = "localhost";
  6. $user = "test";
  7. $pass = "test";
  8. $base = "M3";
  9. $table = "M3";
  10. $array1 = array();
  11. $array2 = array();
  12. //test
  13. //test2
  14. $ECO = mysql_connect("127.0.0.1", "test", "test" ) or trigger_error(mysql_error(),E_USER_ERROR);
  15. print_r($ECO);
  16. $query2 = 'SELECT VALEUR1 from M3.M3 LIMIT 10';
  17. print_r ($query2);
  18. $array2 = mysql_query($query2) or die('Error sur '.$query2.'<br/>'.mysql_error());
  19. print_r ($array2);
  20. while ($data = mysql_fetch_assoc($array2))
  21. {
  22. echo '<b>'.$data['VALEUR1'];
  23. }
  24. // creation du graph
  25. // Création du conteneur
  26. $graph = new Graph(500,300);
  27. // Fixer les marges
  28. $graph->img->SetMargin(40,30,50,40);   
  29. // Mettre une image en fond
  30. $graph->SetBackgroundImage("images/blueblack400x300grad.png",BGIMG_FILLFRAME);
  31. // Lissage sur fond blanc (évite la pixellisation)
  32. //$graph->img->SetAntiAliasing("white" );
  33. // A détailler
  34. $graph->SetScale("textlin",0,2000);
  35. // Ajouter une ombre
  36. //$graph->SetShadow();
  37. // Ajouter le titre du graphique
  38. //$graph->title->Set("Graphique 'courbes' : VALEUR1" );
  39. // Afficher la grille de l'axe des ordonnées
  40. $graph->ygrid->Show();
  41. // Fixer la couleur de l'axe (bleu avec transparence : @0.7)
  42. $graph->ygrid->SetColor('blue@0.7');
  43. // Des tirets pour les lignes
  44. $graph->ygrid->SetLineStyle('dashed');
  45. // Afficher la grille de l'axe des abscisses
  46. $graph->xgrid->Show();
  47. // Fixer la couleur de l'axe (rouge avec transparence : @0.7)
  48. $graph->xgrid->SetColor('red@0.7');
  49. // Des tirets pour les lignes
  50. $graph->xgrid->SetLineStyle('dashed');
  51. // Apparence de la police
  52. $graph->title->SetFont(FF_ARIAL,FS_BOLD,11);
  53. // Créer une courbes
  54. //$data = array(0, 1, 2, 3, 4, 5);
  55. $courbe = new LinePlot($data);
  56. // Afficher les valeurs pour chaque point
  57. $courbe->value->Show();
  58. // Valeurs: Apparence de la police
  59. $courbe->value->SetFont(FF_ARIAL,FS_NORMAL,9);
  60. $courbe->value->SetFormat();
  61. $courbe->value->SetColor("red" );
  62. // Chaque point de la courbe ****
  63. // Type de point
  64. $courbe->mark->SetType(MARK_FILLEDCIRCLE);
  65. // Couleur de remplissage
  66. $courbe->mark->SetFillColor("green" );
  67. // Taille
  68. $courbe->mark->SetWidth(5);
  69. // Couleur de la courbe
  70. $courbe->SetColor("blue" );
  71. $courbe->SetCenter();
  72. // Paramétrage des axes
  73. $graph->xaxis->title->Set('TEST');
  74. $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
  75. $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
  76. $graph->xaxis->SetTickLabels('test');
  77. //$tdata[] = strtotime($data);  
  78. // Ajouter la courbe au conteneur
  79. $graph->Add($courbe);
  80. $graph->Stroke();
  81. ?>

Reply

Marsh Posté le 09-04-2014 à 13:16:37   

Reply

Marsh Posté le 09-04-2014 à 13:59:49    

Parce que tu penses qu'on va deviner ce qui ne va pas sans plus de précision :??:
 
Juste un truc bizarre qui me saute aux yeux : L23 et L69. $data étant dans un while L23, tu vas te retrouver avec une seule valeur L69 :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-04-2014 à 14:07:43    

salut effectivement mon explication est un peu légère  
 
En fait je n'arrive pas à afficher mon graph, pour l'instant j'ai l'icone qu'on connait quand il manque une image.
 
pour la remarque de rufo, L25 me donne bien 10 valeurs
 

Reply

Marsh Posté le 09-04-2014 à 14:57:35    

T'as pas compris ma remarque donc. L25 est dans la boucle et t'affiche autant de valeurs que ta requête en renvoie. Sauf qu'il affiche 1 valeur à la fois !!! Conclusion : en L69,$data ne contient qu'une seule valeur et non 10 comme tu crois probablement avoir :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-04-2014 à 15:24:35    

ah ok, oui effectivement j'ai 10 fois la meme :(

Reply

Marsh Posté le 09-04-2014 à 16:10:20    

J'utilisais à une époque JPGraph dans mon soft Astres (cf ma signature) dans la partie Stats (/Astres/Support/Stats/StatsLibrary.php). Ca pourrait t'aider. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-04-2014 à 09:33:35    

je continue de ramer
 

Code :
  1. while ($data = mysql_fetch_assoc($array2))
  2. {
  3. ECHO 'valeur : '.$data['VALEUR2'].'<br>';
  4. }


me donne bien mes valeurs, une liste de x valeurs demandées dans $query2 = 'SELECT * from M3.M3 LIMIT 50';
 
partie graphique

Code :
  1. $lineplot = new LinePlot($data);
  2. $graphique->SetScale("textlin" );
  3. $graphique->Add($lineplot);
  4. $graphique->Stroke();


 
mais j'obtiens le message  

Code :
  1. JpGraph Error: 25044 Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).


 
je déprime

Reply

Marsh Posté le 10-04-2014 à 09:43:16    

Y'a de quoi déprimer vu que tu n'écoutes pas rufo.

Reply

Marsh Posté le 10-04-2014 à 09:48:56    

moriss a écrit :

je continue de ramer
 

Code :
  1. while ($data = mysql_fetch_assoc($array2))
  2. {
  3. ECHO 'valeur : '.$data['VALEUR2'].'<br>';
  4. }


me donne bien mes valeurs, une liste de x valeurs demandées dans $query2 = 'SELECT * from M3.M3 LIMIT 50';
 
partie graphique

Code :
  1. $lineplot = new LinePlot($data);
  2. $graphique->SetScale("textlin" );
  3. $graphique->Add($lineplot);
  4. $graphique->Stroke();


 
mais j'obtiens le message  

Code :
  1. JpGraph Error: 25044 Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).


 
je déprime


Bon sang, mais tu vois pas que ta boucle while affiche une à une les valeurs retournées par ta requête et que $data contient donc, à chaque tour de boucle, une seule valeur. Donc, à la L69, $data va contenir une seule valeur, très probablement la dernière affichée par le while, du reste. Donc en Y, c'est sans dote normal que JPgraph n'arrive pas à déterminer le min/max vu que la variable passée en paramètre ne contient qu'une seule valeur et non une liste  :pfff:  
 
Si tu comprends pas avec cette énième explication, je peux plus rien pour toi :/
 
Edit : ah oui, en plus, à JPgraph, tu passes $data au lieu de $data['VALEUR2']. Donc, il risque pas de trouver ta valeur à afficher  :sweat:


Message édité par rufo le 10-04-2014 à 09:50:10

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-04-2014 à 10:18:41    

merci vous deux, pourtant je vous écoute vraiment attentivement
 
mais (ok j'insiste) mais le while retourne tout comme il faut
j'ai bien mes 50 valeurs toutes différentes qui s'affiche
 
une fois mon code lancé, j'obtiens un petit icone,  
j'ai enregistré cette icone, ça me télécharge le fichier graph.php
j'édite avec notepad+ et en fait la premiere ligne contient ma requete et tout le bazar
si je supprime cette requette, mon graph est nickel
 

Code :
  1. <?php
  2. include ("src/jpgraph.php" );
  3. include ("src/jpgraph_line.php" );
  4. include ("src/jpgraph_date.php" );
  5. //connexion base de donéne sql
  6. $host = "localhost";
  7. $user = "test";
  8. $pass = "test";
  9. $base = "M3";
  10. $table = "M3";
  11. $array1 = array();
  12. $array2 = array();
  13. //test
  14. //test2
  15. $ECO = mysql_connect("127.0.0.1", "test", "test" ) or trigger_error(mysql_error(),E_USER_ERROR);
  16. print_r($ECO);
  17. $query2 = 'SELECT * from M3.M3 LIMIT 50';
  18. print_r ($query2);
  19. $array2 = mysql_query($query2) or die('Error sur '.$query2.'<br/>'.mysql_error());
  20. print_r ($array2);
  21. //$row = mysql_num_rows($array2) ;
  22. while ($data = mysql_fetch_assoc($array2))
  23. {
  24. ECHO 'valeur : '.$data['VALEUR2'].'<br>';
  25. ECHO 'Date : '.$data['HEURE'].'<br>';
  26. $xdata[] = $data['HEURE'];
  27. $ydata[] = $data['VALEUR1'];
  28. }
  29. // creation du graph
  30. // instance de la classe Graph, la variable $graphique est affecté par l'object créé
  31. //hauteur : 350 and largeur : 250
  32. $graph = new Graph(600,250,"auto" );
  33. // instance de la classe LinePlot, la variable $lineplot est affectée par l'objet créé
  34. // ce lineplot contient les points définis dans le tableau $ydonnees
  35. $lineplot = new LinePlot($ydata);
  36. $graph->img->SetMargin(40,40,40,50);
  37. //$graph->xaxis->SetFont(FF_FONT1);
  38. //$graph->xaxis->SetTickLabels($xdata);
  39. //$graph->xaxis->scale->SetDateFormat("d-M" );
  40. // cette méthode spécifie le zone du graphique dans l'image avec des coordonnées
  41. //$graph->SetScale("textlin" );
  42. $graph->SetScale ("datint" );
  43. // cette méthode définit la couleur de la ligne du lineplot
  44. $lineplot->SetColor("blue" );
  45. // ajoute le lineplot dans le graphique
  46. $graph->Add($lineplot);
  47. // trace the graphique
  48. $graph->Stroke();
  49. mysql_close();
  50. ?>


 
mon nouveau code qui marche presque

Reply

Marsh Posté le 10-04-2014 à 10:18:41   

Reply

Marsh Posté le 10-04-2014 à 10:22:47    

Résolu (enfin cette étape)
Il fallait seulement que je masque les print_r et les echo
j'obtiens bien mon graphique

Reply

Marsh Posté le 10-04-2014 à 10:30:39    

moriss a écrit :

merci vous deux, pourtant je vous écoute vraiment attentivement
 
mais (ok j'insiste) mais le while retourne tout comme il faut
j'ai bien mes 50 valeurs toutes différentes qui s'affiche
 
une fois mon code lancé, j'obtiens un petit icone,  
j'ai enregistré cette icone, ça me télécharge le fichier graph.php
j'édite avec notepad+ et en fait la premiere ligne contient ma requete et tout le bazar
si je supprime cette requette, mon graph est nickel
 

Code :
  1. <?php
  2. include ("src/jpgraph.php" );
  3. include ("src/jpgraph_line.php" );
  4. include ("src/jpgraph_date.php" );
  5. //connexion base de donéne sql
  6. $host = "localhost";
  7. $user = "test";
  8. $pass = "test";
  9. $base = "M3";
  10. $table = "M3";
  11. $array1 = array();
  12. $array2 = array();
  13. //test
  14. //test2
  15. $ECO = mysql_connect("127.0.0.1", "test", "test" ) or trigger_error(mysql_error(),E_USER_ERROR);
  16. print_r($ECO);
  17. $query2 = 'SELECT * from M3.M3 LIMIT 50';
  18. print_r ($query2);
  19. $array2 = mysql_query($query2) or die('Error sur '.$query2.'<br/>'.mysql_error());
  20. print_r ($array2);
  21. //$row = mysql_num_rows($array2) ;
  22. while ($data = mysql_fetch_assoc($array2))
  23. {
  24. ECHO 'valeur : '.$data['VALEUR2'].'<br>';
  25. ECHO 'Date : '.$data['HEURE'].'<br>';
  26. $xdata[] = $data['HEURE'];
  27. $ydata[] = $data['VALEUR1'];
  28. }
  29. // creation du graph
  30. // instance de la classe Graph, la variable $graphique est affecté par l'object créé
  31. //hauteur : 350 and largeur : 250
  32. $graph = new Graph(600,250,"auto" );
  33. // instance de la classe LinePlot, la variable $lineplot est affectée par l'objet créé
  34. // ce lineplot contient les points définis dans le tableau $ydonnees
  35. $lineplot = new LinePlot($ydata);
  36. $graph->img->SetMargin(40,40,40,50);
  37. //$graph->xaxis->SetFont(FF_FONT1);
  38. //$graph->xaxis->SetTickLabels($xdata);
  39. //$graph->xaxis->scale->SetDateFormat("d-M" );
  40. // cette méthode spécifie le zone du graphique dans l'image avec des coordonnées
  41. //$graph->SetScale("textlin" );
  42. $graph->SetScale ("datint" );
  43. // cette méthode définit la couleur de la ligne du lineplot
  44. $lineplot->SetColor("blue" );
  45. // ajoute le lineplot dans le graphique
  46. $graph->Add($lineplot);
  47. // trace the graphique
  48. $graph->Stroke();
  49. mysql_close();
  50. ?>


 
mon nouveau code qui marche presque


Normal que ça marche presque, tu passes bien un tableau de données à JPGraph et plus 1 seule valeur...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-04-2014 à 10:31:49    

moriss a écrit :

Résolu (enfin cette étape)
Il fallait seulement que je masque les print_r et les echo
j'obtiens bien mon graphique


Effectivement, si t'affiches direct l'image dans le flux, fait pas le polluer avec des écritures dans le flux qui n'ont rien à voir avec l'image. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-04-2014 à 10:59:37    

par contre je voudrais comprendre
 
tu dis que j'ai qu'un valeur, pourtant je te confirme que non
j'ai bien des dizaines de valeurs
 
j'ajoute une deuxieme variable  
$ydata2[] = $data['VALEUR2'];
 
et j'obtient bien une deuxieme courbe (actuellement environ 200 valeurs)
je peux mettre une image
 
donc je pige pas ce qui est faux, par contre je peux comprendre que c'est pas beau, mais ça fonctionne
 

Reply

Marsh Posté le 10-04-2014 à 11:08:36    

Dans ton premier code, les lignes $xdata[] = $data['HEURE']; et
$ydata[] = $data['VALEUR1']; n'y étaient pas dans le while. T'avais que le echo de $data['VALEUR2'].
Ca pouvait donc pas marcher.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-04-2014 à 13:39:49    

ok je comprends mieux
merci bcp de ta patience

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed