IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[GD] Graph dynamiques : question sur le tuto


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut [GD] Graph dynamiques : question sur le tuto
    Bonjour

    Je souhaite générer un graphique de type "courbes", en PHP, avec des données MySQL.

    J'ai maté une tonne de tutos sur GOOGLE, dont le meilleur et plus complet qui est sur ce site, par Andry Aimé.

    Et pourtant peu importe le tuto, j'ai toujours les deux mêmes problèmes.

    1 - Je n'arrive pas à récupérer dans l'image.php les données MySQL de la page.php. Pire encore, je n'arrive même pas à transférer une pauvre chaîne de caractères par variable (à part par l'url de l'image.php avec $_GET mais j'ai bien trop de données pour que ça soit acceptable)

    2 - Qui plus est, la moindre fonction dans le code de l'image la crash immédiatement. Genre je ne peux ajouter un foreach(), sans qu'immédiatement l'image apparaisse comme cassée !

    Ne pouvant ni récupérer les données, ni les traiter, je suis complètement coincé. Par contre tout le reste (pour la création d'images) fonctionne impeccable.

    PHP : 5.3.26
    GD : enabled, 2.1.0

    Quelqu'un aurait une idée de ce qui bloque ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le plus logique et simple et de sortir les données mysql directement dans la page qui produit l'image.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour.

    Vous voulez dire dans image.php ?

    Si oui, comme indiqué dans le point 2, la moindre fonction plante direct l'image.

    J'avais effectivement essayé cette approche, de faire ma requête ou mon fetch_array dans l'image.php, mais n'importe quelle tentative plante inexorablement l'affichage de l'image dans la page.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Consulte tes logs PHP pour voir quelle est l'erreur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Oui effectivement, il faudrait que je regarde dans le panel admin de mon hébergeur voir s'ils sont dispos.

    Cela dit pas besoin, par chance un ami à moi utilise un autre script qui lui fonctionne pour ce cas de figure.

    Au lieu de générer l'image dans un fichier indépendant image.php commençant par header('Content-type: image/png'); et terminé par : imagepng($image); lui génère tout dans sa page.php, ne met pas de header-type mais juste les instructions de fabrication de l'image, et ensuite termine par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    imagepng($courbe,'jedonne1nomalimage.png');
     
    echo '<html><body>';
    echo '<img src="jedonne1nomalimage.png">';
    echo '</body></html>';
    et là le transfert de variable fonctionne et comme on est dans une page type php et non png bien sûr toutes fonctions de traitement fonctionne.
    ?>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas une bonne façon de faire : si des utilisateurs consultent en même temps la page, l'un va se retrouver avec les graphiques de l'autre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Ah mais si vous avez une alternative plus "correcte" qui fonctionne je suis aussi preneur.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a pas besoin d'une alternative : la méthode que tu voulais employer est la bonne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Une "bonne" méthode qui marche pas...

    Bon... allez dernière tentative avant de la poubeller la bonne méthode qui marche pas.

    Voici l'exemple le plus simple que j'ai pu fabriquer pour montrer le problème.

    Je créé une page.php avec ça dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $fetch = "données de la requête";
     
    echo '<html><body>';
    echo '<img src="image.php">';
    echo '</body></html>';
    ?>
    Et à côté dans le même répertoire je créé une image.php avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    //Type mime de l'image
    header('Content-type: image/png');
    //Chemin vers le police à utiliser
    $image=imagecreatetruecolor(400, 300);
    //Allouer les couleurs à utiliser
    $bleu=imagecolorallocate($image, 100, 100, 255);
    $noir=imagecolorallocate($image, 0, 0, 0);
    imagefilledrectangle($image, 0, 0, 400, 300, $bleu);
    imagestring($image, 2,20 , 20, $fetch, $noir);
    //Envoyer le flux de l'image
    imagepng($image);
    //Desallouer le memoire utiliser par l'image
    imagedestroy($image);
    ?>
    Bon en faisant ça je devrait obtenir une image bleue de 400*300 avec un texte noir, et pourtant ce dernier n'apparaît pas. Par contre, si dans l'image.php je remplace $fetch par "blabla", là le texte apparaît.

    Et ce sur 2 hébergements différents.

    Est-ce normal ? Ai-je commis une erreur dans mon code ?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bon... allez dernière tentative avant de la poubeller la bonne méthode qui marche pas.
    Je te rappelle que tu n'as pas d'alternative.

    Les variables ne sont pas communes entre les deux fichiers.
    Il faut passer $fetch de l'un à l'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $fetch = "données de la requête";
    echo '<html><body>';
    echo '<img src="image.php?fetch=' . $fetch .'">';
    echo '</body></html>';
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    header('Content-type: image/png');
    $fetch = $_GET['fetch'];
    $image=imagecreatetruecolor(400, 300);
    $bleu=imagecolorallocate($image, 100, 100, 255);
    $noir=imagecolorallocate($image, 0, 0, 0);
    imagefilledrectangle($image, 0, 0, 400, 300, $bleu);
    imagestring($image, 2,20 , 20, $fetch, $noir);
    imagepng($image);
    imagedestroy($image);
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Alors, comme indiqué plus haut, je sais faire ça, c'est d'ailleurs le seul moyen que j'ai trouvé lors de mes investigations, mais comme indiqué plus haut j'ai plus d'une centaine de paramètres à faire passer (il s'agit d'un résultat de requête mysql après tout), et, (bizarrement) je ne songe pas utiliser le get et avoir une url de 4000 caractères.
    ____

    Dans le tuto du site, l'auteur défini une array $résultat et l'utilise dans son image sans la passer par GET, et en plus fait un foreach dessus.

    Et là de l'autre côté, dans la vraie vie, bizarrement non seulement on ne peut pas transférer de variable sans GET, mais en plus le moindre foreach dans l'image la fait planter.

    Donc je renouvelle ma question : avez-vous une explication pour faire marcher cette "bonne méthode" ?

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne peux que répéter moi aussi
    1 - il faut faire la requête dans la page qui produit l'image
    2 - s'il y une erreur, il faut aller la lire :
    - dans les logs PHP
    ou
    - en appellant l'url de la page image après avoir retiré le header()

    Une alternative si on ne veut pas déporter la mécanique SGDB, on peut utiliser des sessions PHP. Il faut par contre penser au nettoyage.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Pour les sessions on est d'accord ça marche, c'est beaucoup moins contraignant que le GET.
    __

    Pour le reste j'ai compris ce qui blockait. En rajoutant la fonction error_reporting(E_ALL); dans image.php en lieu et place de son header j'ai constaté qu'il y avait des variables non définies, et a priori une seule variable non définie = plantage systématique de l'image dès qu'on y ajoute une fonction php.

    Là où on se demande plus pourquoi on s'en sort pas, c'est qu'un moment ça marchait sans transfert de données, j'ajoutais une fonction avec une variable non définie et ça marchait, et dès que je définissais la variable ça marchait plus. Donc le contraire complet de ce que je constate maintenant.

    Bon quoi qu'il en soit, en virant les variables non définies qui trainaient du tuto (qui bizarrement ne gênent pas sauf dès qu'on met une fonction même indépendante), maintenant je peux déclarer ma query directement dans l'image, ça ne plante plus.

    Et donc utiliser les données en direct pour produire mon multigraph.

    Moralité, si on met la requête dans page.php, il faut utiliser les variables de session pour transférer les données, et sinon, si on choisit de lancer la query à partir de image.php, il faut pour ça remettre les paramètres de connexion dans le fichier et ne laisser AUCUNE variable non déclarée dans TOUTE la page.

    Enfin, en cas d'erreur et de non accès aisé aux logs, remplacer le header de l'image par la fonction php error_reporting(E_ALL); qui avant les hyeroglyphes produits par l'image pourra peut-être vous laisser entrevoir la raison du problème.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est presque ça.
    Tes variables non déclarées ne posent pas de problème quand tu n'affiches pas les erreurs "notice".
    Quand tu ajoutes error_reporting(E_ALL); une variable non déclarée produit une erreur NOTICE et donc ton image n'est plus bonne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Question sur le tuto "Création et lecture de flux RSS 2.0 en PHP"
    Par Invité dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/05/2009, 15h51
  2. Question sur le tuto menu déroulant
    Par TrexXx dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 05/05/2009, 22h19
  3. [MCD] Question sur un tuto
    Par naunau31 dans le forum Schéma
    Réponses: 7
    Dernier message: 04/02/2009, 16h52
  4. Questions sur le tuto de Yogui sur PHP5
    Par Dendrite dans le forum Langage
    Réponses: 1
    Dernier message: 01/09/2008, 10h19
  5. [AJAX] Question sur un tutos ajax
    Par maximenet dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/03/2006, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo