Kommunauty
Connexion
Inscription

Utilisation de Pchart


maxredphenix Messages : 60

Bonjour à tous,

Je suis actuellement en train de développer un site dans lequel j'aimerais afficher des graphiques dont les données sont tirées depuis ma bdd. Voulant aussi créer un compte rendu mensuel en pdf j'ai décider de me tourner vers html2pdf, le souci c'est que ce dernier ne prends pas en compte beaucoup de framework de création de graphique.

Je me suis donc tourner vers Pchart qui à l'air plutôt sympa mais pour le moment j'arrive pas à le faire fonctionner. Mon code ressemble à ceci:

<?php
// Appel des Class nécéssairent au à l'affichage du graphique
include("../../class/pData.class");
include("../../class/pChart.class");
// Connexion à mysql via le fichier connexionbdd.php
require_once('../connexionbdd.php');
// Requete de récupération des données nécéssaire pour la réalisation du graphique
$requete=mysql_query("SELECT type_inter FROM appels ORDER BY id") or die (mysql_error());
// Définition des données du tableau
$DataSet=new pData;
// Définition 1: Le type d'inter
while ($row=mysql_fetch_array($requete)){
// On ajoute les données correspondant au type d'intervention dans un tableau Pdata
$DataSet->AddPoint($row['type_inter'],"Serie1");
}
// Définition 2: La légende
$DataSet->AddPoint ("Exploitation","Correctif","Serie2");
$DataSet->AddAllSeries();
// On défini la serie 2 (legende) comme axe des abscisses
$DataSet->SetAbsciseLabelSerie("Serie2");
// Initialisation du graphique
$Graph=new pChart(400,300);
$Graph->drawFilledRoundedRectangle(7,7,293,193,5,240,240,240);
$Graph->drawRoundedRectangle(5,5,295,195,5,230,230,230);
// Affichage du Graphique
$Graph->setShadowProperties(2,2,200,200,200);
$Graph->drawFlatPieGraphWithShadow($Graph->GetData(),$DataSet->GetDataDescription(),"Serie1","2","Graphique",120,100,60,PIE_PERCENTAGE,10);
$Graph->drawPieLegend(230,15,$DataSet->GetData(),$DataSet->GetDataDescription(),"Serie2","6","Legende",250,250,250);
$Graph->Stroke();
?>

Et j'ai juste une nouvelle page qui s'affiche avec un symbole d'image non chargé en haut à gauche alors que logiquement elle est censé ce chargé dans ma page actuelle et surtout s'afficher.....

Malheureusement je vois pas d'ou vient le souci d'ou mon post.

Est-ce que quelqu'un pourrait m'aider svp?

Et au cas ou est-ce que vous connaissez un autre moyen de faire des graphiques simplement et sans trop de ressource dans mon site, et qui serait compatible pour une utilisation dans le .php servant à la création de mon compte rendu via html2pdf?

Je vous remercie d'avance de votre aide

Cordialement

Maxredphenix

samedi 9 juin 2012

SiMax Messages : 7572

Salut ! Je ne connais pas Pchart mais soit l'hébergement ne supporte pas toutes les fonctionnalités requises, soit il y a une erreur de code.

Des solutions alternatives :

  • Proposer un rapport HTML ou directement par mail
  • Générer d'abord une image de graphique (via GD) puis l'insérer dans un PDF
dimanche 10 juin 2012

maxredphenix Messages : 60

Bonjour,

Désolé pour le retard, j'ai du partir en urgence. Le problème c'est que j'ai pas le choix, je suis obligé de créer le compte rendu en pdf.

Sinon pour le moment je travail seulement sur wamp, donc logiquement il devrait le supporter vu que d'autres l'on déjà fait.

Il y a pas un autre framework permettant de faire une génération de graphiques sur le site en ayant les qualités de base: rapidité, efficacité (et jolie bien sur) mais qui en même temps serait compatible avec HTML2PDF ? pour le moment j'en trouve pas de valable ou compatible.

Merci et encore désolé pour le retard

maxredphenix

mercredi 13 juin 2012

Lucas Messages : 830

Salut !

D'après la doc, Pchart rend bien les graphes en image à l'aide de GD. Mais d'après ce que j'ai compris, tu utilises pour produire le pdf une page HTML de base, donc ce que tu as à faire, je pense, c'est de rendre le graphe sur un fichier image :

$Graph->Render("graph.png"); 

Et après dans le code html tu as juste à afficher l'image :

<img src="graph.png" alt="graph"/>

Bonne chance !

samedi 23 juin 2012

maxredphenix Messages : 60

Bonjour,

Merci pour ta réponse, comme j'ai pas reussi à utiliser Pchart et qu'il était plus supporté depuis 2008 je me suis tourné vers JPGRAPH.

Pour le moment j'essaie de créer les graphiques pour qu'ils s'affichent dans mon site et je ferais ensuite la manip pour le pdf vu qu'il y a juste à faire à l'identique de ce tu viens de me donner. Mais cela ne fonctionne pas pour le moment, j'ai un problème de requete, lorsque je lance ma page, elle m'affiche Pb de requête, voila mon code:

// ********************************************************************

// PARTIE : Includes et initialisation des variables

// ********************************************************************

// Inclusion de la librairie JpGraph

include ("../jpGraph/jpgraph.php");

include ("../jpGraph/jpgraph_pie.php");

include ("../jpGraph/jpgraph_pie3d.php");

// Constantes (connection mysql)

require_once('../connexionbdd.php');

// Tableaux de données destinées à JpGraph

$tableauDemande = array();

$tableauTypeInter = array();

// ********************************************************************

// PARTIE : Production des données avec Mysql

// ********************************************************************

$annee=2012;

$mois=06;

$sql = <<

SELECT

COUNT(ID) AS NBR_DEMANDE,

type_inter AS TYPE_INTER,

date_appel

FROM 'demande'

WHERE MONTH(date_appel)=$mois

GROUP BY 'type_inter'

EOF;

// Connexion à la BDD

$mysqlCnx = @mysql_connect($host, $user, $passwd) or die('Pb de connexion mysql');

// Sélection de la base de données

@mysql_select_db($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

$tableauDemande[] = 'Nbre Total Demandes ' . $row['NBR_DEMANDE'];

$tableauTypeInter[] = $row['TYPE_INTER'];

}

// ********************************************************************

// PARTIE : Création du graphique

// ********************************************************************

// On spécifie la largeur et la hauteur du graphique conteneur

$graph = new PieGraph(300,200);

// Ajouter une ombre au conteneur

$graph->SetShadow();

// Titre du graphique

$graph->title->Set("Nombre de Demandes pour le mois");

// Quelle police et quel style pour le titre

// Prototype: function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10)

// 1. famille / 2. style / 3. taille

$graph->title->SetFont(FF_GEORGIA,FS_BOLD, 12);

// Créer un camenbert (classe PiePlot3D)

$oPie = new PiePlot3D($tableauTypeInter);

// Quelle partie se détache du reste

$pie->ExplodeSlice(2);

// Spécifier des couleurs personnalisées... #FF0000 ok

$pie->SetSliceColors(array('red', 'blue'));

// Légendes qui accompagnent chaque secteur, ici chaque année

$oPie->SetLegends($tableauDemande);

// Position du graphique (légèrement à droite)(0.5=centré)

$oPie->SetCenter(0.4);

// On ajoute la valeur de chaque Type d'inter à côté de chaque part du camenbert (etiquettes)

$oPie->SetValueType(PIE_VALUE_ABS);

// Personnalisation des étiquettes pour chaque partie

$oPie->value->SetFormat('%d demandes');

// Personnaliser la police et couleur des étiquettes

$pie->value->SetFont(FF_ARIAL,FS_NORMAL, 9);

$pie->value->SetColor('black');

// Ajouter au graphique au conteneur

$graph->Add($oPie);

// Provoquer l'affichage (renvoie directement l'image au navigateur)

$graph->Stroke();

?>

J'arrive pas à créer ma requete correctement, je veux me connecter à la table "demande" et sélectionner le champ "type_inter" afin d'afficher un graphique du nombre de demande par type d'intervention dans le mois en cours (pour le moment j'ai défini $mois à 06 en attendant de faire un POST depuis une autre page) + le cadre d'étiquette mais cela ne fonctionne pas.

Si tu peux m'aider je suis preneur

merci

maxredphenix

samedi 23 juin 2012

Lucas Messages : 830

Et quelle est l'erreur exacte que renvoie la page ?

Et sinon, pourquoi tu mets "@" devant tes fonctions mySQL ?

samedi 23 juin 2012

maxredphenix Messages : 60

J'ai juste une page planche avec noté "Pb de requête".

Sinon le @ c'est pour éviter l'affichage des erreurs, c'est un truc que j'ai vu sur un tuto un jour et du coup j'y pense même plus. Je viens de l'enlever mais j'ai toujours le même message et aucune autres info d'erreur (idem pour la console de développement google Chrome)

samedi 23 juin 2012

Lucas Messages : 830

Hum, dans ce cas je te conseillerai de ne pas t'occuper du graphe pour le moment, et juste de regarder si tu récupères bien les infos.

Donc mieux vaut enlever toute la partie concernant l'affichage pour le moment, et regarder ce que ça retourne .

Aussi, pourquoi il y a ÇA dans ta requête ?

$sql = <<

SELECT

COUNT(ID) AS NBR_DEMANDE,

type_inter AS TYPE_INTER,

date_appel

FROM 'demande'

WHERE MONTH(date_appel)=$mois

GROUP BY 'type_inter'

EOF;

samedi 23 juin 2012

maxredphenix Messages : 60

C'etait dans un des exemples du site. Vu que ça t'as choquer j'en ai déduit que c'était pas terrible donc je viens de refaire mon code:

<?php
// ********************************************************************
// PARTIE : Includes et initialisation des variables
// ********************************************************************
// Inclusion de la librairie JpGraph
include ("../jpGraph/jpgraph.php");
include ("../jpGraph/jpgraph_pie.php");
include ("../jpGraph/jpgraph_pie3d.php");
// Constantes (connection mysql)
require_once('../connexionbdd.php');
// Tableaux de données destinées à JpGraph
$tableauDemande = array();
$tableauTypeInter = array();
// ********************************************************************
// PARTIE : Production des données avec Mysql
// ********************************************************************
$annee=2012;
$mois=06;
// Requête
require_once('../connexionbdd.php');
$req=mysql_query("SELECT COUNT(id) AS NBR_DEMANDE,date_appel,type_inter FROM demande WHERE MONTH(date_appel)=$mois GROUP BY 'type_inter' ");
// Fetch sur chaque enregistrement
while ($row = mysql_fetch_array($req)) {
// Alimentation des tableaux de données
$tableauDemande[] = 'Nbre Total Demandes'. $row['NBR_DEMANDE'];
$tableauTypeInter[] = $row['type_inter'];
}
// ********************************************************************
// PARTIE : Création du graphique
// ********************************************************************
// On spécifie la largeur et la hauteur du graphique conteneur
$graph = new PieGraph(300,200);
// Ajouter une ombre au conteneur
$graph->SetShadow();
// Titre du graphique
$graph->title->Set("Nombre de Demandes pour le mois");
// Quelle police et quel style pour le titre
// Prototype: function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10)
// 1. famille / 2. style / 3. taille
$graph->title->SetFont(FF_GEORGIA,FS_BOLD, 12);
// Créer un camenbert (classe PiePlot3D)
$oPie = new PiePlot3D($tableauTypeInter);
// Quelle partie se détache du reste
$pie->ExplodeSlice(2);
// Spécifier des couleurs personnalisées... #FF0000 ok
$pie->SetSliceColors(array('red', 'blue'));
// Légendes qui accompagnent chaque secteur, ici chaque année
$oPie->SetLegends($tableauDemande);
// Position du graphique (légèrement à droite)(0.5=centré)
$oPie->SetCenter(0.4);
// On ajoute la valeur de chaque Type d'inter à côté de chaque part du camenbert (etiquettes)
$oPie->SetValueType(PIE_VALUE_ABS);
// Personnalisation des étiquettes pour chaque partie
$oPie->value->SetFormat('%d demandes');
// Personnaliser la police et couleur des étiquettes
$pie->value->SetFont(FF_ARIAL,FS_NORMAL, 9);
$pie->value->SetColor('black');
// Ajouter au graphique au conteneur
$graph->Add($oPie);
// Provoquer l'affichage (renvoie directement l'image au navigateur)
$graph->Stroke();
?>

Et maintenant j'ai deux erreurs:

Notice: Undefined variable: pie in C:\wamp\www\Monsite\php\formulaires_statistique\essaiestat.php on line 44

et:

Fatal error: Call to a member function ExplodeSlice() on a non-object in C:\wamp\www\Monsite\php\formulaires_statistique\essaiestat.php on line 44

ce qui correspond à :

// Quelle partie se détache du reste
$pie->ExplodeSlice(2);
samedi 23 juin 2012

Lucas Messages : 830

En effet, tu utilises une variable $pie non définie à la place de $oPie

samedi 23 juin 2012 (Dernière édition samedi 23 juin 2012)

Page suivante »