Réalisation des graphique avec jpGraph [Résolu]

pharelka 6 Messages postés mardi 29 juillet 2014Date d'inscription 29 août 2014 Dernière intervention - 29 juil. 2014 à 18:07 - Dernière réponse : pharelka 6 Messages postés mardi 29 juillet 2014Date d'inscription 29 août 2014 Dernière intervention
- 31 juil. 2014 à 17:41
Bonjour à tous,
Je dois faire des graphiques que je mettrais à mon site, mais lorsque j'exécute mon code rien ne s'affiche et j'ai cette erreur(ci-dessous), j'ai crée le dossier tmp pour stocker mes images mais rien ne fonctionne, svp j'ai besoin de vos aides
Cordialement..
Merci...
Erreur:
L'image<<http://localhost/jpgraph/jpgraph.php>>ne peut etre affiché car elle contient des erreurs.

Voici mon code
____________

<?php

include ("../jpgraph/src/jpgraph.php");
include ("../jpgraph/src/jpgraph_bar.php");

define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PASS', '');
define('MYSQL_DATABASE', 'graphe');
// ********************************************************************
// PARTIE : Production des données avec Mysql
// ********************************************************************

$sql = <<<EOF
SELECT
YEAR('DTHR_VENTE') AS ANNEE,
COUNT(ID) AS NBR_VENTES
FROM 'ventes'
GROUP BY YEAR('DTHR_VENTE')
EOF;

// Connexion à la BDD
$mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');

// Sélection de la base de données
@mysql_select_db(MYSQL_DATABASE) or die('Pb de sélection de la base');

// Requête
$mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Pb de requête');

// Fetch sur chaque enregistrement
while ($row = mysql_fetch_array($mysqlQuery, MYSQL_ASSOC)) {
// Alimentation des tableaux de données
$tableauAnnees[] = 'Année ' . $row['ANNEE'];
$tableauNombreVentes[] = $row['NBR_VENTES'];
}

// *******************
// Création du graphique
// *******************


// Construction du conteneur
// Spécification largeur et hauteur
$graph = new Graph(400,250);

// Réprésentation linéaire
$graph->SetScale("textlin");

// Ajouter une ombre au conteneur
$graph->SetShadow();

// Fixer les marges
$graph->img->SetMargin(40,30,25,40);

// Création du graphique histogramme
$bplot = new BarPlot($tableauNombreVentes);

// Spécification des couleurs des barres
$bplot->SetFillColor(array('red', 'green', 'blue'));
// Une ombre pour chaque barre
$bplot->SetShadow();

// Afficher les valeurs pour chaque barre
$bplot->value->Show();
// Fixer l'aspect de la police
$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
// Modifier le rendu de chaque valeur
$bplot->value->SetFormat('%d sexe');

// Ajouter les barres au conteneur
$graph->Add($bplot);

// Le titre
$graph->title->Set("Graphique 'HISTOGRAMME' : sexe");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Titre pour l'axe horizontal(axe x) et vertical (axe y)
$graph->xaxis->title->Set("sexe");
$graph->yaxis->title->Set("Nombre de sexe");

$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Légende pour l'axe horizontal
$graph->xaxis->SetTickLabels($tableauAnnees);

?>
Afficher la suite 

5 réponses

Répondre au sujet
jordane45 20570 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention - 29 juil. 2014 à 21:58
0
Utile
Bonjour,

Tu as vérifié les droits de tes répertoires ?
Tu as fais des 'print_r' de tes variables pour voir si elles sont bonnes..?
Tu as regardé si l'image se créée bien dans le répertoire et si tu arrivais à l'ouvrir directement ?

Tu as essayé d'écrire ta variable $sql avec des guillemets plutôt que des EOF ?
/*
$sql = <<<EOF
SELECT
YEAR('DTHR_VENTE') AS ANNEE,
COUNT(ID) AS NBR_VENTES
FROM 'ventes'
GROUP BY YEAR('DTHR_VENTE')
EOF;*/

$sql = "SELECT YEAR('DTHR_VENTE') AS ANNEE
                        ,COUNT(ID) AS NBR_VENTES
           FROM 'ventes'
           GROUP BY YEAR('DTHR_VENTE')";




C'est normal que ton "image" porte comme nom :http://localhost/jpgraph/jpgraph.php ???


Il nous manque surement du code... celui qui te sert à afficher l'image entre autre...



Commenter la réponse de jordane45
pharelka 6 Messages postés mardi 29 juillet 2014Date d'inscription 29 août 2014 Dernière intervention - 30 juil. 2014 à 13:03
0
Utile
Bonjour Jordan et tout le monde
J'ai essayé de modifier le code comme tu m'as conseillé : j'ai modifié les droits de partage des répertoires, j'ai testé mes variables et aussi j'ai changé le nom du fichier (jpgraphique.php en vente.php) mais cela ne fonctionne non plus...
Voici le code en entier
___________________
<?php

include ("/src/jpgraph.php");
include ("/src/jpgraph_bar.php");

$fileName = $_SERVER['DOCUMENT_ROOT']."/tmp/graph.png";

define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PASS', '');
define('MYSQL_DATABASE', 'graphe');
// ********************************************************************
// PARTIE : Production des données avec Mysql
// ********************************************************************

$sql = ("SELECT YEAR('DTHR_VENTE') AS ANNEE,
COUNT(ID) AS NBR_VENTES
FROM 'ventes'
GROUP BY YEAR('DTHR_VENTE')");

// Connexion à la BDD
$mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');

// Sélection de la base de données
@mysql_select_db(MYSQL_DATABASE) or die('Pb de sélection de la base');

// Requête
$mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Pb de requête');

// Fetch sur chaque enregistrement
while ($row = mysql_fetch_array($mysqlQuery, MYSQL_ASSOC)) {
// Alimentation des tableaux de données
$tableauAnnees[] = 'Année ' . $row['ANNEE'];
$tableauNombreVentes[] = $row['NBR_VENTES'];
}


printf('<pre>%s</pre>', print_r($tableauAnnees,1));
printf('<pre>%s</pre>', print_r($tableauNombreVentes,1));
print_r($tableauNombreVentes);
var_dump($tableauNombreVentes);
// *******************
// Création du graphique
// *******************


// Construction du conteneur
// Spécification largeur et hauteur
$graph = new Graph(400,250);

// Réprésentation linéaire
$graph->SetScale("textlin");

// Ajouter une ombre au conteneur
$graph->SetShadow();

// Fixer les marges
$graph->img->SetMargin(40,30,25,40);

// Création du graphique histogramme
$bplot = new BarPlot($tableauNombreVentes);

// Spécification des couleurs des barres
$bplot->SetFillColor(array('red', 'green', 'blue'));
// Une ombre pour chaque barre
$bplot->SetShadow();

// Afficher les valeurs pour chaque barre
$bplot->value->Show();
// Fixer l'aspect de la police
$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
// Modifier le rendu de chaque valeur
$bplot->value->SetFormat('%d ventes');

// Ajouter les barres au conteneur
$graph->Add($bplot);

// Le titre
$graph->title->Set("Graphique 'HISTOGRAMME' : ventes par années");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Titre pour l'axe horizontal(axe x) et vertical (axe y)
$graph->xaxis->title->Set("Années");
$graph->yaxis->title->Set("Nombre de ventes");

$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Légende pour l'axe horizontal
$graph->xaxis->SetTickLabels($tableauAnnees);

// Afficher le graphique
$graph->Stroke();

?>
Commenter la réponse de pharelka
jordane45 20570 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention - 30 juil. 2014 à 13:23
0
Utile
Reprenons dans l'ordre :

As tu testé un des exemple du site ?
Juste pour voir si la librairie fonctionne ou si le souci vient de la création de tes variables...

Par exemple :
http://jpgraph.net/features/src/show-example.php?target=new_line1.php



Autre point...
j'ai changé le nom du fichier (jpgraphique.php en vente.php)
... ça ... c'est le nom de ta page PHP contenant le script .....
Visiblement tu ne la sauvegarde pas sur ton serveur et cherche à l'afficher directement.;

$graph->Stroke(); 


Mais.. au moins pour les tests... pourrais tu essayer de la sauvegardere sur le serveur :
$graph->Stroke("/tmp/graph_ventes.png");


Pour info :
http://www.journaldunet.com/developpeur/tutoriel/php/061222-php-jpgraph-fichier.shtml



Commenter la réponse de jordane45
mpmp93 6714 Messages postés mercredi 13 avril 2011Date d'inscription 28 septembre 2015 Dernière intervention - 30 juil. 2014 à 15:57
0
Utile
Bonjour,

J'ai utilisé JPGRAPH (très peu) et je trouve cette librairie peu pratique.

Mon avis: JPGRAPH mange beaucoup de temps machine. Afin de répondre à la demande en graphes, j'ai trouvé une autre solution, une libraire qui génère coté navigateur les graphes à l'aide de javascript: RGraph....

Ici un peu de doc sur RGRAPH:
http://html5.immo-scope.com/article/rgraph_debuter

Si pour vous l'emploi de JPGRAPH n'est pas une exigence "client", je vous suggère de voir du coté de RGRAPH qui est beaucoup plus souple....

Cordialement
Commenter la réponse de mpmp93
pharelka 6 Messages postés mardi 29 juillet 2014Date d'inscription 29 août 2014 Dernière intervention - Modifié par pharelka le 31/07/2014 à 17:43
0
Utile
Bonjour à tous,

Je viens de trouver la solution :
il a fallut passer en argument de la fonction le nom de l'image qui sera générée et préciser le nom du dossier temporaire dans lequel l'image(ou les images) sera(seront) stockée(s), pour finir unlink permet de supprimer les images créées par jpgraph :
_____________________

graph->Stroke("votreImage.png"); // ici pour definir l'image de sortie
// Output line
echo ('<img src="votreImage.png">'); // afficher l'image

//Exemple : 1 fonctionne à moitié après il génère une erreur car s'il

//faut rafraichir la page la seconde image générée écrase la

//première mais c'est une image vierge

//Jpgraph: "JpGraph Error: 25111 Can't delete cached image

Exemple 1
@unlink("vente.png"); //Permet de supprimer le fichier donc l'image
$graph->Stroke("vente.png");
$graph->Stroke("tmp/vente.png");
//tmp: dossier temporaire qu'il faudra créer

//Exemple : 2 celui-ci fonctionne....

/ Suppression du fichier
$filename='tmp/vente.png';
if (file_exists("$filename"))
{
unlink("$filename");
}

// Sauvegarde du graphique
$graph->stroke("$filename");

echo ('<img src="tmp/vente.png">');
Commenter la réponse de pharelka

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.