jeromei
Inscrit le: 30 Mai 2008 Messages: 33
|
Posté le: 17 Juin 2008 12:13 |
|
|
bonjour,
j'ai ce script (code source internet qui fonctionne pour addition de deux valeurs)
je souhaite l'adapter pour addition de 3 valeurs mais ne fonctionne pas au niveau de l'addition.
peux tu me filer un petit coup de main stp.
je te joins le fichier zip qui s'appelle camembertok.zip
j'ai rajouter des variables t3 et v3 ce qui me donne ça
[url]http://jeromei.phpnet.org/Copie%20de%20travail/camembert/demo-camembert.php?PHPSESSID=826ba3b10ec001513a2b126976506167[url]
impeccable dans le tableau mais pas à la validation!!!
avec deux valeurs (script joint fonctionne!)
fichier camembert.php
| Code: | <?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].'<br />';
} # 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 Wink
# 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, "http://jeromei.phpnet.org/Copie de travail", $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
?> |
fichier cam.php
| Code: | <?php
# 03/05/2008 Didier STRAUS.fr #
require("camembert.php");
if ( ! is_numeric($_GET["mode"]) ) { $mode = 2; } else { $mode = $_GET["mode"]; }
$cpt_txt = 0;
if ( isset($_GET["t1"]) ) {
$t1 = $_GET["t1"];
if (strlen($t1) > 13) { # si c'est trop long, on coupe !
$t1 = substr($t1, 0, 13);
}
$cpt_txt++;
}
else {
$t1= ' ';
}
if ( isset($_GET["t2"]) ) {
$t2 = $_GET["t2"];
if (strlen($t2) > 13) { # si c'est trop long, on coupe !
$t2 = substr($t2, 0, 13);
}
$cpt_txt++;
}
else {
$t2= ' ';
}
$cpt_val = 0;
if ( ! is_numeric($_GET["v1"]) ) { $v1 = 0; } else { $v1 = $_GET["v1"]; $cpt_val++; }
if ( ! is_numeric($_GET["v2"]) ) { $v2 = 0; } else { $v2 = $_GET["v2"]; $cpt_val++; }
# ##### FIN - on empeche les pirates de faire des betises ##### #
if ($mode == 2)
$mode = 2;
else
$mode = 3;
if ( ($cpt_txt > 0) && ($cpt_val == $cpt_txt) ) { # on peut generer une image
$camembert = new camembert(); # initialisation
#on rentre les donnees
if ($v1 > 0) { if (strlen($t1) < 1) $t1 = $v1; $camembert->add_tab( $v1, $t1 ); }
if ($v2 > 0) { if (strlen($t2) < 1) $t2 = $v2; $camembert->add_tab( $v2, $t2 ); }
$camembert->trier_tab(); # Facultatif, les donnees sont triees dans l'ordre decroissant
$camembert->stat2png($mode, 15);
} # FIN on peut generer l'image
else { # acces non autorise
echo '<br /><br /><h1 align="center">©2008 <a href="http://www.software-ds.com">www.Software-DS.com</a></h1>';
}
?> |
fichier demo-camembert.php
| Code: | <?php
$cpt_txt = 0;
if ( isset($_POST["t1"]) ) {
$t1 = $_POST["t1"];
if (strlen($t1) > 13) { # si c'est trop long, on coupe !
$t1 = substr($t1, 0, 13);
}
$cpt_txt++;
}
else {
$t1= ' ';
}
if ( isset($_POST["t2"]) ) {
$t2 = $_POST["t2"];
if (strlen($t2) > 13) { # si c'est trop long, on coupe !
$t2 = substr($t2, 0, 13);
}
$cpt_txt++;
}
else {
$t2= ' ';
}
$cpt_val = 0;
if ( ! is_numeric($_POST["v1"]) ) { $v1 = 0; } else { $v1 = $_POST["v1"]; $cpt_val++; }
if ( ! is_numeric($_POST["v2"]) ) { $v2 = 0; } else { $v2 = $_POST["v2"]; $cpt_val++; }
if (isset($code) && isset($_POST["app"])) {
$app = $_POST["app"];
if (strlen($app) > 4) {
$app = 'a2D';
}
}
?>
<br />
<table cellpadding="2" cellspacing="2" bgcolor="#996633" width="735">
<tr>
<td bgcolor="#FFCC99" align="center">
<h2>Générateur PHP de Camembert en 2D/3D</h2>
</td>
</tr>
<tr>
<td bgcolor="#FFFFDD" class="tM">
Ci-dessous une démo en ligne du script.
<br />
</td>
</tr>
<tr>
<td bgcolor="#FFFFC0" class="tM" align="center">
<form method ="post" action ="">
Saisir les données pour générer un Camembert :<br />
<br />
<table width="190" cellpadding="2" cellspacing="1" bgcolor="#FF9900">
<tr bgcolor="#FFCC99"><td align="center">Valeur</td><td align="center">Libelle</td></tr>
<tr bgcolor="#FFFFCC"><td align="center">
<input type="text" name="v1" id="v1" size="6" value="<?php if (isset($v1) && ($v1 != 0) ) echo $v1; ?>" /></td><td align="center">
<input type="text" name="t1" id="t1" size="12" value="<?php if (isset($t1) && ($t1 != ' ') ) echo $t1; ?>" />
</td></tr>
<tr bgcolor="#FFFFCC"><td align="center">
<input type="text" name="v2" id="v2" size="6" value="<?php if (isset($v2) && ($v2 != 0) ) echo $v2; ?>" /></td><td align="center">
<input type="text" name="t2" id="t2" size="12" value="<?php if (isset($t2) && ($t2 != ' ') ) echo $t2; ?>" />
</td></tr>
</table>
<br />
Apparence:
<input type="radio" name="app" id="a2D" value="a2D" <?php if ( (!isset($_POST['app'])) || ($_POST['app'] == "a2D" ) ) echo 'checked' ?> > 2D
<input type="radio" name="app" id="a3D" value="a3D" <?php if ( (!isset($_POST['app'])) || ($_POST['app'] == "a3D") ) echo 'checked'; ?> > 3D
<input type="image" name="envoyer" id="envoyer" src="../images/valider.gif" alt="Valider" />
</form>
<?php ### generation de l image du code barre si necessaire ###
if ( ($cpt_txt > 0) && ($cpt_val > 0) ) { # on peut generer une image
echo '<div class="tM" align="center">Image camembert :<br />';
if ($_POST['app'] == "a2D")
$mode = 2;
else
$mode = 3;
#on rentre les donnees
$url = '';
if ($v1 > 0) { if ( ($t1 == ' ') || strlen($t1)<1 ) $t1 = $v1; $url .= '&v1='.$v1.'&t1='.$t1; }
if ($v2 > 0) { if ( ($t2 == ' ') || strlen($t2)<1 ) $t2 = $v2; $url .= '&v2='.$v2.'&t2='.$t2; }
echo '<img src="cam.php?mode='.$mode.$url.'" border="1" alt="" /><br /><br />';
echo '</div>';
} #if ( ($cpt_txt > 0) && ($cpt_val > 0) )
?>
</td>
</tr>
</table>
<br /> | [/url] |
|