Problème pour ajouter une classe

Résolu
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 19 oct. 2011 à 10:03
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 19 oct. 2011 à 15:04
Bonjour tous le monde.

Alors voila je fais un petit site, il est quasi terminer (merci a nemo_1 pour son aide)
et la je planche sur un soucis surement bête.

J'ai télécharger un camembert 2D/3D gratuit, qui marche très bien.
Je change ces valeur en fonction de ma BDD, pas de soucis. Par contre j'aimerais que le camembert s'affiche dans mon

mais quand j'essaye ca me retourne une page blanche !

Voici les 2 codes du dit camembert : le premier est sur ma page compte.php et c'est sur celle ci que j'aimerais qu'elle s'affiche.

<?php
session_start();
include('base.php');

Base();

$sql = mysql_query('SELECT * FROM tickets WHERE catTicket="messagerie"');
$messagerie = mysql_num_rows($sql);

$sql2 = mysql_query('SELECT * FROM tickets WHERE catTicket="reseau"');
$reseau = mysql_num_rows($sql2);

$sql3 = mysql_query('SELECT * FROM tickets WHERE catTicket="materiel"');
$materiel = mysql_num_rows($sql3);

$sql4 = mysql_query('SELECT * FROM tickets WHERE catTicket="logiciel"');
$logiciel = mysql_num_rows($sql4);

mysql_close();

 require("camembert.php"); # on charge la classe camembert
  
 $camembert = new camembert(); # initialisation

 # on peut utiliser une requete SQL pour alimenter le tableau
 $camembert->add_tab( $messagerie, "Messagerie");
 $camembert->add_tab( $reseau, "Reseau");
 $camembert->add_tab( $materiel, "Materiel");
 $camembert->add_tab( $logiciel, "Logiciel");


 $camembert->trier_tab(); # Facultatif, les donnees sont triees dans l'ordre decroissant
 # $camembert->affiche_tab(); # Debug
 
 # on genere l'image au format PNG
 $camembert->stat2png(3, 15); # 1er argument (2 ou 3 pour la 2D ou la 3D) - 2eme argument hauteur en pixel de l'effet 3D (mettre quelque chose meme pour la 2D)		


La page qui lance et maintenant celle de la classe :

<?php
# Camembert 2D/3D - 03/05/2008
# Auteur : Didier STRAUS (C)2008 www.Software-DS.com
# Description: Cree une image PNG en camembert a partir des donnees fournies.
# Demo en ligne : http://www.software-ds.com/PHP/Camembert-2D-3D/demo-camembert.php

class camembert {
 var $dim;  # dim de position dans le tableau
 var $tabVal; # tableau des valeurs
 var $tabNom; # tableau des noms
 var $tot;    # total des valeurs

### camembert : constructeur / initialisation
 function camembert() {
  $this->dim = 0;
  $this->tot = 0;
  
  $this->tabVal=array();
  $this->tabNom=array();
 } # fin camembert


### add_tab : ajoute une donnee au tableau (valeur + libelle)
 function add_tab($val, $nom) {
  if ($val > 0) {
   $this->tabVal[$this->dim] = $val;
   $this->tabNom[$this->dim] = $nom;
   $this->tot = $this->tot + $val; # calcul du total
   $this->dim++; # MAJ de l'dim
  }
 } # fin add_tab


### trier_tab : trie le tableau par ordre decroissant
 function trier_tab() {
  if ($this->dim > 1) { # tri necessaire ?
  
   for($i=0;$i<$this->dim-1;$i++) {
    $maxi = $this->tabVal[$i];

    for($j=$i+1;$j<$this->dim;$j++) {
     if ($maxi < $this->tabVal[$j]) { # on echange les positions dans le tableau
      $maxi  = $this->tabVal[$j];
      $inter = $this->tabNom[$j];
      
      $this->tabVal[$j] = $this->tabVal[$i];
      $this->tabNom[$j] = $this->tabNom[$i];

      $this->tabVal[$i] = $maxi;
      $this->tabNom[$i] = $inter;      
     }
    } # for j 
   } # for i
  } # if
 } # fin trier_tab


### affiche_tab : affiche les donnees du tableau, utile pour utile Debug
 function affiche_tab() {
  for($i=0; $i<$this->dim; $i++) {
   echo $this->tabNom[$i].' '.$this->tabVal[$i].'
';
  } # for
 } # fin affiche_tab
 

### stat2png : genere une image camembert au format PNG
 function stat2png($mode, $hauteur_effet_3D) {
  $width       = 370; # largeur de l'image
  $height      = 220; # hauteur de l'image
  $centre_x    = 110; # poisition X du centre du camembert
  $centre_y    = 110; # poisition Y du centre du camembert
  $cam_largeur = 200; # largeur du camembert
  $cam_hauteur = 160; # hauteur du camembert

  # declaration/initialisation de l'image
  $img = imagecreatetruecolor($width, $height) or die("Probleme : Chargement de la lib GD impossible");

  # declaration des couleurs
  $noir  = imagecolorallocate($img,0,0,0);
  $vert  = imagecolorallocate($img,90,160,90);
  $blanc = imagecolorallocate($img,255,255,255);

  ImageFill( $img, 0, 0, $blanc ); # couleur de fond de l'image (blanc)
  
  if ($mode<>2 && $mode<>3) { # controle du mode
   $mode = 2;
  }
  
  if ($mode == 2) {
   $cam_largeur = $cam_hauteur; # pour la 2D on veut un cercle et pas une ellipse
  }
  
  $tot_angle = -90; # on commence a afficher les donnees a partir de midi

  # variables pour generer les couleurs du camembert
  $v2 = 185;
  $v1 = 75;
  $c  = 0;
  
  for($i=0; $i<$this->dim; $i++) { # pour chaque morceau du camembert, on calcul la couleur et les angles
   
   # on genere une couleur differente a chaque iteration et on la memorise
   if ($c==0) {
    $tab_couleurs[$i][0][0] = $v1; # R
    $tab_couleurs[$i][0][1] = $v2; # G
    $tab_couleurs[$i][0][2] = $v2; # B
   }
   else if ($c==1) {
    $tab_couleurs[$i][0][0] = $v2; # R
    $tab_couleurs[$i][0][1] = $v1; # G
    $tab_couleurs[$i][0][2] = $v2; # B
   }
   else if ($c==2) {
    $tab_couleurs[$i][0][0] = $v2; # R
    $tab_couleurs[$i][0][1] = $v2; # G
    $tab_couleurs[$i][0][2] = $v1; # B
   }
   
   $c++;
   # calcul complexe pour changer de couleur
   if ($c==3) {
    $c   = 0;
    $v1 += 60;
    $v2 -= 40;
    
if (abs($v1-$v2) < 40) {
     $v1 += 30;
     $v2 -= 30;
    } # if
   } # if

   # on assombrit la couleur et on la memorise
   $dark = 35; # modifier cette valeur pour modifier l'assombrissement des couleurs

   for($k=0; $k<3; $k++) { # R G B
 
    if ($tab_couleurs[$i][0][$k] - $dark > 0)
     $tab_couleurs[$i][1][$k] = $tab_couleurs[$i][0][$k] - $dark;
    else
     $tab_couleurs[$i][1][$k] = 0;

   } # for($k=0; k<3; k++)

   # on calcul et memorise l'angle
   $tab_angle[$i] = $tot_angle;
   $angle = ($this->tabVal[$i] * 360) / $this->tot;
   $tot_angle += $angle;

  } # for($i=0; $i<$this->dim; $i++)

  $tab_angle[$this->dim] = $tot_angle; # on n'oublie pas de memoriser le dernier angle ;)


  # on peut commencer a afficher les morceaux de camemberts
   
  if ($mode == 3) { # Effet 3D
      
   for($k=$centre_y + $hauteur_effet_3D; $k > $centre_y; $k--) { # pour avoir un effet 3D de 10 pixels

    for($i=0; $i<$this->dim; $i++) { # pour chaque morceau du camembert
         
     # creation de la couleur sombre
     $color = imagecolorallocate( $img, $tab_couleurs[$i][1][0], $tab_couleurs[$i][1][1], $tab_couleurs[$i][1][2] ); # R G B
       
 # on affiche le morceau de camembert
     imagefilledarc($img, $centre_x, $k, $cam_largeur, $cam_hauteur, $tab_angle[$i], $tab_angle[$i+1], $color, IMG_ARC_PIE);

    } # for($i=0; $i<$this->dim; $i++)

   } # for($k=120; $k>110; $k--)

  } # if ($mode == 3)


  # on affiche les morceaux "clairs" du camembert (partie commune 2D/3D)
  for($i=0; $i<$this->dim; $i++) { # pour chaque morceau du camembert
 
   # creation de la couleur claire
   $color = imagecolorallocate( $img, $tab_couleurs[$i][0][0], $tab_couleurs[$i][0][1], $tab_couleurs[$i][0][2] ); # R G B
   
   # on affiche le morceau de camembert
   imagefilledarc($img, $centre_x, $centre_y, $cam_largeur, $cam_hauteur, $tab_angle[$i], $tab_angle[$i+1], $color, IMG_ARC_PIE);
   
   #  on affiche la legende
   $x = 235;
   $y = 15 + $i*16;
   imagefilledrectangle($img, $x, $y, $x+9, $y+9, $color); # petit carre de couleur
   imagestring($img, 2, $x+15, $y-2, $this->tabNom[$i]. ' ('.floor(($this->tabVal[$i] * 100) / $this->tot).'%)', $noir); # texte

  } # for($i=0; $i<$this->dim; $i++)

   
  # finalisation de l'image
  
  imagestring( $img, 2, 175, 195, "", $vert); # vous pouvez mettre votre site internet

  header("Content-type: image/png"); # declaration du Header, pour pouvoir afficher l'image
  imagepng($img);     # creation de l'image
  imagedestroy($img); # nettoyage des ressources
 } # fin stat2png


} # fin de la classe camembert
?>



Voila, donc moi j'ai essayé sur la premiere page d'inclure mes include menu head ect..
et de mettre la structur du lancement du camembert entre des

mais si je rajoute ne serait ce qu'un include ca m'affiche une page blanche . Voilou j’espère avoir été clair .

Merci d'avance.

Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.

8 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
19 oct. 2011 à 13:58
<?php
echo '';
?>

ou avec des parametres

<?php
echo '';
?>

et dans camemnbert.php

$p1=(int)$_GET['p1'];
$p2=(int)$_GET['p2'];
$p3=(int)$_GET['p3'];
$p4=(int)$_GET['p4'];


Bonne programmation !
3
cs_nemo_1 Messages postés 60 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 26 octobre 2011
19 oct. 2011 à 10:57
Chalute,

Et ben tu tiens le bon bout toi on dirait :)

Alors, j'ai pas beacoup de temps pour tout analyser et oui je suis au taff :) mais je vais te donner une piste on se sait jamais.

Essaie regarder le code source de ta page blanche et dit nous ce que tu vois.

Je crois que cela doit être un problème d'entetes.

Quand tu fais l'affichage de ton camenbert il envoit un header à ton serveur et comme des données sont envoyées aussi, j'ai peur que ton programe ne bug.

Fait ce test:

output_buffering=On dans ton php.ini et redemarre ton serveur web et réessaie.

J'espère que celà t'aidera.

Bon courage :)
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
19 oct. 2011 à 12:47
J'ai pensé aussi au header a la fin de la page class camembert.
Alors quand j'ai la page blanche je pense que tu as raison ça bug , parce que j'ai pas de code. J'ai mit le output_buffering=On comme vous me l'avez proposé.
Je pensais sinon récupérer l'image et l’intégrer avec un src mais une fois l'image générer l'url n'as pas changé donc pas possibles .

Voila si tu as une idée ?
pour info tu as le camembert en exécution a cette adresse :
http://www.software-ds.com/PHP/Camembert-2D-3D/demo-camembert.php

J'ai inspecté le code, une fois générer ça crée un lien pour faire un src.

Merci.

Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
cs_nemo_1 Messages postés 60 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 26 octobre 2011
19 oct. 2011 à 13:15
Okay...

le code source de ta page blanche est vierge aussi?

Sinon essaie de nous le coller ici aussi cela peux être intéressant.

Aussi essaie dans un terminal d'éxecuter toute tes requetes SQL pour voir si tu n'as pas une erreur quelque part.


sinon vraiment j'ai pas d'autre idées.

Sinon pour le debug:

Separe ton code et test chaque module a part.

Page sans camembert
Camembert simple
Page avec camembert peut etre tu trouveras ta solution.

Bon courage.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
19 oct. 2011 à 13:34
bonjour

imagestring($img,2,175,195,"",$vert);
j'ai enlevé les espaces et puis ça fonctionne ?


mon test.php

<?php
# Camembert 2D/3D - 03/05/2008
# Auteur : Didier STRAUS (C)2008 www.Software-DS.com
# Description: Cree une image PNG en camembert a partir des donnees fournies.
# Demo en ligne : http://www.software-ds.com/PHP/Camembert-2D-3D/demo-camembert.php

class camembert {
 var $dim;  # dim de position dans le tableau
 var $tabVal; # tableau des valeurs
 var $tabNom; # tableau des noms
 var $tot;    # total des valeurs

### camembert : constructeur / initialisation
 function camembert() {
  $this->dim = 0;
  $this->tot = 0;
  
  $this->tabVal=array();
  $this->tabNom=array();
 } # fin camembert


### add_tab : ajoute une donnee au tableau (valeur + libelle)
 function add_tab($val, $nom) {
  if ($val > 0) {
   $this->tabVal[$this->dim] = $val;
   $this->tabNom[$this->dim] = $nom;
   $this->tot = $this->tot + $val; # calcul du total
   $this->dim++; # MAJ de l'dim
  }
 } # fin add_tab


### trier_tab : trie le tableau par ordre decroissant
 function trier_tab() {
  if ($this->dim > 1) { # tri necessaire ?
  
   for($i=0;$i<$this->dim-1;$i++) {
    $maxi = $this->tabVal[$i];

    for($j=$i+1;$j<$this->dim;$j++) {
     if ($maxi < $this->tabVal[$j]) { # on echange les positions dans le tableau
      $maxi  = $this->tabVal[$j];
      $inter = $this->tabNom[$j];
      
      $this->tabVal[$j] = $this->tabVal[$i];
      $this->tabNom[$j] = $this->tabNom[$i];

      $this->tabVal[$i] = $maxi;
      $this->tabNom[$i] = $inter;      
     }
    } # for j 
   } # for i
  } # if
 } # fin trier_tab


### affiche_tab : affiche les donnees du tableau, utile pour utile Debug
 function affiche_tab() {
  for($i=0; $i<$this->dim; $i++) {
   echo $this->tabNom[$i].' '.$this->tabVal[$i].'
';
  } # for
 } # fin affiche_tab
 

### stat2png : genere une image camembert au format PNG
 
 
 
  function stat2png($mode, $hauteur_effet_3D) {
 
  //return 'ok';
 
  $width       = 370; # largeur de l'image
  $height      = 220; # hauteur de l'image
  $centre_x    = 110; # poisition X du centre du camembert
  $centre_y    = 110; # poisition Y du centre du camembert
  $cam_largeur = 200; # largeur du camembert
  $cam_hauteur = 160; # hauteur du camembert

  # declaration/initialisation de l'image
  $img = imagecreatetruecolor($width, $height) or die("Probleme : Chargement de la lib GD impossible");

  # declaration des couleurs
  $noir  = imagecolorallocate($img,0,0,0);
  $vert  = imagecolorallocate($img,90,160,90);
  $blanc = imagecolorallocate($img,255,255,255);

  ImageFill( $img, 0, 0, $blanc ); # couleur de fond de l'image (blanc)
  
  if ($mode<>2 && $mode<>3) { # controle du mode
   $mode = 2;
  }
  
  if ($mode == 2) {
   $cam_largeur = $cam_hauteur; # pour la 2D on veut un cercle et pas une ellipse
  }
  
  $tot_angle = -90; # on commence a afficher les donnees a partir de midi

  # variables pour generer les couleurs du camembert
  $v2 = 185;
  $v1 = 75;
  $c  = 0;
  
  for($i=0; $i<$this->dim; $i++) { # pour chaque morceau du camembert, on calcul la couleur et les angles
   
   # on genere une couleur differente a chaque iteration et on la memorise
   if ($c==0) {
    $tab_couleurs[$i][0][0] = $v1; # R
    $tab_couleurs[$i][0][1] = $v2; # G
    $tab_couleurs[$i][0][2] = $v2; # B
   }
   else if ($c==1) {
    $tab_couleurs[$i][0][0] = $v2; # R
    $tab_couleurs[$i][0][1] = $v1; # G
    $tab_couleurs[$i][0][2] = $v2; # B
   }
   else if ($c==2) {
    $tab_couleurs[$i][0][0] = $v2; # R
    $tab_couleurs[$i][0][1] = $v2; # G
    $tab_couleurs[$i][0][2] = $v1; # B
   }
   
   $c++;
   # calcul complexe pour changer de couleur
   if ($c==3) {
    $c   = 0;
    $v1 += 60;
    $v2 -= 40;
    
if (abs($v1-$v2) < 40) {
     $v1 += 30;
     $v2 -= 30;
    } # if
   } # if

   # on assombrit la couleur et on la memorise
   $dark = 35; # modifier cette valeur pour modifier l'assombrissement des couleurs

   for($k=0; $k<3; $k++) { # R G B
 
    if ($tab_couleurs[$i][0][$k] - $dark > 0)
     $tab_couleurs[$i][1][$k] = $tab_couleurs[$i][0][$k] - $dark;
    else
     $tab_couleurs[$i][1][$k] = 0;

   } # for($k=0; k<3; k++)

   # on calcul et memorise l'angle
   $tab_angle[$i] = $tot_angle;
   $angle = ($this->tabVal[$i] * 360) / $this->tot;
   $tot_angle += $angle;

  } # for($i=0; $i<$this->dim; $i++)

  $tab_angle[$this->dim] = $tot_angle; # on n'oublie pas de memoriser le dernier angle ;)


  # on peut commencer a afficher les morceaux de camemberts
   
  if ($mode == 3) { # Effet 3D
      
   for($k=$centre_y + $hauteur_effet_3D; $k > $centre_y; $k--) { # pour avoir un effet 3D de 10 pixels

    for($i=0; $i<$this->dim; $i++) { # pour chaque morceau du camembert
         
     # creation de la couleur sombre
     $color = imagecolorallocate( $img, $tab_couleurs[$i][1][0], $tab_couleurs[$i][1][1], $tab_couleurs[$i][1][2] ); # R G B
       
 # on affiche le morceau de camembert
     imagefilledarc($img, $centre_x, $k, $cam_largeur, $cam_hauteur, $tab_angle[$i], $tab_angle[$i+1], $color, IMG_ARC_PIE);

    } # for($i=0; $i<$this->dim; $i++)

   } # for($k=120; $k>110; $k--)

  } # if ($mode == 3)


  # on affiche les morceaux "clairs" du camembert (partie commune 2D/3D)
  for($i=0; $i<$this->dim; $i++) { # pour chaque morceau du camembert
 
   # creation de la couleur claire
   $color = imagecolorallocate( $img, $tab_couleurs[$i][0][0], $tab_couleurs[$i][0][1], $tab_couleurs[$i][0][2] ); # R G B
   
   # on affiche le morceau de camembert
   imagefilledarc($img, $centre_x, $centre_y, $cam_largeur, $cam_hauteur, $tab_angle[$i], $tab_angle[$i+1], $color, IMG_ARC_PIE);
   
   #  on affiche la legende
   $x = 235;
   $y = 15 + $i*16;
   imagefilledrectangle($img, $x, $y, $x+9, $y+9, $color); # petit carre de couleur
   imagestring($img, 2, $x+15, $y-2, $this->tabNom[$i]. ' ('.floor(($this->tabVal[$i] * 100) / $this->tot).'%)', $noir); # texte

  } # for($i=0; $i<$this->dim; $i++)

   
  # finalisation de l'image
  
  imagestring($img,2,175,195,"",$vert); # vous pouvez mettre votre site internet

 

  header("Content-type: image/png"); # declaration du Header, pour pouvoir afficher l'image
  imagepng($img);     # creation de l'image
  imagedestroy($img); # nettoyage des ressources

  
 } # fin stat2png


} # fin de la classe camembert
//session_start();
//include('base.php');


/*
Base();

$sql = mysql_query('SELECT * FROM tickets WHERE catTicket="messagerie"');
$messagerie = mysql_num_rows($sql);

$sql2 = mysql_query('SELECT * FROM tickets WHERE catTicket="reseau"');
$reseau = mysql_num_rows($sql2);

$sql3 = mysql_query('SELECT * FROM tickets WHERE catTicket="materiel"');
$materiel = mysql_num_rows($sql3);

$sql4 = mysql_query('SELECT * FROM tickets WHERE catTicket="logiciel"');
$logiciel = mysql_num_rows($sql4);

mysql_close();

*/

 //require("camembert.php"); # on charge la classe camembert
  
 $camembert = new camembert(); # initialisation

 # on peut utiliser une requete SQL pour alimenter le tableau
 $camembert->add_tab( $messagerie=15, "Messagerie");
 $camembert->add_tab( $reseau=15, "Reseau");
 $camembert->add_tab( $materiel=30, "Materiel");
 $camembert->add_tab( $logiciel=40, "Logiciel");


 $camembert->trier_tab(); # Facultatif, les donnees sont triees dans l'ordre decroissant
 # $camembert->affiche_tab(); # Debug
 
 # on genere l'image au format PNG
 //header("Content-type: image/png");
    $camembert->stat2png(3,15);   
    //header("Content-type: image/png"); # declaration du Header, pour pouvoir afficher l'image
    //imagepng($img);     # creation de l'image
    //imagedestroy($img); # nettoyage des ressources
    
    ?>


Bonne programmation !
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
19 oct. 2011 à 13:38
Ben toute les page sont celle que j'ai mise en haut.
Le camembert seul avec les données récupérer de la BDD ça marche, c'est quand j’insère le design html que ca marche plus. sinon comment exécuter ce camembert en arrivant sur une page x.php et y afficher le dit camembert ?

faut-il pas changer quelques chose ici pour l'afficher sur la page que je veux ?
header("Content-type: image/png"); # declaration du Header, pour pouvoir afficher l'image

Merci.

Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
19 oct. 2011 à 13:56
Salut cod57,

J'ai pas de soucis pour le fonctionnement du camembert.
En faite le soucis c'est que je n'arrive pas a récupérer l'image qu'il génère pour la mettre sur une autre page qui est structurer en html et css.



Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
19 oct. 2011 à 15:04
re cod57 .

Ca marche ! En faite c'est bon , mais pas avec camembert, parce que y'a que la classe dessus, mais avec l'autre ça marche a condition de ne mettre aucun include dessus . Merci a toi et nemo pour votre aide, je commençais vraiment a devenir maboule.


Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
Rejoignez-nous