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] L'image ne peut être affichée car elle contient des erreurs


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut [GD] L'image ne peut être affichée car elle contient des erreurs
    Bonjour,

    J'essaie de créer un graphique en PHP/MYSQL/GD.
    J'ai commencé par regarder le tutoriel suivant.
    Avant d'utiliser mes propres données, j'essaie de le faire fonctionner tel quel mais j'obtiens le message d'erreur "L'image ..... ne peut être affichée car elle contient des erreurs".

    "Mon" code est donc pour l'instant le suivant:
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    <?php
    	if(session_id() == '')
    		{
    			session_start();
    		}
    	include "PDO_conn.php"; // Connexion à la base de données
     
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8"/>
    </head>
    <body>
    	<div class="container">
    		<header>
    			<script>
    				<!-- Début
    				// Ecran
    				if (window.screen)
    					{
    					css="feuille.css";}
    				document.writeln('<link rel="stylesheet" href="'+css+'" type="text/css">');
    				// End -->
    			</script>
    	    </header>
    	    <main>
    	        <div style="width:1000px" class="center-div">
    		    	<br />
    		    	<h1>ESSAI</h1>
    		    	<br />
    				<br />
    				<?php
    $sqlQuery = "select month(dates) as mois, libelle_produit, sum(quantite) as qtvendu from produit p join vente v using(id_produit)
    where year(dates) = :year and p.id_produit = :idProduit   GROUP BY mois ORDER BY mois ASC";
    $sth = $pdo->prepare($sqlQuery, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $sth->execute(array(':year' => 2008, ':idProduit' => 1));
     
    $moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre');
    $resultat=array();
    $i=0;
    foreach($sth->fetchAll(PDO::FETCH_OBJ) as $row)
    {
        //Mettre la ligne dans le tableau
        $resultat[$row->mois]=$row->qtvendu;
        //Prendre la première quantité vendu comme minimum et maximum
        if($i==0)
    		{
    			$min=$row->qtvendu;
    			$max=$row->qtvendu;
    		}
        //Tester si la quantité vendu est inférieur au minimum et le prendre si il l'est
        if($row->qtvendu < $min)
    		{
    			$min=$row->qtvendu;
    		}
        //Tester si la quantité vendu est inférieur au maximum et le prendre si il l'est
        else
    		{
    			if($row->qtvendu > $max)
    			 {
    			 	$max=$row->qtvendu;
    			}
    		}
        $i++;
    }
     
     
     
     
     
     
     
    //Type mime de l'image
    header('Content-type: image/png');
    //Chemin vers le police à utiliser
    $font_file = './arial.ttf';
    //Adapter la largeur de l'image avec le nombre de donnée
    $largeur=$i*50+90;
    $hauteur=400;
    //Hauteur de l'abscisse par rapport au bas de l'image
    $absis=80;
    //Création de l'image
    $courbe=imagecreatetruecolor($largeur, $hauteur);
    //Allouer les couleurs à utiliser
    $bleu=imagecolorallocate($courbe, 0, 0, 255);
    $ligne=imagecolorallocate($courbe, 220, 220, 220);
    $fond=imagecolorallocate($courbe, 250, 250, 250);
    $noir=imagecolorallocate($courbe, 0, 0, 0);
    $rouge=imagecolorallocate($courbe, 255, 0, 0);
    //Colorier le fond
    imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
    //Tracer l'axe des abscisses
    imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
    //Tracer l'axe des ordonnées
    imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
    //Decaler 10px vers le haut le si le minimum est différent de 0
    if($min!=0)
    {
        $absis+=10;
        $a=10;
    }
    //Nombres des grides verticales
    $nbOrdonne=10;
    //Calcul de l'echelle des abscisses
    $echelleX=($largeur-100)/$i;
    //Calcul de l'echelle des ordonnees
    $echelleY=($hauteur-$absis-20)/$nbOrdonne;
    $i=$min;
    //Calcul des ordonnees des grides
    $py=($max-$min)/$nbOrdonne;
    $pasY=$absis;
    while($pasY<($hauteur-19))
    {
        //Affiche la valeur de l'ordonnee
        imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
        //Trace la gride
        imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
        //Decaller vers le haut pour la prochaine gride
        $pasY+=$echelleY;
        //Valeur de l'ordonnee suivante
        $i+=$py;
    }
     
     
     
     
     
     
     
     
     $j=-1;
     //Position de la première mois de vente
     $pasX=90;
     //Parcourir le tableau pour le traçage de la diagramme
     foreach ($resultat as $mois => $quantite) {
       //calculer la hateur du point par rapport à sa valeur
       $y=($hauteur) -(($quantite -$min) * ($echelleY/$py))-$absis;
       //dessiner le point
       imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
       //Afficher le mois en français avec une inclinaison de 315°
       imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[$mois-1]);
       //Tracer une ligne veticale de l'axe de l'abscisse vers le point
       imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
       if($j!==-1)
        {
          //liée le point actuel avec la précédente
          imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$noir);
        }
        //Afficher la valeur au dessus du point
       imagestring($courbe, 2, $pasX-15,$y-14 , $quantite, $bleu);
       $j=$quantite;
       //enregister la hauteur du point actuel pour la liaison avec la suivante
       $yprev=$y;
       //Decaller l'abscisse suivante par rapport à son echelle
       $pasX+=$echelleX;
    }
    //Envoyer le flux de l'image
    imagepng($courbe);
    //Desallouer le memoire utiliser par l'image
    imagedestroy($courbe);
    ?>
    etc....
    J'ajoute que GD est enable.
    Si vous avez des pistes, elles sont les bienvenues

  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
    Tu ne peux pas avoir en même temps un document HTML et un document image.
    Toute la partie "image" va dans un script séparé que tu appelles avec une balise <img>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="script_image.php" />
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    sabotage,

    Merci de ton intervention, toujours aussi rapide et pertinente.

    Citation Envoyé par sabotage Voir le message
    Tu ne peux pas avoir en même temps un document HTML et un document image.
    Toute la partie "image" va dans un script séparé que tu appelles avec une balise <img>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="script_image.php" />
    Okkkkkkkay....
    Du coup, plus de message d'erreur mais le graphique ne s'affiche pas pour autant.

    script_image.php est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Type mime de l'image
    header('Content-type: image/png');
    //Chemin vers le police à utiliser
    etc......
    //Envoyer le flux de l'image
    imagepng($courbe);
    //Desallouer le memoire utiliser par l'image
    imagedestroy($courbe);
    J'ai mis des valeurs dans les 3 tables mais ... rien pour l'instant.

  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
    Appelle directement le script d'image dans ton navigateur pour voir ce que tu obtiens.
    Eventuellement en enlevant la ligne imagepng($courbe); pour voir s'il y a des erreurs de script avant.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    En fait, le navigateur affiche le texte correspondant au script

  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
    Tu as bien mis http://localhost/tonscript.php ?
    Et le script a bien l'extension PHP ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Oui pour les 2 !

  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
    Tu as bien mis une balise <?php ,elle n'apparait pas dans ton message.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Non. J'avais essayé avec mais le message " L'image ne peut être affichée car elle contient des erreurs" réapparait.
    Je les remets donc mais j'obtiens ce message.

  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
    Enlève la balise header() aussi.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Du coup, j'ai plein de messages d'erreur
    Nom : Sans titre.png
Affichages : 1093
Taille : 55,9 Ko

  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
    Il faut corriger toutes ces erreurs.
    Si des valeurs proviennent du script principale, tu peux les passer par l'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="tonscriptimage.php?i=xxxx" />
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il faut corriger toutes ces erreurs.
    Le tutoriel.
    contiendrait autant d'erreurs ? Curieux, non ?

  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
    Le code II-B-3 va dans le script image, c'est pour ça qu'il te manque $i.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bannannée Denis

    J'ai TESTE le TUTO.

    En fait, il n'y a AUCUNE erreur dans le code !

    Mais dans "II-A. Création des tables", il n'y a que la structure des tables, PAS le contenu des tables !

    On peut le retrouver dans l'archive source.zip, à télécharger ici : Télécharger les codes sources

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO type_produit(id_type,libelle_type) VALUES (1, 'Boisson'),(2, 'Produit Laitier');
     
    INSERT INTO produit(id_produit,id_type, libelle_produit) VALUES (1,1, 'produit1'),(2,1, 'produit2'),(3,1, 'produit3'),(4,1, 'produit4');
     
    INSERT INTO vente (id_vente, id_produit,quantite, dates) VALUES (1, 1, 3521, '2008-01-01 02:02:00'),(2, 1, 4325, '2008-02-01 02:02:01'),(3, 1, 3854, '2008-03-01 02:02:02'),(4, 1, 4002, '2008-04-01 02:02:03'),(5, 1, 4213, '2008-05-01 02:02:04'),(6, 1, 2856, '2008-06-01 02:02:05'),(7, 1, 3842, '2008-07-01 02:02:06'),(8, 1, 4125, '2008-08-01 02:02:07'),(9, 1, 3954, '2008-09-01 02:02:08'),(10, 1, 3845, '2008-10-01 02:02:09'),(11, 1, 3910, '2008-11-01 02:02:10'),(12, 1, 3601, '2008-12-01 02:02:11'),(13, 2, 3856, '2008-01-01 02:02:00'),(14, 2, 4232, '2008-02-01 02:02:01'),(15, 2, 4125, '2008-03-01 02:02:02'),(16, 2, 4102, '2008-04-01 02:02:03'),(17, 2, 3986, '2008-05-01 02:02:04'),(18, 2, 4025, '2008-06-01 02:02:05'),(19, 2, 3965, '2008-07-01 02:02:06'),(20, 2, 4023, '2008-08-01 02:02:07'),(21, 2, 3852, '2008-09-01 02:02:08'),(22, 2, 4015, '2008-10-01 02:02:09'),(23, 2, 4023, '2008-11-01 02:02:10'),(24, 2, 3803, '2008-12-01 02:02:11'),(25, 3, 2508, '2008-01-01 02:02:00'),(26, 3, 2325, '2008-02-01 02:02:01'),(27, 3, 3012, '2008-03-01 02:02:02'),(28, 3, 2931, '2008-04-01 02:02:03'),(29, 3, 2540, '2008-05-01 02:02:04'),(30, 3, 2451, '2008-06-01 02:02:05'),(31, 3, 2365, '2008-07-01 02:02:06'),(32, 3, 2802, '2008-08-01 02:02:07'),(33, 3, 2732, '2008-09-01 02:02:08'),(34, 3, 2412, '2008-10-01 02:02:09'),(35, 3, 2854, '2008-11-01 02:02:10'),(36, 3, 2812, '2008-12-01 02:02:11'),(37, 4, 3945, '2008-01-01 02:02:00'),(38, 4, 3651, '2008-02-01 02:02:01'),(39, 4, 3543, '2008-03-01 02:02:02'),(40, 4, 2968, '2008-04-01 02:02:03'),(41, 4, 3125, '2008-05-01 02:02:04'),(42, 4, 3025, '2008-06-01 02:02:05'),(43, 4, 3211, '2008-07-01 02:02:06'),(44, 4, 2985, '2008-08-01 02:02:07'),(45, 4, 2856, '2008-09-01 02:02:08'),(46, 4, 3012, '2008-10-01 02:02:09'),(47, 4, 2942, '2008-11-01 02:02:10'),(48, 4, 3215, '2008-12-01 02:02:11'),(49, 1, 3245, '2008-01-01 02:02:00'),(50, 1, 4124, '2008-02-01 02:02:01'),(51, 1, 4002, '2008-03-01 02:02:02'),(52, 1, 3845, '2008-04-01 02:02:03'),(53, 1, 4125, '2008-05-01 02:02:04'),(54, 1, 3120, '2008-06-01 02:02:05'),(55, 1, 3456, '2008-07-01 02:02:06'),(56, 1, 4021, '2008-08-01 02:02:07'),(57, 1, 4213, '2008-09-01 02:02:08'),(58, 1, 4036, '2008-10-01 02:02:09'),(59, 1, 3842, '2008-11-01 02:02:10'),(60, 1, 3752, '2008-12-01 02:02:11'),(61, 2, 3512, '2008-01-01 02:02:00'),(62, 2, 3965, '2008-02-01 02:02:01'),(63, 2, 4315, '2008-03-01 02:02:02'),(64, 2, 3956, '2008-04-01 02:02:03'),(65, 2, 4210, '2008-05-01 02:02:04'),(66, 2, 3965, '2008-06-01 02:02:05'),(67, 2, 4256, '2008-07-01 02:02:06'),(68, 2, 4162, '2008-08-01 02:02:07'),(69, 2, 3362, '2008-09-01 02:02:08'),(70, 2, 4102, '2008-10-01 02:02:09'),(71, 2, 3856, '2008-11-01 02:02:10'),(72, 2, 3967, '2008-12-01 02:02:11'),(73, 3, 2921, '2008-01-01 02:02:00'),(74, 3, 2723, '2008-02-01 02:02:01'),(75, 3, 3114, '2008-03-01 02:02:02'),(76, 3, 3124, '2008-04-01 02:02:03'),(77, 3, 2632, '2008-05-01 02:02:04'),(78, 3, 2745, '2008-06-01 02:02:05'),(79, 3, 2845, '2008-07-01 02:02:06'),(80, 3, 2965, '2008-08-01 02:02:07'),(81, 3, 2865, '2008-09-01 02:02:08'),(82, 3, 2563, '2008-10-01 02:02:09'),(83, 3, 2965, '2008-11-01 02:02:10'),(84, 3, 3012, '2008-12-01 02:02:11'),(85, 4, 4032, '2008-01-01 02:02:00'),(86, 4, 4012, '2008-02-01 02:02:01'),(87, 4, 4301, '2008-03-01 02:02:02'),(88, 4, 3501, '2008-04-01 02:02:03'),(89, 4, 3215, '2008-05-01 02:02:04'),(90, 4, 3145, '2008-06-01 02:02:05'),(91, 4, 3352, '2008-07-01 02:02:06'),(92, 4, 3102, '2008-08-01 02:02:07'),(93, 4, 4021, '2008-09-01 02:02:08'),(94, 4, 3521, '2008-10-01 02:02:09'),(95, 4, 3017, '2008-11-01 02:02:10'),(96, 4, 3452, '2008-12-01 02:02:11');

    As-tu téléchargé le fichier 'arial.ttf' ? (font utilisée dans le script)
    Il est aussi dans l'archive.

    D'ailleurs, TOUS les codes source s'y trouvent !



    Et là, ça va tout de suite mieux !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Le code II-B-3 va dans le script image, c'est pour ça qu'il te manque $i.
    En fait, non.
    Mais je t'accorde que ce n'est pas très clair...
    Il aurait pu mettre à chaque fois le code final complet.

    Il faut télécharger les codes sources (archive fourni en fin de tutoriel, sur la 2ème page)

  17. #17
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bannannée Denis
    Mais dans "II-A. Création des tables", il n'y a que la structure des tables, PAS le contenu des tables !
    Bonne année à toi également, jreaux62
    Et .. merci également pour ton intervention, également toujours pertinente (comme ça, je n'aurai pas fait de jaloux). Je ne pouvais pas croire qu'il y ait autant d'erreurs dans un tuto de developpez.com !

    J'avais créé quelques données mais dans le doute je viens de mettre celles qui sont fournies.
    Finalement, en regroupant les 3 scripts fournis, j'ai un script appelant nommé visiteurs.php
    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
    <?php
    	if(session_id() == '')
    		{
    			session_start();
    		}
    	include "../php/PDO_conn.php"; // Inclusion du fichier de connexion à la base de données
     
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8"/>
    </head>
    <body>
    	<div class="container">
    		<header>
    	    </header>
    	    <main>
    	        <div style="width:1000px" class="center-div">
    				<img src="visiteurs_image.php" />
    			</div>
    		</main>
    	</div>
    </body>
    </html>
    Tandis que visiteurs_image.php est le suivant:
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <?php
    $sqlQuery = "select month(dates) as mois, libelle_produit, sum(quantite) as qtvendu from produit p join vente v using(id_produit)
    where year(dates) = :year and p.id_produit = :idProduit   GROUP BY mois ORDER BY mois ASC";
    $sth = $pdo->prepare($sqlQuery, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $sth->execute(array(':year' => 2008, ':idProduit' => 1));
     
    $moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre');
    $resultat=array();
    $i=0;
    foreach($sth->fetchAll(PDO::FETCH_OBJ) as $row)
    {
        //Mettre la ligne dans le tableau
        $resultat[$row->mois]=$row->qtvendu;
        //Prendre la première quantité vendu comme minimum et maximum
        if($i==0)
        {
          $min=$row->qtvendu;
          $max=$row->qtvendu;
        }
        //Tester si la quantité vendu est inférieur au minimum et le prendre si il l'est
        if($row->qtvendu < $min)
        {
          $min=$row->qtvendu;
        }
        //Tester si la quantité vendu est inférieur au maximum et le prendre si il l'est
        else
        {
          if($row->qtvendu > $max)
           {
            $max=$row->qtvendu;
          }
        }
        $i++;
    }
     
     
    //Type mime de l'image
    //header('Content-type: image/png');
    //Chemin vers le police à utiliser
    $font_file = './arial.ttf';
    //Adapter la largeur de l'image avec le nombre de donnée
    $largeur=$i*50+90;
    $hauteur=400;
    //Hauteur de l'abscisse par rapport au bas de l'image
    $absis=80;
    //Création de l'image
    $courbe=imagecreatetruecolor($largeur, $hauteur);
    //Allouer les couleurs à utiliser
    $bleu=imagecolorallocate($courbe, 0, 0, 255);
    $ligne=imagecolorallocate($courbe, 220, 220, 220);
    $fond=imagecolorallocate($courbe, 250, 250, 250);
    $noir=imagecolorallocate($courbe, 0, 0, 0);
    $rouge=imagecolorallocate($courbe, 255, 0, 0);
    //Colorier le fond
    imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
    //Tracer l'axe des abscisses
    imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
    //Tracer l'axe des ordonnées
    imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
    //Decaler 10px vers le haut le si le minimum est différent de 0
    if($min!=0)
    {
        $absis+=10;
        $a=10;
    }
    //Nombres des grides verticales
    $nbOrdonne=10;
    //Calcul de l'echelle des abscisses
    $echelleX=($largeur-100)/$i;
    //Calcul de l'echelle des ordonnees
    $echelleY=($hauteur-$absis-20)/$nbOrdonne;
    $i=$min;
    //Calcul des ordonnees des grides
    $py=($max-$min)/$nbOrdonne;
    $pasY=$absis;
    while($pasY<($hauteur-19))
    {
        //Affiche la valeur de l'ordonnee
        imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
        //Trace la gride
        imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
        //Decaller vers le haut pour la prochaine gride
        $pasY+=$echelleY;
        //Valeur de l'ordonnee suivante
        $i+=$py;
    }
     
     
     
     
     
     
     
     
     $j=-1;
     //Position de la première mois de vente
     $pasX=90;
     //Parcourir le tableau pour le traçage de la diagramme
     foreach ($resultat as $mois => $quantite) {
       //calculer la hateur du point par rapport à sa valeur
       $y=($hauteur) -(($quantite -$min) * ($echelleY/$py))-$absis;
       //dessiner le point
       imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
       //Afficher le mois en français avec une inclinaison de 315°
       imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[$mois-1]);
       //Tracer une ligne veticale de l'axe de l'abscisse vers le point
       imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
       if($j!==-1)
        {
          //liée le point actuel avec la précédente
          imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$noir);
        }
        //Afficher la valeur au dessus du point
       imagestring($courbe, 2, $pasX-15,$y-14 , $quantite, $bleu);
       $j=$quantite;
       //enregister la hauteur du point actuel pour la liaison avec la suivante
       $yprev=$y;
       //Decaller l'abscisse suivante par rapport à son echelle
       $pasX+=$echelleX;
    }
    //Envoyer le flux de l'image
    imagepng($courbe);
    //Desallouer le memoire utiliser par l'image
    imagedestroy($courbe);
    ?>
    J'ai mis en commentaire le type mime de l'image comme me l'a demandé sabotage mais rien ne s'affiche.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Les scripts contenus dans l'archive fonctionnent.

  19. #19
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Oui, effectivement, je viens de trouver mon erreur.
    L'inclusion du fichier de connexion à la base de données était présente dans le fichier appelant mais pas dans le fichier appelé.
    Merci.

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

Discussions similaires

  1. [GD] L'image ne peut être affichée car elle contient des erreurs
    Par Blaise dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 24/09/2019, 10h59
  2. Réponses: 9
    Dernier message: 19/05/2015, 19h41
  3. [GD] L'image ne peut être affichée car elle contient des erreurs
    Par The Free Man dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/07/2009, 18h51
  4. Image ne peut être affichée car elle contient des erreurs !
    Par van-bom dans le forum Hébergement
    Réponses: 1
    Dernier message: 26/05/2008, 11h00
  5. [ImageMagick] Image ne pouvant être affichée car elle contient des erreurs
    Par hutchuck dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 09/12/2005, 13h59

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