Page 1 sur 1

Pb sur code - besoin de correction

Posté : 17 janv. 2006, 13:25
par storm61
Bonjour

Je voudrais affecter une valeur de variable si des conditions sont remplies

si je fais un echo $fac1 je n'ai rien

Mes sessions fonctionne bien je n'ai pas de pb

est ce que quelqu'un peut me dire si ce code est correct en php ou alors faut il que je cherche sur une erreur en amont de ce code


mon code veut dire recupere en session ex niv1 multiplie la par 10% et enleve la valeur originale pour ne garder que les 10 % de celle ci


voila merci bien
if ( $garantie == 'niveau1' AND $option == 'renfort')
{
$fac1 = ($_SESSION['niv1']*1.10)-$_SESSION['niv1'];
}
else if ( $garantie == 'niveau1plus' AND $option == 'renfort')
{
$fac1 = ($_SESSION['niv1plus']*1.10)-$_SESSION['niv1plus'];
}
else if ( $garantie == 'niveau2' AND $option == 'renfort')
{
$fac1 = ($_SESSION['niv2']*1.10)-$_SESSION['niv2'];
}
else if ( $garantie == 'niveau3' AND $option == 'renfort')
{
$fac1 = ($_SESSION['niv3']*1.10)-$_SESSION['niv3'];
}
else{
echo '';
}
;

echo $fac1;

Posté : 17 janv. 2006, 14:00
par DarkBlue
Hello ,

Peut etre que tu te retrouce dans le dernier cas a chaques fois !

Dans le 'else' mets une valeur a $fac1 pour verifier

Posté : 17 janv. 2006, 15:57
par zeus
Je te propose 3 version de ce code et je te laisse comparer l'optimisation

Je pense avoir mis assez de commentaires ;

Ta version en ré-indenté :
if ( $garantie == 'niveau1' AND $option == 'renfort') {
	$fac1 = ($_SESSION['niv1']*1.10)-$_SESSION['niv1'];
} else if ( $garantie == 'niveau1plus' AND $option == 'renfort') {
	$fac1 = ($_SESSION['niv1plus']*1.10)-$_SESSION['niv1plus'];
} else if ( $garantie == 'niveau2' AND $option == 'renfort') {
	$fac1 = ($_SESSION['niv2']*1.10)-$_SESSION['niv2'];
} else if ( $garantie == 'niveau3' AND $option == 'renfort') {
	$fac1 = ($_SESSION['niv3']*1.10)-$_SESSION['niv3'];
} else {
	echo 'erreur'; //Permet de détecter l'erreur
}
echo $fac1;
Ensuite, j'ai remarqué que tu testait à chaque fois la valeur de $option, j'ai donc fait une factorisation et comme les différents if ne testait que $garantie, je l'ai remplacé par un switch/case
//Permet de ne tester une seule fois
if ($option == "renfort") {
	//Plus simple et optimisé que plusieurs if
	switch ($garantie) {
		//Calcul en fonction de la valeur de $garantie
		case "niveau1":
			$fac1 = ($_SESSION['niv1']*1.10)-$_SESSION['niv1'];//ASTUCE : pour calculer 10% d'une valeur, il suffit de multiplier par 0.10 ;)
			break;
		case "niveau1plus":
			$fac1 = ($_SESSION['niv1plus']*1.10)-$_SESSION['niv1plus'];
			break;
		case "niveau2":
			$fac1 = ($_SESSION['niv2']*1.10)-$_SESSION['niv2'];
			break;
		case "niveau3":
			$fac1 = ($_SESSION['niv3']*1.10)-$_SESSION['niv3'];
			break;
		//Si $garantie ne correspond à aucun autre choix
		default :
			echo 'erreur';
			break;
	}
} else {	//if ($option != "renfort") 
	echo 'erreur';
}
echo $fac1;
Finalement, je me suis rendu compte que le calcul était toujours le même et que tout dépendait de la valeur de $garantie. Comme $garantie et sa valeur associée dans la session sont différente, j'a créé un tableau de correspondance
//Création du tableau de correspondance entre les valeurs de $garantie et les variables
//>>	de session associées
$a_corres = array(	"niveau1" 		=> "niv1",
					"niveau1plus" 	=> "niv1plus",
					"niveau2"		=> "niv2",
					"niveau3"		=> "niv3")

//Permet de ne tester une seule fois
if ($option == "renfort") {
	//Si la valeur de garantie existe dans le tableau $a_corres
	// /!\ ATTENTION : array_key_exists si PHP > 4.1.0 sinon kay_exists
	//>>	http://fr.php.net/manual/fr/function.array-key-exists.php
	if (array_key_exists($garantie, $a_corres)) {
		//Récupération de l'index de la variable de session asscociée à la valeur de $garantie
		$cle = $a_corres[$garantie];
		//Calcul de la valeur
		$fac1 = ($_SESSION[$cle]*0.10); //ASTUCE : pour calculer 10% d'une valeur, il suffit de multiplier par 0.10 ;)
	} else {	//Si $garantie ne dispose pas de valeur asscociée en session
		$fac1 = "erreur";
	}
} else {	//if ($option != "renfort") 
	$fac1 = "erreur";
}

echo $fac1;
Note : si tu fait val*1.10, tu fait 110% de la valeur
pour avoir 10%, c'est val*0.1

Posté : 17 janv. 2006, 16:58
par storm61
merci pour l'optimisation et le calcul de pourcentage qui est évident mais que je n'ai pas pensé :oops: