8741 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Afin de ne pas réinventer la roue en 2012,
et pour dessiner un camembert de stats (bien sûr...) en 3D (pie chart),
je me suis inspiré du code ici.

Je l'ai adapté à mes calculs...
Et rien ne s'affiche !
Il me semble pourtant l'avoir compris !
J'ai pourtant tester mes valeurs de stats, elles sont ok !

Les soucis commencent, à mon avis, à
l'auteur a écrit :
// préparation du graphique


J'obtiens une image vide, en résultat.
Quelquechose m'échappe !
Mais alors, où se trouve(nt) l'(les) erreur(s) ?
Pouvez-vous m'aider ?

Un grand merci d'avance.

<?php
	session_start();
	ob_start();
	
	date_default_timezone_set('Europe/Brussels');
	
	require_once("connexionMysql.inc.php");

//	if (isset($_GET['stat']) && !empty($_GET['stat'])) {
//		$graphStat=$_GET['stat'];
//		if ($graphStat != 4) {
//			header("Location: ../index.php");
//			exit;
//		}
//	} else {
//		header("Location: ../index.php");
//		exit;
//	}
$dateref01="20120701";
$dateref02="20120707";
//
//
//
	
	$largeurImage = 676;
	$hauteurImage = 322;
	$label = array(
		"Accueil","Création","Impression","Site Web","Kit promo",
		"Boutique","Contact","FAQ","Recherche","News",
		"Espace Client","Paiement","Mentions","Promos","Conditions",
		"Facebook","Documents","Administrateur");
	$data = array();
	$aa = array();
	$mm = array();
	$rubr=count($label);

	$indYY01 = substr($dateref01,0,4);
	$indMM01 = substr($dateref01,4,2);
	$indJJ01 = substr($dateref01,6,2);
	$indYY02 = substr($dateref02,0,4);
	$indMM02 = substr($dateref02,4,2);
	$indJJ02 = substr($dateref02,6,2);
	for ($indYY=$indYY01; $indYY<=$indYY02; $indYY++) {
		if ($indYY==$indYY01) {
			$debMM=$indMM01;
		} else {
			$debMM=1;
		}
		if ($indYY==$indYY02) {
			$finMM=$indMM02;
		} else {
			$finMM=12;
		}
		for ($indMM=$debMM; $indMM<=$finMM; $indMM++) {
			$aa[]=sprintf('%02d', $indYY);
			$mm[]=sprintf('%02d', $indMM);
		}
	}

	for ($ss=0; $ss<$rubr; $ss++) {
		$clics = "clics".sprintf('%02d', $ss+1);
		$data[$ss]=0;
		for ($ind=0; $ind<count($aa); $ind++) {
			$reqVisite="SELECT * FROM ".$clics.
				" WHERE annee= '".$aa[$ind]."' AND mois= '".$mm[$ind]."' ";
			$resVisite=mysql_query($reqVisite);
			$record=mysql_fetch_array($resVisite);
			if ($indYY==$indYY01 AND $indMM==$indMM01) {
				$debJJ=$indJJ01;
			} else {
				$debJJ=1;
			}
			if ($indYY==$indYY02 AND $indMM==$indMM02) {
				$finJJ=$indJJ02;
			} else {
				$finJJ=31;
			}
			for ($indj=$debJJ; $indj<=$finJJ; $indj++) {
				$jour= "jour".sprintf('%02d', $indj);
				$data[$ss] += $record["$jour"];
			}
		}
	}

	$data_sum = array_sum($data);
		
	// Réglages
	$show_label = true; // true = affichage avec label, false = sans label.
	$show_percent = true; // true = affichage avec pourcentage, false = sans pourcentage.
	$show_text = true; // true = affichage avec texte, false = sans texte.
	$show_parts = false; // true = affichage avec valeurs , false = snas valeurs.
	$label_form = 'square'; // 'square' ou 'round' label.
	$background_color = 'ED0000'; // background-color du graphique...
	$text_color = '000000'; // text-color.
	$colors = array('003366', 'CCD6E0', '7F99B2','F7EFC6', 'C6BE8C', 'CC6600','990000','520000','BFBFC1','808080'); // couleurs des quartiers.
	$shadow_height = 16; // Hauteur relief 3D.
	$shadow_dark = true; // true = ombre plus foncée, false = ombre plus légère...
	$width = 199;
	$height = $width/2;
			  
	for ($i=0; $i<$rubr; $i++) {
		if ($data[$i]/array_sum($data) < 0.1) {
			$number[$i] = ' '.number_format(($data[$i]/array_sum($data))*100,1,',','.').'%';
		} else {
			$number[$i] = number_format(($data[$i]/array_sum($data))*100,1,',','.').'%';
		}
		if (strlen($label[$i]) > $text_length) {
			$text_length = strlen($label[$i]);
		}
	}
	
	if (is_array($label)) {
		$antal_label = count($label);
		$xtra = (5+15*$antal_label)-($height+ceil($shadow_height));
		if ($xtra > 0) {
			$xtra_height = (5+15*$antal_label)-($height+ceil($shadow_height));
		}
		$xtra_width = 5;
		if ($show_label) {
			$xtra_width += 20;
		}
		if ($show_percent) {
			$xtra_width += 45;
		}
		if ($show_text) {
			$xtra_width += $text_length*8;
		}
		if ($show_parts) {
			$xtra_width += 35;
		}
	}

	// préparation du graphique
	header ("Content-type: image/png");  
	//	$im = ImageCreateTrueColor($largeurImage, $hauteurImage)
	$im = ImageCreateTrueColor($width+$xtra_width, $height+ceil($shadow_height)+$xtra_height);
	//		or die ("Erreur lors de la création de l'image"); 
	ImageFill($im, 0, 0, colorHex($im, $background_color));

	foreach ($colors as $colorkode) {
		$fill_color[] = colorHex($im, $colorkode);
		$shadow_color[] = colorHexshadow($im, $colorkode, $shadow_dark);
	}
	
	$label_place = 5;

	if (is_array($label)) {
		for ($i = 0; $i < $rubr; $i++) 	{
			if ($label_form == 'round' && $show_label && $data[$i] > 0) {
				imagefilledellipse($im,$width+11,$label_place+5,10,10,colorHex($im, $colors[$i % count($colors)]));
				imageellipse($im,$width+11,$label_place+5,10,10,colorHex($im, $text_color));
			}
			else if ($label_form == 'square' && $show_label && $data[$i] > 0) {	
				imagefilledrectangle($im,$width+6,$label_place,$width+16,$label_place+10,colorHex($im, $colors[$i % count($colors)]));
				imagerectangle($im,$width+6,$label_place,$width+16,$label_place+10,colorHex($im, $text_color));
			}
			if ($data[$i] > 0) {
				if ($show_percent) {
					$label_output = $number[$i].' ';
				}
				if ($show_text) {
					$label_output = $label_output.$label[$i].' ';
				}
				if ($show_parts) {
					$label_output = $label_output.$data[$i];
				}
				imagestring($im,'2',$width+20,$label_place,$label_output,colorHex($im, $text_color));				
				$label_output = '';
				$label_place = $label_place + 15;
			}
		}
	}

	$centerX = round($width/2);
	$centerY = round($height/2);
	$diameterX = $width-4;
	$diameterY = $height-4;
		
	$start = 270;
	
	for ($i=0; $i<$rubr; $i++) {
		$value += $data[$i];
		$end = ceil(($value/$data_sum)*360) + 270;
		$slice[] = array($start, $end, $shadow_color[$value_counter % count($shadow_color)], $fill_color[$value_counter % count($fill_color)]);
		$start = $end;
		$value_counter++;
	}
	
	for ($i=$centerY+$shadow_height; $i>$centerY; $i--) {
		for ($j=0; $j<$rubr; $j++) {
			if ($slice[$j][0] != $slice[$j][1]) {
				ImageFilledArc($im, $centerX, $i, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][2], IMG_ARC_PIE);
			}
		}
	}	
	
	for ($j=0; $j<$rubr; $j++) {
		if ($slice[$j][0] != $slice[$j][1]) {
			ImageFilledArc($im, $centerX, $centerY, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][3], IMG_ARC_PIE);
		}
	}

    ImagePng($im);
	ImageDestroy($im);

	function colorHex($im, $HexColorString) {
		$R = hexdec(substr($HexColorString,0,2));
		$G = hexdec(substr($HexColorString,2,2));
		$B = hexdec(substr($HexColorString,4,2));
		return ImageColorAllocate($im, $R, $G, $B);
	}
	
	function colorHexshadow($im, $HexColorString, $mork) {
		$R = hexdec(substr($HexColorString,0,2));
		$G = hexdec(substr($HexColorString,2,2));
		$B = hexdec(substr($HexColorString,4,2));
		if ($mork) {
			($R>99)?$R-=100:$R=0;
			($G>99)?$G-=100:$G=0;
			($B>99)?$B-=100:$B=0;
		} else {
			($R<220)?$R+=35:$R=255;
			($G<220)?$G+=35:$G=255;
			($B<220)?$B+=35:$B=255;				
		}			
		return ImageColorAllocate($im, $R, $G, $B);
	}

	mysql_close($connexion);
	ob_end_flush();
?>

Modifié par jytest (13 Jul 2012 - 11:08)
A défaut de pouvoir m'aider sur ce code,
qui correspond pourtant parfaitement à mes attentes,
avez-vous un code qui crée des camemberts de statistiques,
avec label, pourcentages et valeur,
en méthode (très) lisible...

En effet, mon camembert est composé de 18 morceaux !
De plus, je fais le difficle, je le souhaiterai en relief 3D...

A l'aide, svp...

Je tourne ce code dans tous les sens, je ne vois pas
la raison pour laquelle j'ai une image vide,
or que j'ai bien des label et des data !!!

A l'aide, svp !

D'avance merci.
Modifié par jytest (08 Jul 2012 - 20:56)
Hi,

en supprimant ta boucle
for ($ss=0; $ss<$rubr; $ss++) { ... } 


et en la remplaçant par

for( $i = 0 ; $i < 10 ; $i++ ){
  $data[$i] = $i ;
} 


J'obtiens bien un graphique.

Ton problème vient donc :
- soit de la récupération d'infos depuis la base de données.
- soit du format du tableau $data. (associatif au lieu d'indicé ?)

Sinon tu peux regarder la bibliothèque JPGraph (php), ou bien Flot (http://people.iola.dk/olau/flot/examples/pie.html librairie JS).
Merci pour ton passage.
Je viens de remplacer par ton code.

//	for ($ss=0; $ss<$rubr; $ss++) {
//		$clics = "clics".sprintf('%02d', $ss+1);
//		$data[$ss]=0;
//		for ($ind=0; $ind<count($aa); $ind++) {
//			$reqVisite="SELECT * FROM ".$clics.
//				" WHERE annee= '".$aa[$ind]."' AND mois= '".$mm[$ind]."' ";
//			$resVisite=mysql_query($reqVisite);
//			$record=mysql_fetch_array($resVisite);
//			if ($indYY==$indYY01 AND $indMM==$indMM01) {
//				$debJJ=$indJJ01;
//			} else {
//				$debJJ=1;
//			}
//			if ($indYY==$indYY02 AND $indMM==$indMM02) {
//				$finJJ=$indJJ02;
//			} else {
//				$finJJ=31;
//			}
//			for ($indj=$debJJ; $indj<=$finJJ; $indj++) {
//				$jour= "jour".sprintf('%02d', $indj);
//				$data[$ss] += $record["$jour"];
//			}
//		}
//	}

for( $i = 0 ; $i < $rubr ; $i++ ){
  $data[$i] = $i ;
}

J'ai toujours un graphique vide avec cela !



Par contre, j'ai aussi testé mes valeurs de bdd...
	for ($ss=0; $ss<$rubr; $ss++) {
		$clics = "clics".sprintf('%02d', $ss+1);
		$data[$ss]=0;
		for ($ind=0; $ind<count($aa); $ind++) {
			$reqVisite="SELECT * FROM ".$clics.
				" WHERE annee= '".$aa[$ind]."' AND mois= '".$mm[$ind]."' ";
			$resVisite=mysql_query($reqVisite);
			$record=mysql_fetch_array($resVisite);
			if ($indYY==$indYY01 AND $indMM==$indMM01) {
				$debJJ=$indJJ01;
			} else {
				$debJJ=1;
			}
			if ($indYY==$indYY02 AND $indMM==$indMM02) {
				$finJJ=$indJJ02;
			} else {
				$finJJ=31;
			}
			for ($indj=$debJJ; $indj<=$finJJ; $indj++) {
				$jour= "jour".sprintf('%02d', $indj);
				$data[$ss] += $record["$jour"];
			}
		}
	}

for( $i = 0 ; $i < $rubr ; $i++ ){
  echo $data[$i]."<br>"  ;
}
... et $data contient bien des valeurs...

Mon graphique est toujours vide, chez moi !
Cela ne change rien pour moi !
Pourquoi ?

Pour être sûr d'être sur les mêmes bases,
je me suis permis de refaire copier/coller dans le post de tête.

Merci d'avance, pour votre précieuse aide.
Vais-je pouvoir digéré mon camembert ce midi ?
Modifié par jytest (09 Jul 2012 - 11:02)
Dans ce cas, regarde la configuration de ton serveur apache, et vérifie que la librairie GD est bien activée.
Bizarre,
Pour info, ce script a besoin de :
a écrit :
Required from PHP-installation:
This script requires GD 2.0.1 or later to be installed on your webserver.


Chez one.com, j'ai pourtant ceci,
avec mon info.php :

a écrit :
gd

GD Support enabled
GD Version bundled (2.0.34 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.3.7
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 6b
PNG Support enabled
libPNG Version 1.2.27
WBMP Support enabled
XPM Support enabled
XBM Support enabled

Directive Local Value Master Value
gd.jpeg_ignore_warning 0 0

Modifié par jytest (09 Jul 2012 - 15:20)
Je sais pas, je teste toujours sur one.com directement !
Je n'ai pas installé apache.
Je suis sous dw cs6.

Puis-je me permettre d'aspirer le contenu
et de le tester sur un de tes sites.
Modifié par jytest (09 Jul 2012 - 16:29)
Pourquoi tester en local, vu que Zed13 a eu l'amabilité de le tester :
jb_gfx a écrit :
Ça serait quand même plus simple d'installer Wamp/Mamp/Lamp et de tester en local.
.

Tiens, tiens, cela me rappelle un ancien post...
??? a écrit :
@jb_gfx: Méchant bonhomme!


Par contre, le but de ma démarche, est d'essayer directement le code
sur un autre serveur que celui de one.com, sur lequel je suis...


Une bonne âme peut-elle tester pour moi ?
Merci d'avance.
Modifié par jytest (09 Jul 2012 - 18:03)
jytest a écrit :

Par contre, le but de ma démarche, est d'essayer directement le code
sur un autre serveur que celui de one.com, sur lequel je suis...



jb_gfx a écrit :
Ça serait quand même plus simple d'installer Wamp/Mamp/Lamp et de tester en local.


Smiley sweatdrop
Par contre, le but de ma démarche, est d'essayer directement le code
sur un autre serveur DISTANT que celui de one.com, sur lequel je suis...
A toute bonne âme, merci de m'aider, svp !!!
Modifié par jytest (09 Jul 2012 - 20:26)
T'es un vrai boulet ma parole... quelle différence entre un serveur local et un serveur distant : aucune. T'as juste a installer Wamp, ça prend 2 minutes et faire ton test toi même. A un moment faut se bouger un peu au lieu d'attendre après les autres.
Modifié par jb_gfx (09 Jul 2012 - 18:18)
En lisant les lignes qui précède je dis l'avoir déjà tester sur serveur d'évaluation de Dreamweaver cs6 !
Incident clos !
Modifié par jytest (09 Jul 2012 - 20:25)
jytest a écrit :
En lisant les lignes qui précède je dis l'avoir déjà tester sur serveur d'évaluation de Dreamweaver cs6 !


Allez arrête, tu dis exactement le contraire. Bon bref si tu veux pas te bouger, t'as raison laissons tomber.

Bonne chance.
a écrit :
Je n'ai pas installé apache.
Je suis sous dw cs6.

Modifié par jytest (09 Jul 2012 - 20:26)
Allez j'ai testé, il suffit de rajouter la ligne :


ini_set("display_errors", 0);


En haut de ton script pour que le graphique s'affiche.

Ça vient du fait que t'as plein de messages d'erreurs à cause de variables et d'indices de tableau mal utilisés.
Merci pour ton retour à la gentilesse
et au dévouement !
Merci !

Je mets cela juste après <?php
rien ne change !
Image toujours vide !
pas de messages d'erreurs !
Modifié par jytest (09 Jul 2012 - 18:59)
jytest a écrit :
Où dois-je mettre cela en début ?
Avant ou après &lt;?php ?


J'ai fait ça :


	session_start();
	ini_set("display_errors", 0);
	ob_start();


Il faut encore que ton serveur accepte la directive init_set(), c'est pas toujours le cas.

Voilà le résultat :

upload/103-graph.jpg
Modifié par jb_gfx (09 Jul 2012 - 18:59)
a écrit :
Il faut encore que ton serveur accepte la directive init_set(), c'est pas toujours le cas.
Et bien, chez one.com, j'y ai pas accès !
Comment faire alors ?
Peux-tu encore m'aider ?

Tu as de la chance toi de voir un début de camembert !
Modifié par jytest (09 Jul 2012 - 19:02)
Pages :