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 :

[JpGraph] Affichage du graphique à l'intérieur d'une page


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut [JpGraph] Affichage du graphique à l'intérieur d'une page
    Bonjour,

    J'ai effectué un graphique via une BDD.
    Sur ma page index, je sélectionne le type de graph à afficher et celui-ci s'affiche correctement.
    J'ai fait en sorte que mes données soient sélectionnées en fonction d'une période.

    Mon fichier requêtes :
    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
     
    if (!empty($_POST['date1'])) 
    			{
    				$pDate1 = $_POST['date1'];	
    			} 
     
    			else
    			{
    				$pDate1 = ' ';
    			}
     
    			if (!empty($_POST['date2'])) 
    			{
    				$pDate2 = $_POST['date2'];
    			}
     
    			else
    			{
    				$pDate2 = ' ';
    			}
     
    				// Création des Requètes
     
    				if (empty($_POST['date1']) || empty($_POST['date2'])) 
    				{
    					$REQ_Total_Arrets_Station = $bdd->prepare('SELECT 
    					COUNT(Arret.IDArret) AS nbArrets,
    					Station.nomStation AS nomStation,	
    					Ligne.NomLigne AS NomLigne, 
    					Station.IDStation AS IDStation,
    					ligne.IDLigne AS IDLigne
    				FROM 
    					Ligne,	
    					Arret,	
    					Station
    				WHERE 
    					Station.IDStation = Arret.IDStation
    					AND		Ligne.IDLigne = Arret.IDLigne
    				GROUP BY 
    					Arret.IDStation,
    					Arret.IDLigne
    				ORDER BY 
    					nbArrets DESC');
     
    					$REQ_Total_Arrets_Ligne = $bdd->prepare('SELECT  
    					COUNT(Arret.IDArret) AS nbArrets,
    					Ligne.NomLigne AS NomLigne,
    					Arret.IDLigne AS IDLigne 
    					FROM 
    						Ligne,
    						Arret
    					WHERE 
    					 		Arret.IDLigne = Ligne.IDLigne					
    				GROUP BY 	
    					Arret.IDLigne
    				ORDER BY 
    					nbArrets DESC');
     
    					$REQ_Total_Arrets_Station->execute();
    					$REQ_Total_Arrets_Ligne->execute();
    				}
     
     
    				else
    				{
    					$REQ_Total_Arrets_Station = $bdd->prepare('SELECT 
    					COUNT(Arret.IDArret) AS nbArrets,
    					Station.nomStation AS nomStation,	
    					Ligne.NomLigne AS NomLigne, 
    					Station.IDStation AS IDStation,
    					ligne.IDLigne AS IDLigne
    				FROM 
    					Ligne,	
    					Arret,	
    					Station
    				WHERE 
    					Station.IDStation = Arret.IDStation
    					AND		Ligne.IDLigne = Arret.IDLigne
    					AND 	arret.Date_arret >= ?
    					AND arret.Date_arret <= ?
    				GROUP BY 
    					Arret.IDStation,
    					Arret.IDLigne
    				ORDER BY 
    					nbArrets DESC');
     
     
    					$REQ_Total_Arrets_Station->execute(array($pDate1,$pDate2));
     
    					$REQ_Total_Arrets_Ligne = $bdd->prepare('SELECT  
    					COUNT(Arret.IDArret) AS nbArrets,
    					Ligne.NomLigne AS NomLigne,
    					Arret.IDLigne AS IDLigne 
    					FROM 
    						Ligne,
    						Arret
    					WHERE 
    					 		Arret.IDLigne = Ligne.IDLigne
    					 AND 	arret.Date_arret >= ?
    					 AND 	arret.Date_arret <= ?
     
    				GROUP BY 	
    					Arret.IDLigne
    				ORDER BY 
    					nbArrets DESC');
     
    				$REQ_Total_Arrets_Ligne->execute(array($pDate1,$pDate2));
    				}
    Index :
    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
     
    		<?php
     
    		include ("requetes.php");
    		?>
    		<header>
    			<?php
    				include ("header.php");
     
    				if(!empty($_POST['mode']))
    				{
    					$mode = $_POST['mode'];
     
    					switch ($mode) 
    					{
    						case 1:
    							echo '<img src="graph_Arrets_Station.php">';
    							break;
     
    						case 2:
    								?>
    								<img src="graph_dechets_Type.php">
    								<?php
    							break;
    						case 3:
    							while($data = $REQ_Total_Arrets_Station->fetch())
    							{
    								echo '<pre>';
    								print_r($data);
    								echo '</pre>';
    							}				
    					}
    				}
    			?>
    Puis mon graph :
    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
     
    <?php
     
    include ("requetes.php");
    include ("jpgraph/src/jpgraph.php");
    include ("jpgraph/src/jpgraph_bar.php");
     
     
     
    $tab_ligne = array();
    $tab_Dechet = array();
    $nomType_Dechet = array();
    $presenceLigne = 0;
    $nbTypeDechet = 0;
    $nbLignes = 0;
    $i = 0;
    $j=0;
    $sommeGraphDechet = array();
    $pos = 0;
     
     
    while($data = $REQ_nbTypeDechet->fetch())
    {
    	$nbTypeDechet += $data['nbTypeDechet'];
     
    }$REQ_nbTypeDechet->closeCursor();
     
    while($data = $REQ_nbLignes->fetch())
    {
    	$nbLignes+= $data['nbLignes'];
    }$REQ_nbLignes->closeCursor();
     
    //Création d'un tableau fixe par Type dechet
    for ($i=0; $i < $nbTypeDechet; $i++) 
    { 	
    	$tab_Dechet[$i] = array();
    	for ($j=0; $j < $nbLignes; $j++) 
    	{ 
    		$tab_Dechet[$i][] = 0;
    	}
    }
     
    while ($data = $REQ_Total_Dechets_Ligne->fetch()) 
    {
     
    	$tab_ligne[] = $data['nomLigne'];
     
    }$REQ_Total_Dechets_Ligne->closeCursor();
     
    //récupération des Lignes en supprimant les réccurences 
    while ($data = $REQ_Total_Dechets_Type->fetch())
    {
     
    		//Récupération de la position de la ligne dans le tableau
    		$pos = array_search($data['NomLigne'],$tab_ligne);
     
    		//récupération des valeurs	et stockage dans le tableau correspondant
    		for ($i=0; $i < $nbTypeDechet; $i++) 
    		{ 
    			if($i == $data['IDType_dechet']-1 )
    			{
    				$tab_Dechet[$i][$pos] = $data['nbDechets'];
    				$nomType_Dechet[$i] = $data['nomType_Dechet'];
    			}		
    		}		
     
    	$presenceLigne = 0;
     
    }$REQ_Total_Dechets_Type->closeCursor();
     
     
    	// Création d'un histogramme par Type dechet
    	for ($i=0 ; $i < $nbTypeDechet ; $i++)
        {
    		    ${'dechet'.$i} = new BarPlot($tab_Dechet[$i]);
    		    ${'dechet'.$i}->SetLegend($nomType_Dechet[$i]);
        }
     
    	// Stockage des objets dans un tableau 
    	for ($i=0; $i < $nbTypeDechet; $i++) 
    	{ 
    		$sommeGraphDechet[] = ${'dechet'.$i};
    	}
     
     
     
    // **********************
    // Création du graphique 
    // **********************
     
    $graph = new Graph(1200,800,"auto");    
    $graph->SetScale("textlin");
    $graph->SetShadow();
    $graph->img->SetMargin(60,40,50,40);
    $graph->SetMarginColor('#CCCCFF');
    $graph->title->Set("Nombre de dechets par Type sur lignes MGG");
    $graph->title->SetMargin(20);
    $graph->title->SetFont(FF_COMIC,FS_BOLD,12);
     
     
    // Créer l'ensemble d'histogrammes accumulés	
    $gbplot = new AccBarPlot($sommeGraphDechet);
     
    // Position de la légende
    $graph->legend->Pos(0.12,0.12,"right","top");
     
    // Ajouter l'ensemble accumulé
    $graph->Add($gbplot);
     
    // Afficher les valeurs de chaque histogramme groupé
    $gbplot->value->Show();
    $gbplot->value->SetFont(FF_COMIC,FS_NORMAL,8);
    $gbplot->value->SetFormat('%d');
     
    for ($i=0; $i < $nbTypeDechet; $i++) 
    { 
    	${'dechet'.$i}->value->Show();
    	${'dechet'.$i}->value->SetFont(FF_COMIC,FS_NORMAL,8);
    	${'dechet'.$i}->value->SetColor('black');
    	${'dechet'.$i}->value->SetFormat('%d');
    	${'dechet'.$i}->setValuePos('center');
    }
     
    // Paramétrer les axes X et Y
    $graph->yaxis->title->Set("Nombre de dechets");
    $graph->yaxis->title->SetMargin(20);
    $graph->yaxis->title->SetFont(FF_COMIC,FS_BOLD);
     
    $graph->xaxis->title->Set("Ligne");
    $graph->xaxis->SetTickLabels($tab_ligne);
    $graph->xaxis->title->SetMargin(4);
    $graph->xaxis->title->SetFont(FF_COMIC,FS_BOLD);
     
    // Afficher l'image générée
    $graph->Stroke();
     
    ?>
    J'utilise un simple formulaire avec deux dates , une sélection du type de graph à afficher et un bouton actualiser qui pointe sur mon index.

    L'idée est que si on ne saisi pas de dates, le graphique affiche tout ce qu'il peut via une REQ sans dates.
    Si l'on saisi des dates, les REQ avec dates sont exécutées.
    Seulement voila , lorsque j'ouvre mon index aucune date n'est sélectionnée ce qui est logique. Mon graph se forme donc avec toutes les valeurs.
    Mais si je choisi des dates, le graphique reste le même étant donnée que le code n'est pas rechargé.
    Seulement le graph ne s'affiche pas si je fais un include.

    Avez-vous une idée afin de re-charger le graph avec les nouvelles données de REQ et réussir à l'afficher sur mon index ?

    Salutations,

  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
    Si tu ne veux pas recharger la page il faut utiliser du Javascript pour recharger uniquement le graphique.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Je viens de trouver une solution ,

    J'enregistre l'image et l'écrase lors de mon actualisation cela fonctionne nickel !

    Par contre le problème de cette solution est qu'il faudra créer un dossier puis enregistrer l'image par session d'utilisateur afin que chaque utilisateur ai bien le graph voulut.

    Je vais me renseigner sur ce genre de session.

    Mais s'il y a des idées je suis preneur

    Salutations,

  4. #4
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Bonoir.
    Pour que ton graphique soit interactif, ton formulaire doit s'appeler lui-même. tu dois charger le fichier qui affiche le graphe au sein d'une balis image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="monGraphique.php?val1=$val1&val2=$val2&val3=$val3" width="240" height="240" />
    Tu récupères les valeurs de $valx fournies par ton formulaire avec un $_REQUEST ['valx']
    Si tu ne trouves pas le bon code, je te posterai un exemple ce soir.
    Yves
    Participez vous aussi !
    Message utile
    Discussion résolue

  5. #5
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Basiquement, tu as donc un fichier affiche_graphe.php qui s’appelle lui-même. En pseudo-code non testé, ça donne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $valeur_1="10";
    if (isset($_REQUEST['valeur_1'])) $valeur_1=$_REQUEST['valeur_1'];
    $valeur="20";
    if (isset($_REQUEST['valeur_2'])) $valeur_2=$_REQUEST['valeur_2'];
     
    echo "<img src='=mon_graphe.php?valeur_1=".$valeur_1."&valeur_2=".$valeur_2."' width='240' height='240'>\n";
     
    echo "<hr><form action='affiche_graphe.php' method='post' target='_self'>
    	<p><label>Valeur 1 </label><input type='text' name='valeur_1' /></p>
    	<p><label>Valeur 2 </label><input type='text' name='valeur_2' /></p>
            <button type='submit'>Ok</button>
    	</form>";

    Au départ, $_REQUEST['valeur_1'] et $_REQUEST['valeur_2'] n'existent pas donc le fichier "mon_graphe affiche un graphique avec $valeur_1=10 et $valeur_2=20.
    Le formulaire permet de choisir des valeurs différentes. Quand tu appuies sur Ok, tu recharges le fichier affiche_graphe.php mais $_REQUEST['valeur_1'] et $_REQUEST['valeur_2'] existent désormais avec les valeurs choisies dans le formulaire et donc mon_graphe.php affiche le graphique avec les nouvelles valeurs.
    Au début de mon_graphe.php, tu mets le code suivant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $valeur_1="10";
    if (isset($_REQUEST['valeur_1'])) $valeur_1=$_REQUEST['valeur_1'];
    $valeur="20";
    if (isset($_REQUEST['valeur_2'])) $valeur_2=$_REQUEST['valeur_2'];
    pour pouvoir récupérer les valeurs passées par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<img src='=mon_graphe.php?valeur_1=".$valeur_1."&valeur_2=".$valeur_2."' width='240' height='240'>\n";

    Voila l'idée.
    Yves
    Participez vous aussi !
    Message utile
    Discussion résolue

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/10/2016, 15h21
  2. Réponses: 3
    Dernier message: 19/09/2007, 17h11
  3. Affichage d'un flux pdf dans une page html
    Par NizarK dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 27/03/2007, 08h41
  4. affichage d'un état à partir d'une page
    Par marceline dans le forum ASP
    Réponses: 2
    Dernier message: 29/06/2006, 13h31
  5. Affichage d'un tableau perl dans une page HTML
    Par Jim_Nastiq dans le forum Web
    Réponses: 7
    Dernier message: 13/04/2006, 11h27

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