Bonjour à tous,
je suis actuellement en stage, j'ai développé un outil php/MySQL pour pouvoir importer des données dans une base et ensuite effectuer beaucoup de calculs statistiques sur ces mêmes données.
Dans la page php des statistiques j'ai mis un iframe pour charger les statistiques correspondantes à la recherche demandée par l'utilisateur.
Tout fonctionne parfaitement sur mon PC en local ,
j'ai eu quelques bugs de mise en page mais je les ai corrigés (pb de chemin d'accès ...)
Cependant aucun de mes graphiques conçus via Artichow ne fonctionne sur le serveur Linux
J'ai testé des exemples pour être sûr que Artichow fonctionne sous Linux : pas de soucis, tous les exemples testés fonctionnent. J'ai ensuite testé mon code en "forçant" les données, ie au lieu de les transmettre via l'url je les ai imposés à la page et là mon camembert se construit bien ....
J'ai donc vérifié ce qui était envoyé sur ma page puisque c'est sans doute de là que vient mon problème : ma page ne reçoit pas de array et je ne comprends pas pourquoi car sous Windows je n'ai aucun problème
Je vous mets ci-dessous le code des mes pages :
Le code pour mes stats : stats.php
Voici le code de stats_Incidents.php
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Liste des incidents graves et majeurs</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" href="../Design/design_stats.css" /> </head> <body> <?php // Connexion à la base de données mysql_connect("localhost", "root", ""); mysql_select_db("bdd_evenementsmajeurs_backbonerbci"); // On récupère l'année et le mois d'aujourd'hui // Ce qui va permettre de sélectionner par défaut l'année d'affichage des résultats et aussi les critères de recherche $aujourdhui = aujourdhui(); // Permet de savoir si on a fait la demande des statistiques que l'on souhaite afficher if(isset($_GET['id'])) { $id = $_GET['id']; if($id == "index") { $pageStats = "stats_Globales.php"; } elseif($id == "incidents") { $pageStats = "stats_Incidents.php"; $pageStatsSansPlusLourd = "stats_Incidents_ssPlusLourd.php"; } elseif($id == "tps") { $pageStats = "stats_TPs.php"; $pageStatsSansPlusLourd = "stats_TPs_ssPlusLourd.php"; } elseif($id == "autresIncidents") { $pageStats = "stats_AutresIncidents.php"; } } // Permet d'afficher les statistiques choisies par l'utilisateur // Par défaut, on lui affiche les données de l'année en cours if(isset($_POST['annee'])) {$recherche = 1;} else {$recherche = 0;} ?> <div id="container"> <div class="general"> <div class="entete"> <div class="logo"><img class="leLogo" src="../Images/logo_orange.gif" width="42" height="42"></div> <?php menu($id); ?> </div> <!-- entete --> <?php echo recherche($id, $aujourdhui); ?> <div class="corpsPage"> <?php if($recherche == 1) { $annee = "&annee=".$_POST['annee']; $periode = "&periode=".$_POST['periode']; echo "<iframe height=\"600px\" width=\"1000px\" src='".$pageStats."?recherche=". $recherche . $annee . $periode ."'></iframe>"; if($id != "index" AND $id != "autresIncidents") { // On crée une nouvelle fenêtre imbriquée pour mettre les mêmes diagrammes mais sans le + lourd incidents echo "<iframe height=\"600px\" width=\"1000px\" src='".$pageStatsSansPlusLourd."?recherche=". $recherche . $annee . $periode ."'></iframe>"; } } else { echo "<iframe height=\"600px\" width=\"1000px\" src='".$pageStats."?recherche=". $recherche ."'></iframe>"; if($id != "index" AND $id != "autresIncidents") { // On crée une nouvelle fenêtre imbriquée pour mettre les mêmes diagrammes mais sans le + lourd incidents echo "<iframe height=\"600px\" width=\"1000px\" src='".$pageStatsSansPlusLourd."?recherche=". $recherche ."'></iframe>"; } } ?> </div> </div> <!-- general --> <div class="foot"> <div class="imageFT"><img src="../Images/logo_ft.gif" width="114" height="29" alt="Logo France telecom"></div> </div> </div> <!-- container --> <?php mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ?> </body> </html>
le code pour créer mon camembert camembert.php placé dans le dossier Diagrammes
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Liste des incidents graves et majeurs</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" href="../Design/design_stats_fenetre.css" /> </head> <body> <?php // Connexion à la base de données mysql_connect("localhost", "root", ""); mysql_select_db("bdd_evenementsmajeurs_backbonerbci"); // Fonctions : // Fonction qui renvoie l'année et le mois en cours function aujourdhui() { $anneeAuj = date("Y", time()); $periodeAuj = array("01-01", "12-31"); return array($anneeAuj, $periodeAuj); } // Fonction pour calculer un pourcentage function cacul_pourcentage($nombre,$total,$pourcentage) { if ($total != 0) { $resultat = ($nombre/$total) * $pourcentage; return round($resultat,1); // Arrondi la valeur } else { return "Pas de données"; } } // Fonction qui permet de calculer le nombre de tickets dans la base // ainsi que la somme total des impacts pondérés function calcul_total($aujourdhui) { $nbInc = mysql_query("SELECT COUNT(*) Id_ticket FROM `incidents` WHERE Traite='OUI' AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')"); $impact = mysql_query("SELECT SUM(Impact_pondere) Impact_pondere FROM `incidents` WHERE Traite='OUI' AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')"); $totalInc = mysql_fetch_object($nbInc); $totalImp = mysql_fetch_object($impact); return $totalImp->Impact_pondere; } // Fonction qui fait les calculs nécessaires pour le diagramme // représentant la distribution des impacts selon les fonctions réseaux touchées function FctRes($aujourdhui) { $queryFctRes = "SELECT SUM(Impact_pondere) , Fonction_reseau FROM `incidents` WHERE Traite='OUI' AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."') GROUP BY Fonction_reseau ORDER BY SUM(Impact_pondere) ASC"; $resultFctRes = mysql_query($queryFctRes) or die(mysql_error()); $i=0; while($rowFctRes = mysql_fetch_array($resultFctRes)) { $valuesFctRes[$i] = $rowFctRes['SUM(Impact_pondere)']; $legendFctRes[$i] = $rowFctRes['Fonction_reseau']." : ".cacul_pourcentage($valuesFctRes[$i],calcul_total($aujourdhui),100)." %"; $i++; } if(empty($valuesFctRes)) { echo "<p> Il n'y a pas de données pour cette période </p>"; } else { echo "<img src='Diagrammes/camembert.php?values=".urlencode(serialize($valuesFctRes))." &legend=".urlencode(serialize($legendFctRes))."' alt='Mon graphique'/>"; } } // Fonction qui permet d'afficher les diagrammes function afficherDiagrammes($aujourdhui) { $totalImp = calcul_total($aujourdhui);?> <!-- On affiche le diagramme pour l'impact selon les fonctions réseaux touchées --> <div id="FctRes"> <h2> <br/>Impacts selon les fonctions réseaux touchées </h2> <?php echo FctRes($aujourdhui); ?> </div> <?php } // On récupère l'année et le mois d'aujourd'hui // Ce qui va permettre de sélectionner par défaut l'année d'affichage des résultats et aussi les critères de recherche $aujourdhui = aujourdhui(); ?> <div class="corpsPage"> <?php // On vérifie si l'utilisateur a effectué une recherche ou NON if($_GET['recherche'] == 0) // Pas de recherche, on affiche par défaut les statistiques de l'année en cours { afficherDiagrammes($aujourdhui); } else { list($debutPeriode, $finPeriode) = explode("|", $_GET['periode']); $periode = array($debutPeriode, $finPeriode); $aujourdhui = array($_GET['annee'], $periode); afficherDiagrammes($aujourdhui); } ?> </div> <!-- corpsPage --> <?php mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ?> </body> </html>
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 <?php // On vérifie que les données à afficher sur le graphique existent if(isset($_GET['values']) === FALSE) { exit; } if(isset($_GET['legend']) === FALSE) { exit; } if(isset($_GET['titre']) === FALSE) { exit; } // On récupère les valeurs à afficher sur le graphique dans $_GET['values'] et on les désérialize $data = @unserialize($_GET['values']); $dataLegend = @unserialize($_GET['legend']); $titre = $_GET['titre']; // On vérifie que les données passées en GET sont correctes if(is_array($data) === FALSE) { exit; } if(is_array($dataLegend) === FALSE) { exit; } require_once('Artichow/Pie.class.php'); $graph = new Graph(450, 280); $graph->shadow->setPosition(Shadow::RIGHT_BOTTOM); $graph->shadow->setSize(4); $graph->setBackgroundGradient( new LinearGradient( new Color(240, 240, 240, 0), new White, 0 ) ); $genres = array($data); $pie = new Pie(array_values($data)); $pie->setLabelPrecision(1); $pie->setLegend(array_values($dataLegend)); $pie->legend->setPosition(1.45, .25); $pie->setCenter(.36, .58); $pie->setSize(.65, .65); $pie->set3D(5); $pie->title->set($titre); $pie->title->move(0, -40); $pie->title->setFont(new TuffyBold(14)); $pie->title->setBackgroundColor(new White(50)); $pie->title->setPadding(5, 5, 2, 2); $pie->title->border->setColor(new Black()); $graph->add($pie); $graph->draw(); ?>
N'hésitez pas à me poser des questions ou me donner des pistes car j'ai besoin de résoudre mon problème.
Merci de votre aide
Partager