Image dynamyque générée par PHP [Résolu]

- - Dernière réponse : TychoBrahe
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
- 29 déc. 2012 à 21:30
Bonjour,

J'ai un petit souci, j'essaie de créé via PHP une image dynamique (pour l'instant) simple mais je n'arrive pas à la visualiser sur une page de mon NAVIGATEUR

Code php fichier:graphique2.php
<?php
header("Content-type: image/png"); //la ligne qui change tout !
$x = 50; //largeur de mon image en PIXELS uniquement !
$y = 100; //hauteur de mon image en PIXELS uniquement !

/* on créé l'image en vraies couleurs avec une largeur de 50 pixels et une hauteur de 100 pixels */
$image = imagecreatetruecolor($x,$y);
$orange = imagecolorallocate($image, 255, 128, 0);
imagepng($image); //renvoie une image sous format png
imagedestroy($image); //détruit l'image, libérant ainsi de la mémoire
?>

Code dans ma page PHP mère
<?php
echo('
Ici mon Graphique :
');
?>

Je ne vois afficher que ; "Ici mon Graphique : graphique dynamique"

Mon site est hébergé chez FREE.FR, j'ai vérifié phpinfos() et la version de GD bundled (2.0.28 compatible) est bien enabled.
Mes deux fichiers sont sous le même répertoire

quelqu'un aurait-il la gentillesse de m'aider?

Merci d'avance
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
9
3
Merci
Questions idée, en voici quelques unes pour ton PHP :
- utilise les tableaux
- utilise des boucles ou équivalent
- arrête d'utiliser les fonctions mysql_*() !

Et bien entendu utiliser highcharts au lieux de gd.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de TychoBrahe
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
9
0
Merci
Salut,

Chez moi ça marche très bien.
Commenter la réponse de TychoBrahe
0
Merci
Ok, j'ai trouvé l'erreur ;-)

Lors de la création de mon fichier il y avait un espace après la fin du script.

Erreur de débutants.

Par contre comment faire pour créer des courbes avec des données provenant d'une table MySQL?

merci
Commenter la réponse de Jbtree007
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
9
0
Merci
Pour des graphiques de ce genre je te recommande de ne surtout pas utiliser GD. Perso j'utilise Highcharts, c'est un excellent outil de génération de graphs en JavaScript. Bref, génère donc le JS (ou une partie, genre simplement les données) avec PHP et le tour est joué. Nota: json_encode() est ton amie !
Commenter la réponse de TychoBrahe
0
Merci
Merci pour ta réponse mais je sais pas si chez Free je peux faire appel a Highcharts.
En fait j'ai un fichier : _module_recap_sats_plieur.php qui fonctionne bien et qui me donne des valeurs
<?php
//STATISTIQUES PLIAGES OUVERTURE EN VOL ET/OU DECLENCHEMENT OUVREUR DE SECURITE
//NOMBRE DE PLIAGES OUVERTURE EN VOL
$sql4 = "SELECT `ouv_vol` FROM `mat_pliage` WHERE `ouv_vol` LIKE 'O' AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req4 = mysql_query($sql4) or die('ligne 249 Erreur SQL !
'.$sql4.'
'.mysql_error());
//On récupère les données
$nb_total_ouv_vol = mysql_num_rows($req4);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE
$sql5 = "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%O%' AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req5 = mysql_query($sql5) or die('ligne 255 Erreur SQL !
'.$sql5.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu = mysql_num_rows($req5);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE AU SOL
$sql6 = "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%S' AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req6 = mysql_query($sql6) or die('ligne 261 Erreur SQL !
'.$sql6.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu0 = mysql_num_rows($req6);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE DANS UN AERONEF EN VOL
$sql7 = "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%A' AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req7 = mysql_query($sql7) or die('ligne 267 Erreur SQL !
'.$sql7.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu1 = mysql_num_rows($req7);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE en chute libre
$sql8 = "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%C' AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req8 = mysql_query($sql8) or die('ligne 273 Erreur SQL !
'.$sql8.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu2 = mysql_num_rows($req8);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE sous voile principale ouverte
$sql9 = "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%V' AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req9 = mysql_query($sql9) or die('ligne 279 Erreur SQL !
'.$sql9.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu3 = mysql_num_rows($req9);
//----------------------------------------------------------------------------------------
//CALCULS pour une période donnée
//Nb de PLIAGES sur DEUX ANS
$sql0 "SELECT * FROM `mat_pliage` WHERE 1 AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req0 = mysql_query($sql0) or die('Erreur SQL Ligne 287 !
'.$sql0.'
'.mysql_error());
//
$nb_total_pliages_inscrits_periode = mysql_num_rows($req0);
//NOMBRE DE PLIAGES OUVERTURE EN VOL sur DEUX ANS
$sql4_1 "SELECT `ouv_vol` FROM `mat_pliage` WHERE `ouv_vol` LIKE 'O' AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";
// on envoie la requete
$req4_1 = mysql_query($sql4_1) or die('ligne 293 Erreur SQL !
'.$sql4_1.'
'.mysql_error());
//On récupère les données
$nb_total_ouv_vol_periode = mysql_num_rows($req4_1);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE
$sql5_1 "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%O%' AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req5_1 = mysql_query($sql5_1) or die('ligne 299 Erreur SQL !
'.$sql5_1.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu_periode = mysql_num_rows($req5_1);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE AU SOL
$sql6_1 "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%S' AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req6_1 = mysql_query($sql6_1) or die('ligne 305 Erreur SQL !
'.$sql6_1.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu0_periode = mysql_num_rows($req6_1);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE DANS UN AERONEF EN VOL
$sql7_1 "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%A' AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req7_1 = mysql_query($sql7_1) or die('ligne 311 Erreur SQL !
'.$sql7_1.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu1_periode = mysql_num_rows($req7_1);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE en chute libre
$sql8_1 "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%C' AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req8_1 = mysql_query($sql8_1) or die('ligne 317 Erreur SQL !
'.$sql8_1.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu2_periode = mysql_num_rows($req8_1);
//NOMBRE DE DECLENCHEMENT OUVREUR DE SECURITE sous voile principale ouverte
$sql9_1 "SELECT `decle` FROM `mat_pliage` WHERE `decle` LIKE '%V' AND (YEAR(date) ".$annees_debut." OR YEAR(date) = ".$annees_fin.") AND `num_enrg` NOT LIKE '%M%' ";//Pliage non MODIFIE
// on envoie la requete
$req9_1 = mysql_query($sql9_1) or die('ligne 323 Erreur SQL !
'.$sql9_1.'
'.mysql_error());
//On récupère les données
$nb_total_decle_secu3_periode = mysql_num_rows($req9_1);
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/// Calcul du poucentage
function Pourcentage($Nombre, $Total) {
if($Total != 0){
return round($Nombre * 100 / $Total,2);
}else{
return 0;
}
}

/* Exemple: */
$Pourcent_pds = Pourcentage($nb_total_ouv_vol, $nb_total_pliages_inscrits);
$Pourcent_pds.='%'; //Affiche % des procédure de secours / total des pliages
$Pourcent_decle = Pourcentage($nb_total_decle_secu, $nb_total_pliages_inscrits);
$Pourcent_decle.='%'; //Affiche % des déclenchements ouvreurs / total des pliages
$Pourcent_decle0 = Pourcentage($nb_total_decle_secu0, $nb_total_decle_secu);
$Pourcent_decle0.='%'; //Affiche % des déclenchements au sol / total des declenchements ouvreurs
$Pourcent_decle1 = Pourcentage($nb_total_decle_secu1, $nb_total_decle_secu);
$Pourcent_decle1.='%'; //Affiche % des déclenchements en vol / total des declenchements ouvreurs
$Pourcent_decle2 = Pourcentage($nb_total_decle_secu2, $nb_total_decle_secu);
$Pourcent_decle2.='%'; //Affiche % des déclenchements en chute / total des declenchements ouvreurs
$Pourcent_decle3 = Pourcentage($nb_total_decle_secu3, $nb_total_decle_secu);
$Pourcent_decle3.='%'; //Affiche % des déclenchements sous voile / total des declenchements ouvreurs
/*Periode 2 ans*/
$Pourcent_pds_periode = Pourcentage($nb_total_ouv_vol_periode, $nb_total_pliages_inscrits_periode);
$Pourcent_pds_periode.='%'; //Affiche % des procédure de secours / total des pliages
$Pourcent_decle_periode = Pourcentage($nb_total_decle_secu_periode, $nb_total_pliages_inscrits_periode);
$Pourcent_decle_periode.='%'; //Affiche % des déclenchements ouvreurs / total des pliages
$Pourcent_decle0_periode = Pourcentage($nb_total_decle_secu0_periode, $nb_total_decle_secu_periode);
$Pourcent_decle0_periode.='%'; //Affiche % des déclenchements au sol / total des declenchements ouvreurs
$Pourcent_decle1_periode = Pourcentage($nb_total_decle_secu1_periode, $nb_total_decle_secu_periode);
$Pourcent_decle1_periode.='%'; //Affiche % des déclenchements en vol / total des declenchements ouvreurs
$Pourcent_decle2_periode = Pourcentage($nb_total_decle_secu2_periode, $nb_total_decle_secu_periode);
$Pourcent_decle2_periode.='%'; //Affiche % des déclenchements en chute / total des declenchements ouvreurs
$Pourcent_decle3_periode = Pourcentage($nb_total_decle_secu3_periode, $nb_total_decle_secu_periode);
$Pourcent_decle3_periode.='%'; //Affiche % des déclenchements sous voile / total des declenchements ouvreurs
?>

Ces valeurs je voudrais aussi les voir afficher dans cette image :graphique1.php
j'ai donc mis ce module dans ma page pricipale ou il y a les identifiants de connection.
echo('
');

Mon fichier graphique1.php fonctionne bien mais me fait la meme erreur lorsque je lui fait un include('../_PHP/_module_recap_stats_plieur.php'); pour que les courbes soient fonction des enregistrements trouvés.

Voilà le fichier graphique1.php
<?php
header ("Content-type: image/png");

//include('../_PHP/_module_recap_stats_plieur.php'); // On inclut le calcul des pourcentages

// Script de creation de graphique dynamique en PHP
$valeur1 = 40; //la valeur 1 equivault à 25%
$valeur2 = 20; //la valeur 2 equivault à 50%
$valeur3 = 20; //la valeur 3 equivault à 75%
$valeur4 = 20; //la valeur 4 equivault à 100%
//$valeur5 = 0; //la valeur 5 equivault à 85
//Les mêmes valeurs provenant de la table MySQl
/*$valeur1 = $Pourcent_decle0; //la valeur 1 equivault à x%*/
$valeur2 = $Pourcent_decle1; //la valeur 2 equivault à x%*/
$valeur3 = $Pourcent_decle2; //la valeur 3 equivault à x%*/
$valeur4 = $Pourcent_decle3; //la valeur 4 equivault à x%*/
//$valeur5 = 85; //la valeur 5 equivault à 85%*/
$legende1 = 'Sol';
$legende2 = 'Aeronef';
$legende3 = 'Chute';
$legende4 = 'Voile';

// Taille de l'image
$img = @imagecreate (540, 220) or die ("Erreur lors de la création de l'image");

// Couleur de fond
$fond = ImageColorAllocate ($img, 208, 216, 213);

// Couleur des axes, des lignes et des legendes
$coul_axes = ImageColorAllocate ($img, 11, 62, 43);
$coul_lignes = ImageColorAllocate ($img, 227, 235, 232);
$coul_legendes = ImageColorAllocate ($img, 11, 62, 43);

// Couleur des barres du graphique
$coul_barre1 = ImageColorAllocate ($img, 42, 124, 94);
$coul_barre2 = ImageColorAllocate ($img, 0, 90, 94);
$coul_barre3 = ImageColorAllocate ($img, 0, 38, 131);
$coul_barre4 = ImageColorAllocate ($img, 100, 38, 131);
$coul_barre5 = ImageColorAllocate ($img, 165, 38, 131);

// Axe verticale et axe horizontale
imageline ($img, 30, 30, 30, 190, $coul_axes);
imageline ($img, 30, 190, 520, 190, $coul_axes);

// Création des polygone, ici un rectangle, d'ordonnes et d'abcisse
$tab_fleche_ord = array(30, 30, 26, 34, 34, 34);
imagefilledpolygon ($img, $tab_fleche_ord, 3, $coul_axes);

// Création d'un polygone, ici un rectangle, d'abscisse (en bas à droite)
$tab_fleche_abs = array(520, 190, 516, 186, 516, 194);
imagefilledpolygon ($img, $tab_fleche_abs, 3, $coul_axes);

// Legende de l'abscisse et de l'ordonnees
imagettftext($img,10,0,5,20,$coul_legendes,"arial.ttf","Pourcentage");
imagettftext($img,10,0,440,180,$coul_legendes,"arial.ttf","Déclenchements");


// Trait blanc permettant une meilleur lisibilite des graphique
imageline ($img, 31, 155, 520, 155, $coul_lignes);
imageline ($img, 31, 120, 520, 120, $coul_lignes);
imageline ($img, 31, 85, 520, 85, $coul_lignes);
imageline ($img, 31, 50, 520, 50, $coul_lignes);

// L'axe des ordonnees, en haut à gauche, dispose d'une graduation de 0 à 20
imageline ($img, 26, 155, 30, 155, $coul_axes); // 5
imageline ($img, 26, 120, 30, 120, $coul_axes); // 10
imageline ($img, 26, 85, 30, 85, $coul_axes); // 15
imageline ($img, 26, 50, 30, 50, $coul_axes); // 20

// Legende des graduation de l'ordonnes, en haut à gauche
imagettftext($img,8,0,15,190,$coul_legendes,"arial.ttf","0");
imagettftext($img,8,0,9,157,$coul_legendes,"arial.ttf","25");
imagettftext($img,8,0,9,122,$coul_legendes,"arial.ttf","50");
imagettftext($img,8,0,9,87,$coul_legendes,"arial.ttf","75");
imagettftext($img,8,0,3,52,$coul_legendes,"arial.ttf","100");

// Création de la barres graphique relative aux valeurs 1, 2, 3, 4 et 5
imagefilledrectangle ($img, 40, ((100-$valeur1)*1.4)+50, 110, 189, $coul_barre1);
imagefilledrectangle ($img, 120, ((100-$valeur2)*1.4)+50, 190, 189, $coul_barre2);
imagefilledrectangle ($img, 200, ((100-$valeur3)*1.4)+50, 270, 189, $coul_barre3);
imagefilledrectangle ($img, 280, ((100-$valeur4)*1.4)+50, 350, 189, $coul_barre4);
//imagefilledrectangle ($img, 360, ((100-$valeur5)*1.4)+50, 430, 189, $coul_barre5);

// Couleur BLANCHE indiquant la valeur de chaque barre
$coul_valeur = ImageColorAllocate ($img, 255, 255, 255);

// Legende de la valeur1
ImageTTFText ($img,10,0,65,180,$coul_valeur,"arial.ttf",$valeur1."%");
ImageTTFText ($img,10,0,65,210,$coul_legendes,"arial.ttf",$legende1);

// Legende de la valeur2
ImageTTFText ($img,10,0,142,180,$coul_valeur,"arial.ttf",$valeur2."%");
ImageTTFText ($img,10,0,142,210,$coul_legendes,"arial.ttf",$legende2);

// Legende de la valeur3
ImageTTFText ($img,10,0,222,180,$coul_valeur,"arial.ttf",$valeur3."%");
ImageTTFText ($img,10,0,222,210,$coul_legendes,"arial.ttf",$legende3);

// Legende de la valeur4
ImageTTFText ($img,10,0,299,180,$coul_valeur,"arial.ttf",$valeur4."%");
ImageTTFText ($img,10,0,299,210,$coul_legendes,"arial.ttf",$legende4);

// Legende de la valeur5
//ImageTTFText ($img,10,0,383,180,$coul_valeur,"arial.ttf",$valeur5."%");


// Création de l'image
imagepng ($img);
// Libération de la mémoire associée
imagedestroy($img);
?>

Peux-tu m'aider a comprendre pourquoi cela ne fonctionne pas avec les valeurs de ma table MySQL?

Merci d'avance
Commenter la réponse de Jbtree007
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
9
0
Merci
C'est du JavaScript, donc côté client. Ton hébergeur vas pas restreindre ça. Sérieux, ce sera carrément mieux que la tambouille indigeste que tu es en train de préparer.
Commenter la réponse de TychoBrahe
0
Merci
Si tu as une meilleure idée, suis preneur.

Sinon je viens de trouver, il faut que je mette mes paramêtres de connection au debut du fichier graphique1.php
Commenter la réponse de Jbtree007