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

Langage PHP Discussion :

[GD] Problème d'affichage de l'image


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut [GD] Problème d'affichage de l'image
    Voila depuis 2 jours j'ai un problème pour afficher un graphique en fonction de donnée dans une bdd voila mon problème:

    je recupére les données d'une table que je met dans un tableau:

    La fonction connect()

    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
    16
    <?php
    function connect() {
    	$hote = 'localhost';
    	$name = 'perso';
    	$user = 'root';
    	$pwd  =  '*********';
     
    	try {
    		$bdd = new PDO('mysql:host='.$hote.';dbname='.$name, $user, $pwd);
    	}
    	catch(Exception $e) {
    	        echo 'Erreur : '.$e->getMessage().'<br />';
    	        echo 'N° : '.$e->getCode();
    	}
    	return $bdd;
    }


    La fonction get_all_article()(Static dans la classe article)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    static public function get_all() {
    	$bdd=connect();
    	return $bdd->query("SELECT * FROM articles")->fetchAll(PDO::FETCH_ASSOC);
    }
    Maintenant le code qui est censé générer l'image (dans un fichier histogramme.php a part du reste)


    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
    $i = 0;
    $max = 0;
    /*
    *je récupère les valeur retourné dans ma requête
    *et je détermine le max (pour déterminer la taille final de l'image)
    */
    $all_values = Article::get_all();
    foreach ($all_values as $value){
    	$array_valeur[$i] = (int) $value['I_ARTICLE_STOCK'];
     
            //ici si je fait un echo $array_valeur[$i].'</br>';
            //j'ai bien les valeur dans mon tableau
     
    	if ($max < $array_valeur[$i]) {
    		$max = $array_valeur[$i];
    	}
    	$i++;
    }
    header('Content-Type: image/png');
     
    $im = imagecreatetruecolor(600, 600); //normalement déterminer par $i et $max
    $bleu = imagecolorallocate($im, 29, 56, 252);
    $bleu2 = imagecolorallocate($im, 134, 149, 253);
    $gris = imagecolorallocate($im, 193, 193, 193);
     
    // ariére plan gris
    imagefilledrectangle($im, 0, 0, 599, 599, $gris);
     
     
    $echelle = 400/$max; //nombre d'unité par pixel taille du graph en lui même 400px
    //initialisation des coordonnées
    $x2 = 10;
    $y2 = 405; 
    $x1 = 5;
     
    $i = count($array_valeur);
    for ($j = 0; $j < $i; $j++) {
    	$y1 =  ceil($y2 - $echelle*$array_valeur[$j]); //taille de la barre
    	imagefilledrectangle($im, $x1,$y1,$x2,$y2, $bleu); //affichage 
    	$x2 += 10;
    	$x1 = $x2 - 5;
            //si je fait:
    	//echo 'imagefilledrectangle($im, '.$x1.','.$y1.','.$x2.','.$y2.', $bleu);<br>';
            // le code est bon pas de float a la place de int ect... 
    }
     
    imagepng($im); //affichage de l'image
    imagedestroy($im);
    ?>
    J'appel l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="display/image_histo.php" />
    Et j'obtiens : voir la première image ci-dessous


    Maintenant en bidouillant je remplace:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $all_values = Article::get_all();
    foreach ($all_values as $value){
    	$array_valeur[$i] = (int) $value['I_ARTICLE_STOCK'];
     
            //ici si je fait un echo $array_valeur[$i].'</br>';
            //j'ai bien les valeur dans mon tableau
     
    	if ($max < $array_valeur[$i]) {
    		$max = $array_valeur[$i];
    	}
    	$i++;
    }
    ?>
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // 
    //array(....) généré en fesant un echo dans le foreach précédent 
    //puis copié collé pour pas d'erreur :)
    //
    $all_values = array(639, 164, 1654, 159, 755, 3573, 3830, 203, 272, 103, 0, 46, 2502, 2312, 509, 2829, 1419, 2359, 482, 3461, 106, 3288, 2881, 3455, 974, 2130, 62, 104, 216, 1321, 64, 23, 101, 43, 59, 362, 802, 172, 206, 146, 212, 88, 0, 143, 80, 123, 241, 288, 123, 139, 384);
    foreach ($all_values as $value){
    	$array_valeur[$i] = $value;
    	if ($max < $array_valeur[$i]) {
    		$max = $array_valeur[$i];
    	}
    	$i++;
    }
    ?>
    Et j'obtiens bien l'image mais les données ne viennent de la bdd:
    (voir i'image en pj)

    Avec le code de remplacement j'ajoute juste ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = Articles::get_all();
    Avec ça sa marche plus , je pense que ça viens de ma fonction get_all ou connect() comme si il y avait un "echo" dans ces fonctions.


    Merci d'avance
    Alexandre
    Images attachées Images attachées   

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Re, voila je reviens pour dire que j'ai testé un truc qui fonctionne:

    J'ai mit ma fonction connect() dans le fichier image_histo.php (celui qui génére l'image) et j'ai mit aussi ma requête dans le même fichier aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $all_values = $bdd->query('SELECT I_ARTICLE_STOCK FROM articles')->fetchAll();
    Ce qui est pas super compréhensible sachant que en laissant comme je veux faire (CAD appeler la méthode static get_all) et en faisant un var_dump j'ai bien les valeurs de ma requête return par get_all().

    Je pense que c'est connect qui fait bug l'image (comme corrompu)

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Reprend ton ancien code et commente ces lignes pour afficher l'erreur s'il y a.
    //header('Content-Type: image/png');

    ....
    //imagepng($im); //affichage de l'image
    //imagedestroy($im);
    Aucun caractère ne doit être envoyer vers le navigateur et ouvre directement le fichier qui génère l'image mais ne l'appelle pas dans une balise <img>.

    A+.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Merci d'avoir répondu, alors dans mon test.php j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!--<img src="../Perso/display/image_histo.php" />-->
    <?php 
      include '../src/functions.php';
      require_once  '../class/class_articles.php';
      include 'image_histo.php';
    ?>
    Je vais a l'url test.php et le code source généré est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!--<img src="../Perso/display/image_histo.php" />-->
    ensuite j'essais l'url image_histo.php directement (il manque les include de functions.php et de la class donc je les insére au début de image_histo.php) et j'obtient cette fois-ci:
    ( c'est vide, logique mais moins logique quand on sais que l'image ne se génère pas)

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    ok,
    en mettant un var_dump alors pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $all_values = Article::get_all();
    var_dump($all_values);
    en laissant les 3 lignes commentées.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    hello

    si ce n'est pas un problème avec la méthode Article::getAll(), vérifie les encodages et les BOMS du fichier contenant cette méthode, et de tous les autres par ailleurs.
    On peut avoir des surprises, un BOM par ci par là qui traîne, et hop on a un caractère non désiré qui s'affiche en début de réponse et qu'on comprend pas tout sa vient ce #"$µ££~"é&"'.
    Pour vérifier utilise notepad++, il gère bien tous ces détails.

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage d'une image avec Glade.
    Par tistri dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 21/04/2007, 18h56
  2. Problème d'affichage d'une image GIF
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/04/2007, 10h27
  3. Problème d'affichage d'une image
    Par parano dans le forum C++
    Réponses: 12
    Dernier message: 21/03/2007, 18h57
  4. problème d'affichage d'une image au format DDS (24-bit)
    Par thunderbird dans le forum DirectX
    Réponses: 2
    Dernier message: 22/03/2006, 11h00
  5. [GD] Problème d'affichage d'une image avec gd2
    Par turini dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h59

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