Pb sur code - besoin de correction

Eléphanteau du PHP | 28 Messages

17 janv. 2006, 13:25

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;

Eléphant du PHP | 440 Messages

17 janv. 2006, 14:00

Hello ,

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

Dans le 'else' mets une valeur a $fac1 pour verifier
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 janv. 2006, 15:57

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 28 Messages

17 janv. 2006, 16:58

merci pour l'optimisation et le calcul de pourcentage qui est évident mais que je n'ai pas pensé :oops: