[RESOLU] Problème incompréhensible avec jpgraph, php, MySQL,

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème incompréhensible avec jpgraph, php, MySQL,

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 02 déc. 2020, 12:15

Bonjour à tous,

Finalement, un connaisseur (sur le forum FS) m'a proposé la solution pour fixer l'axe de référence.

$graphe->xaxis->SetPos('min'); // Locate x-axis at the top/bottom (max/min)

Voir https://jpgraph.net/download/manuals/classref/ qui peut aider.

Sans maitriser complètement jpgraph j'ai maintenant les bases pour évoluer.
Considérons que le sujet est [RESOLU], même si l'explication du non fonctionnent en local, sous EasyPHP n'est pas trouvée.
Dommage.

PS : Si quelqu'un veut le ficher, je peux le poster.
Voir le résultat : http://geryko.free.fr/jpgraph_courbe_5.php

Merci à tous

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 01 déc. 2020, 12:42

Bonjour,

Problème que je voudrais régler mais pour l'instant, je n'y arrive pas malgré de nombreux essais.

Les étiquettes date et heure sont positionnées par rapport à l'ordonnée 0° C
Donc si la température est négative, les étiquettes date et heure recouvrent la zone de la courbe.
Je peux augmenter la marge (xaxis->SetLabelMargin) mais ça ne fait que décaler le problème.
Si je paramètre pour -1°C, pour -5°C le problème va se représenter.
Il faudrait que l'axe de référence ne soit pas le 0°C mais le bord inférieur de la zone du tracé de courbe.


Y a t'il une possibilité ?
Voir https://jpgraph.net/download/manuals/classref/ (Je ne sais quasiment pas lire l'anglais).
Je n'ai pas trouvé. Même en faisant des traductions.

http://geryko.free.fr/jpgraph_courbe_5.php

Modifier la marge (xaxis->SetLabelMargin) est une meilleure solution que d'ajouter des espaces dans les étiquettes date-heure mais ce n'est pas encore satisfaisant.

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 30 nov. 2020, 00:52

Bonsoir,

J'ai presque résolu mon problème à 95%.
1) J'ai mis mon fichier "jpgraph_courbe_5.php" ainsi que le dossier "SRC' (allégé) sur mon site de FREE

J'avais les 3 erreurs suivantes :
Warning: file_exists(): open_basedir restriction in effect. File(/usr/share/fonts/truetype/arialbd.ttf) is not within the allowed path(s): (/var/www/sda/3/4/geryko) in /var/www/sda/3/4/geryko /src/jpgraph_ttf.inc.php on line 505

Warning: file_exists(): open_basedir restriction in effect. File(/usr/share/fonts/truetype/arialbd.ttf) is not within the allowed path(s): (/var/www/sda/3/4/geryko) in /var/www/sda/3/4/geryko/src/jpgraph_ttf.inc.php on line 510

Catchable fatal error: Argument 1 passed to JpGraphException::defaultHandler() must be an instance of Throwable,
instance of JpGraphExceptionL given in /var/www/sda/3/4/geryko/src/jpgraph_errhandler.inc.php on line 158

2) j'ai supprimer les 3 lignes 104, 114 et 115 "jpgraph_courbe_4b.php" (mises sur PHP France) qui "parlaient" de ARIAL

3) oh surprise ça fonctionne sur FREE. Mais ça ne fonctionne toujours pas en "local" sur EasyPHP.
( Dans $requete = "SELECT * FROM $table ORDER BY date $ordre "; // ajout de ORDER BY date $ordre )

Petits problèmes à traiter :
- Je laisse tomber Arial.
- J'essaie de remettre en gras (Bold) les titres. à voir ??? pas réussi pour l'instant
- les dates chevauchent les températures négatives. à voir , ??? pas réussi pour l'instant

(solution très moche pour l'instant ; ajouter des espaces après la date-heure)

Voir le résultat encourageant : http://geryko.free.fr/jpgraph_courbe_5.php )

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 29 nov. 2020, 18:54

Bonsoir,

OK pour les "@". Je les ai supprimés. (je ne savais plus à quoi ils servaient / Merci)
Je vais réviser un peu sur ce point mais s'il n'y avait que cela ....
Je me considère toujours débutant, car ce n'est pas en y "travaillant" une fois par an que j'apprends beaucoup.

Quant au résultat, rien de changé.
J'ai consulté les fichiers de log, pas d'erreurs.

A tout hasard, je mets quand même le résultat de "error.logs"
[Sun Nov 29 17:39:48.656250 2020] [mpm_winnt:notice] [pid 1528:tid 452] AH00455: Apache/2.4.7 (Win32) PHP/5.4.24 configured -- resuming normal operations
[Sun Nov 29 17:39:48.718750 2020] [mpm_winnt:notice] [pid 1528:tid 452] AH00456: Apache Lounge VC9 Server built: Nov 28 2013 10:45:22
[Sun Nov 29 17:39:48.718750 2020] [core:notice] [pid 1528:tid 452] AH00094: Command line: 'C:\\PROG_G~1\\EASYPH~1.1VC\\binaries\\apache\\bin\\eds-httpd.exe -d C:/Prog_gery/EasyPHP-DevServer-14.1VC9/binaries/apache'
[Sun Nov 29 17:39:48.781250 2020] [mpm_winnt:notice] [pid 1528:tid 452] AH00418: Parent: Created child process 2780
[Sun Nov 29 17:39:50.250000 2020] [mpm_winnt:notice] [pid 2780:tid 1624] AH00354: Child: Starting 64 worker threads.

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par @rthur » 28 nov. 2020, 23:48

Supprime les "@" de ton code, ça sert à masquer les erreurs, il ne faut JAMAIS les utiliser

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 28 nov. 2020, 18:56

Bonsoir,
Résultat des courses !
J'ai eu un peu de temps cet après midi, dimanche pas possible.

Dans mon fichier error.log, je vois bien les erreurs que j'ai provoquées mais pas celles qui sont l'objet du sujet en question.
Pour l'instant je travaille en local (EasyPHP/win)

J'avais bien dans le fichier php.ini :
error_reporting = E_ALL
display_errors = On

En début de page j'ai ajouté
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
Mais aucun changement dans l'affichage des erreurs.

Résultat des tests = inchangé,
Le programme est "séparable" en 2 parties pour les tests en validant ou non la ligne 67 (goto fin;)
Les 2 parties (jpgraph) fonctionnent si les coordonnées de ma bdd sont en "dur" sur le fichier.
La 1ere partie fonctionne à tous les coups.
même avec les coordonnées de ma bdd dans un fichier include_once './protegepw/config.loc.php';
les 2 tableaux array [] date et température sont corrects (en test d'affichage avec les lignes 64 et 65 validées) !

Mais si j'ajoute la 2ème partie, avec les coordonnées de ma bdd en
include_once './protegepw/config.loc.php';
ça ne fonctionne plus. incompréhensible !

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 28 nov. 2020, 10:51

Bonjour or 1,

Merci pour cette information.

Rappel : dans phpinfo() , error_log() n'apparait pas. ( pas même le mot log seul)

Je regarde cela dès que possible, ça ma semble très simple, mais pas aujourd'hui ni demain dimanche.
Pas le temps de jouer, même pour les retraités !

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par or 1 » 27 nov. 2020, 22:56

mettre
$graphe->stroke();
en commentaire et afficher les erreurs ( tutoriels/page-blanche-script-php-comme ... 73178.html )

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 27 nov. 2020, 21:26

Bonsoir,

Voici le code qui fonctionne. Lire le commentaire en tête.

On ne peut pas mettre une photo du résultat sur ce site ? comment ?
Merci

Code : Tout sélectionner

<?php /* Ce fichier de travail en l'état fonctionne bien. (avec la bdd qui va bien évidemment) fichier mis sur la racine du site. Il suffit de mettre un fichier de config de la bdd ailleurs, exemple pour moi ./protegepw/config.loc.php et ca ne fonctionne plus : a) sans utiliser le fichier de confiquration b) en l'utilisant (avec les midifications qui en découlent sur @mysql_connect, @mysql_select_db) Fichier de config non fourni ici qui donne : $host = '127.0.0.1'; $user = 'root'; $pass = ''; $bdd = 'bdd'; */ // require_once "./protegepw/config.loc.php"; // fichier non fourni pour l'exemple require_once("./src/jpgraph.php"); require_once("./src/jpgraph_line.php"); // = courbe define('MYSQL_HOST', '127.0.0.1'); define('MYSQL_USER', 'root'); define('MYSQL_PASS', ''); define('MYSQL_DATABASE', 'bdd'); // la base de données $table = "domotique"; // nom de la table // ********************************************** // Extraction des données dans la base de données // ************************************************* // on crée la requête SQL $sql = "SELECT date, temperature FROM $table"; $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connexion mysql'); @mysql_select_db(MYSQL_DATABASE) or die('Pb de selection de la base'); $mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Pb de requete'); $nombre = 0; while ($row_mois = mysql_fetch_array($mysqlQuery, MYSQL_ASSOC)) { // MYSQL_ASSOC ??? $nombre = $nombre + 1; if (($nombre % 5) == 1) { $date = date( "d/m/y H:i:s ", strtotime($row_mois['date'])); // on convertit la date dans un format français }else{ $date = ''; } $tempera = $row_mois['temperature']; $moisFr[] = $date; $donnees[] = $tempera ; // test d'affichage sans la courbe (fonctionne) // provoque erreur echo " ".$date.' temperature = '.$row_mois['temperature'].'</br>'; } mysql_close(); // On ferme la connexion à la base de données //--> // provoque erreur si pas de goto echo " ".' temperature = '.$tempera.'</br>'; // provoque erreur si pas de goto echo " ".$moisFr[5].' et '.$donnees[5].'</br>'; // pour un test // provoque erreur si pas de goto printf('<pre>%s</pre>', print_r($moisFr,1)); // provoque erreur si pas de goto printf('<pre>%s</pre>', print_r($donnees,1)); //goto fin; // pour ne tester que la bdd // Création du conteneur $graphe = new Graph(1000,500); // ($largeur, $hauteur) // Fixer les marges $graphe->img->SetMargin(70,10,10,140); // G, D, H, B // Désactiver le cadre autour du graphique //sans effet ? $graphe->SetFrame(false); // Lissage sur fond blanc (évite la pixellisation) //sans effet ? $graphe->img->SetAntiAliasing("white"); // Valeurs min et max seront determinees automatiquement $graphe->setScale("textlin"); // Creation de la courbe $courbe = new LinePlot($donnees); // courbe des températures // Chaque point de la courbe **** // Type de point $courbe->mark->SetType(MARK_FILLEDCIRCLE); // Couleur de remplissage du cercle $courbe->mark->SetFillColor("green"); // Taille des cercles, diamètre $courbe->mark->SetWidth(3); // Paramètrage des axes $graphe->xaxis->SetTickLabels($moisFr); // Ajout de la courbe au graphique $graphe->add($courbe); // courbe $graphe->xaxis->SetLabelAngle(90); // abcisse en 90° vertical // Apparence de la police $graphe->title->SetFont(FF_ARIAL,FS_BOLD,11); // Ajout du titre du graphique $graphe->title->set("Températures extérieures à PERSAN"); // Titre pour l'axe horizontal(axe x) et vertical (axe y) $graphe->xaxis->title->SetMargin(110); $graphe->xaxis->title->Set("Géryko"); $graphe->yaxis->title->Set("température en °C"); $graphe->yaxis->title->SetMargin(15); $graphe->xaxis->title->SetFont(FF_ARIAL,FS_BOLD); $graphe->yaxis->title->SetFont(FF_ARIAL,FS_BOLD); // Affichage du graphique $graphe->stroke(); fin: ?>

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par or 1 » 27 nov. 2020, 18:20

si on avez le code php, ce serait plus simple.

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 27 nov. 2020, 17:41

Re,

Quelque chose me chagrine dans ton message de 16h05

Débutant, je ne mets pas l'image dans un fichier. (à quoi cela sert-il ?)
Elle s'affiche directement, à partir de mon fichier jpgraph_courbe_4.php qui fonctionne.
(coordonnées de ma bdd en "dur")

Je m'étais d'ailleurs posé la question en parcourant de la documentation.
Je n'ai donc pas de fonction header() sur jpgraph_courbe_4.php, ni jpgraph_courbe_5.php.

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par @rthur » 27 nov. 2020, 16:05

Dans le fichier log d'erreurs Apache tu devrais avoir un message d'erreur si une erreur s'était effectivement produite, c'est bizarre que tu n'aies rien.

Dans ton code PHP, met en commentaire la ligne où tu as une fonction header() qui définit le Content-Type pour dire que c'est une image.
Ça devrait permettre d'afficher dans ton navigateur ce qui se passe au lieu de "l'image ... ne peut être affichée car elle contient des erreurs."

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 27 nov. 2020, 12:34

Bonjour @rthur ,
Merci pour cette réponse rapide.

Dans info() je ne vois rien sur les log.
seul "C:\Prog_gery\EasyPHP-DevServer-14.1VC9\binaries\xdebug\trace" mais aucun fichier

J'ai pu trouver ça dans C:\........\EasyPHP-DevServer-14.1VC9\binaries\apache\logs
un fichier access.log qui m'indique ceci :
127.0.0.1 - - [27/Nov/2020:11:20:44 +0100] "GET /............./jpgraph_courbe_5.php HTTP/1.1" 200 29443

Qui coïncide avec un erreur provoquée. (est-ce 29443 ?)

==================
EasyPHP14.1 me permet aussi de cliquer "Fichiers log"
- Erreur Apache
- Acces Apache
- Erreur MySql
- EasyPHP
Aucune erreur aux heures où se produit mon erreur.

Re: Problème incompréhensible avec jpgraph, php, MySQL,

par @rthur » 27 nov. 2020, 11:31

L’image « h t t p://127.0.0.1/...../jpgraph_courbe_5.php » ne peut être affichée car elle contient des erreurs.
Regarde dans les logs de ton serveur pour voir le message d'erreur qui provoque celà.

Pour savoir où est le fichier log, fais un phpinfo()

Problème incompréhensible avec jpgraph, php, MySQL,

par Géryko » 27 nov. 2020, 10:58

Bonjour à tous,

J'utilise (débutant jpgraph) jpgraph-4.3.4., php-5, EasyPHP-DevServer-14.1VC9, MySQL,
Tout fonctionne bien pour construire une courbe température en fonction d'une date+heure (100 mesures/24h)
Du classique:
Dans ma bdd je vais chercher les 2 données, date et température.
- la boucle while me crée 2 tableaux array [] date (mise au format FR) et température (float)
- jpgraph affiche la courbe.
Tout fonctionne bien en local mais avec les paramètres de ma bdd mis en "dur".
exemple : define('USER', 'root'); ou $user = 'root';

Ce qui ne fonctionne pas :
Le simple fait d'ajouter (sans même l'utiliser) include_once './protegepw/config.loc.php';
qui permet d'aller chercher les coordonnées de ma bdd provoque une erreur pgraph.! ???

L’image « h t t p://127.0.0.1/...../jpgraph_courbe_5.php » ne peut être affichée car elle contient des erreurs.
alors que les 2 tableaux créés array [] date et température sont corrects !

Si j'utilise l'include, en modifiant : @mysql_connect, @mysql_select_db
les 2 tableaux array [] date et température sont corrects (en test d'affichage) mais j'ai toujours l'erreur . ? !

Il est pourtant normal de ne pas mettre les coordonnées de la bdd dans le fichier de création de courbe !
Quelqu'un peut-il expliquer le phénomène et surtout comment y remédier si cela n'est pas normal ?

En prime mais hors sujet :
Comment faire (un lien ) pour obtenir des précisions sur le N° ou le type d'erreur pour jpgraph ?

Merci d'avance.