Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
538 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP + SQL + Jpgraph = j'y arrive pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP + SQL + Jpgraph = j'y arrive pas

n°2224585
moriss
Posté le 09-04-2014 à 13:16:37  profilanswer
 

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

mood
Publicité
Posté le 09-04-2014 à 13:16:37  profilanswer
 

n°2224596
rufo
Pas me confondre avec Lycos!
Posté le 09-04-2014 à 13:59:49  profilanswer
 

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
n°2224599
moriss
Posté le 09-04-2014 à 14:07:43  profilanswer
 

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
 

n°2224621
rufo
Pas me confondre avec Lycos!
Posté le 09-04-2014 à 14:57:35  profilanswer
 

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
n°2224629
moriss
Posté le 09-04-2014 à 15:24:35  profilanswer
 

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

n°2224639
rufo
Pas me confondre avec Lycos!
Posté le 09-04-2014 à 16:10:20  profilanswer
 

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
n°2224691
moriss
Posté le 10-04-2014 à 09:33:35  profilanswer
 

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

n°2224694
Pablo Escr​obarbe
Retour d'exil
Posté le 10-04-2014 à 09:43:16  profilanswer
 

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

n°2224696
rufo
Pas me confondre avec Lycos!
Posté le 10-04-2014 à 09:48:56  profilanswer
 

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
n°2224699
moriss
Posté le 10-04-2014 à 10:18:41  profilanswer
 

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

mood
Publicité
Posté le 10-04-2014 à 10:18:41  profilanswer
 

n°2224701
moriss
Posté le 10-04-2014 à 10:22:47  profilanswer
 

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

n°2224703
rufo
Pas me confondre avec Lycos!
Posté le 10-04-2014 à 10:30:39  profilanswer
 

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
n°2224704
rufo
Pas me confondre avec Lycos!
Posté le 10-04-2014 à 10:31:49  profilanswer
 

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
n°2224706
moriss
Posté le 10-04-2014 à 10:59:37  profilanswer
 

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
 

n°2224707
rufo
Pas me confondre avec Lycos!
Posté le 10-04-2014 à 11:08:36  profilanswer
 

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
n°2224725
moriss
Posté le 10-04-2014 à 13:39:49  profilanswer
 

ok je comprends mieux
merci bcp de ta patience


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP + SQL + Jpgraph = j'y arrive pas

 

Sujets relatifs
Regroupage tableau par mois et par année en SQLRequête SQL basée sur paramètre et table un peu étrange
Aide formulaire d'inscription PHP page blancheLISTE DEROULANTE PHP MYSQL
PHP et UTF-8Pervasive SQL Mettre a jour une Table
[PHP] Quelle API pour utiliser les données de localisation ?[AIDE] code HTML/PHP formulaire avec envoi mail automatique
Je n'y arrive vraiment pas ='( 
Plus de sujets relatifs à : PHP + SQL + Jpgraph = j'y arrive pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR