Jpgraphe avec des paramétres

Fermé
fatyinfo Messages postés 4 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 24 mars 2014 - 5 mars 2014 à 15:12
fatyinfo Messages postés 4 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 24 mars 2014 - 6 mars 2014 à 18:29
Bonjour,


J'ai besoin de créer des graphes avec des paramètres, c'est à dire lorsque l'utilisateur saisie les données dans un formulaire, il clique sur une bouton puis le graphe apparaît,

Voila les codes de mes fichiers, mais j'ai pas réussi à afficher le graphe,

Merci bien pour votre aide.

code formulaire.php

<?php

define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PASS', '');
define('MYSQL_DATABASE', 'ventes');


?>

<form action="afficheur.php" method="post">
<select name="mois">
<?php


// Récupération des informations triées par ordre alphabétique
$sql = 'SELECT MONTH(DTHR_VENTE) as mois FROM ventes GROUP BY MONTH(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');
while($data = mysql_fetch_array($mysqlQuery)){
// on affiche chaque champ
echo '<option name="'.$data['mois'].'">'.$data['mois'].'</option>';
}
//On libère mysql de cette première requête
mysql_free_result ($req);
//On ferme le select
?>
</SELECT>

<select name="annee">
<?php


// Récupération des informations triées par ordre alphabétique
$sql = 'SELECT YEAR(DTHR_VENTE) as annee 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');
while($data = mysql_fetch_array($mysqlQuery)){
// on affiche chaque champ
echo '<option name="'.$data['annee'].'">'.$data['annee'].'</option>';
}
//On libère mysql de cette première requête
mysql_free_result ($req);
//On ferme le select
?>


</SELECT>
<input type="submit" name="Valider" value="OK"/>
</form>


Code afficheur.php

 
<?php
include ("formulaire.php");
$m=$_POST['mois'];
$a=$_POST['annee'];
echo "<img id='Graphe' src='testgraphe.php?mois=".$m."&annee=".$a."' alt='Le graphe' />";



?>

Code testgraphe.php

<?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', 'ventes');

$tableauVente = array();
$tableauPrix = array();
$mois="";
$annee="";
// **********************************************
// Extraction des données dans la base de données
// *************************************************

// formulaire

if(isset($_POST['mois'])) && (isset($_POST['annee']))
{
$mois=$_REQUEST['mois'];

$annee=$_REQUEST['annee'];
}

$sql =
'SELECT
ID AS vente,
sum(PRIX) AS PRIX
FROM 'ventes'
where YEAR('DTHR_VENTE')='.$annee.' AND MONTH(DTHR_VENTE) ='.$mois.'
GROUP BY ID'
;

$mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');

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

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

while ($row = mysql_fetch_array($mysqlQuery, MYSQL_ASSOC)) {
$tableauVente[] = 'vente ' . $row['vente'];
$tableauPrix[] = $row['PRIX'];
}

/*
printf('<pre>%s</pre>', print_r($tableauAnnees,1));
printf('<pre>%s</pre>', print_r($tableauNombreVentes,1));
*/

// *******************
// 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($tableauPrix);

// 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("ID");
$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($tableauVente);

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


?>

2 réponses

mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 6/03/2014 à 10:02
Bonjour,

Avez-vous un message d'erreur? si oui, lequel?

Sinon, - c'est juste mon avis - JPGRAPH est assez contraignant et oblige à génerer le graphe coté serveur.

Personnellement, j'ai choisi une solution plus légère en reportant la génération de graphe vers RGRAPH:
https://html5.immo-scope.com/article/rgraph_debuter

RGRAPH est une librairie javascript qui s'exécute coté client. Avec RGRAPH la description d'un graphe tient en quelques lignes, exemple:

<canvas id="myCanvas" width="500" height="250"
    style="border:1px solid grey;background-color:#cfcfff;">[canvas non supporté]</canvas>
<script>
    window.onload = function ()
    {
        var data = [12,22,14,4,10,17,8];
        var bar = new RGraph.Bar('myCanvas', data)
        .Set('labels', ['lun','mar','mer','jeu','ven','sam','dim'])
        .Set('gutter', 45)
        .Set('colors', ['#ffa640'])
        .Draw();
    }
</script>


Les données

var data = [12,22,14,4,10,17,8];

(en gras) sont injectables par PHP au moment de créer la page WEB. Exemple:

<?php $datasGraphe = "[12,22,14,4,10,17,8]"; ?>
<script>
    window.onload = function ()
    {
        var data = <?php echo $datasGraphe; ?>;
        var bar = new RGraph.Bar('myCanvas', data)
        .Set('labels', ['lun','mar','mer','jeu','ven','sam','dim'])
        .Set('gutter', 45)
        .Set('colors', ['#ffa640'])
        .Draw();
    }
</script>


Résultat:
- extraction simple des données vers RGRAPH
- génération du graphe coté client final, ça allège la charge serveur
- code très compact, beaucoup plus qu'une image
- image récupérable par le client sur son PC: clic-droit et "enregistrer sous"



A+

public function meilleurProgrammeurDuMonde() { return "MOI"; } // humour
0
fatyinfo Messages postés 4 Date d'inscription mercredi 5 mars 2014 Statut Membre Dernière intervention 24 mars 2014
6 mars 2014 à 18:29
Merci bcq pour votre réponse.

J'ai trouvé la solution , j'ai changé :

if(isset($_POST['mois'])) && (isset($_POST['annee']))

par

if(isset($_REQUEST['mois']) && isset($_REQUEST['annee']))


et tous ça marche bien.
0