Ma condition est exécutée en premier au lieu de l'être en dernier

Eléphant du PHP | 480 Messages

23 août 2022, 16:56

bonjour a tous
dans mon bon de commande
je réalise tout une série de condition et de test sur mes variables
avec ce code et donc en principe cette condition devrait être exécutée en dernier
Mais elle passe en premier

Code : Tout sélectionner

//je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";}

Code : Tout sélectionner

if ($total_qte_bas == '0') { $error = "0-18"; //si le choix du mode de livraison est le champ cache on affiche une alerte } else if ($livraison == '() euro(s)') { $error = "0-15"; //on verifie le reste des donnees postale }else if (empty($nom)) { $error = "0-1"; } else if (empty($prenom)) { $error = "0-2"; } else if (empty($adresse)) { $error = "0-3"; } else if (empty($cp)) { $error = "0-4"; } else if (empty($ville)) { $error = "0-5"; } else if (empty($pays)) { $error = "0-6"; } else if (empty($email)) { $error = "0-7"; //je teste pour savoir si cela est une vraie adresse email valable pour tous les pays } else if (!filter_var(($email), FILTER_VALIDATE_EMAIL)) { $error = "0-10"; //on teste afin de savoir si c'est bien un code postal dans le champs adresse valable pour tous les pays }else if ($b != filter_var($b, FILTER_VALIDATE_INT)) { $error = "0-11"; //test de l'adresse il doit y avoir un numero valable pour tous les pays }elseif (!preg_match('#[\d ]#', ($adresse))) { $error = "0-13"; //message erreur du choix du pays on doit absolument entrer un des pays autorises }else if ( $country != "Belgique" && $country != "Luxembourg" && $country != "France" && $country != "Pays-bas" ) { $error = "0-16"; } /** * GESTION DE LA LIVRAISON */ switch($livraison ){ //on teste pour savoir si le pays est bien BE pour la belgique //on teste pour savoir si nous sommes bien en belgique case '(MONDIAL-RELAY-BELGIQUE)3 euro(s)': // if(!filter_var($c, FILTER_VALIDATE_INT)){ if($cb_PAYS != "BE"){ $error = "0-8"; } // if($cb_PAYS != "BE" || $cb_PAYS != "FR" ){ // $error = "0-14"; //} if($pays !== "Belgique" and $cb_PAYS == "BE"){ $error = "0-17"; } if($pays === "Belgique" and $cb_PAYS != "BE"){ $error = "0-19"; } break; //on teste pour savoir si le pays est bien FR pour la france //on teste pour savoir si nous sommes bien en france case '(mondial relay-FRANCE)4 euro(s)': if($cb_PAYS != "FR"){ $error = "0-8"; } //if($pays !== "France" || $cb_PAYS != "FR"){ // $error = "0-14"; //} if($pays !== "France" and $cb_PAYS == "FR"){ $error = "0-17"; } if($pays === "France" and $cb_PAYS != "FR"){ $error = "0-19"; } break; //on teste pour savoir si le pays est bien LU pour le luxembourg //on teste pour savoir si nous sommes bien au luxembourg case '(mondial relay-LUXEMBOURG)3 euro(s)': if($cb_PAYS != "LU"){ $error = "0-8"; } // if($pays !== "Luxembourg" || $cb_PAYS != "LU"){ // $error = "0-17"; //} if($pays !== "Luxembourg" and $cb_PAYS == "LU"){ $error = "0-17"; } if($pays === "Luxembourg" and $cb_PAYS != "LU"){ $error = "0-19"; } break; //on teste pour savoir si le pays est bien NL pour les pays-bas //on teste pour savoir si nous sommes bien aux pays pas case '(MONDIAL-RELAY-PAYS-BAS)5 euro(s)': if($cb_PAYS != "NL"){ $error = "0-8"; } // if($pays !== "Pays-bas" || $cb_PAYS != "NL"){ // $error = "0-17"; //} if($pays !== "Pays-bas" and $cb_PAYS == "NL"){ $error = "0-17"; } if($pays === "Pays-bas" and $cb_PAYS != "NL"){ $error = "0-19"; } break; //******************************** //on teste les envois postaux****** //********************************** //si on choisit frais de livraison pays le pays choisi doit etre pays bas case '(POSTE-ENVELLOPPE-PAYS-BAS)2 euro(s)': if( $pays != "Pays-bas") { $error = "0-17"; } break; //si on choisit frais de livraison pays le pays choisi doit etre belgique et les 3 point doivent etre remplit case '(POSTE-COLIS-BELGIQUE_point)5.50 euro(s)': if($pays != "Belgique") { $error = "0-17"; } if( !$adressepoint || !$cppoint || !$villepoint) { $error = "0-9"; } break; //si on choisit frais de livraison pays le pays choisi doit etre belgique case '(POSTE-ENVELLOPPE-belgique)1 euro(s)': case '(POSTE-COLIS-BELGIQUE)6.50 euro(s)': if($pays != "Belgique") { $error = "0-17"; } break; //si on choisit frais de livraison pays le pays choisi doit etre luxembourg case '(POSTE-ENVELLOPPE-LUXEMBOURG)1.50 euro(s)': if($pays != "Luxembourg") { $error = "0-17"; } break; case '(POSTE-ENVELLOPPE-FRANCE)4 euro(s)': if($pays != "France" || $cb_PAYS != "FR") { $error = "0-17"; } break; //default: //aucune erreur detectée //$error = "Aucune erreur detectée "; //tu pourras retirer ce $error = quand tout marchera bien } //******************************** //fin teste les envois postaux****** //********************************** // AUTRE ERREUR //message alertes si autre probleme if ($promotioncases =="20" && ($nouveau_prix_promo_int != $prix_total_int ) ) { $error = "0-12";} //je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";} // Dernier code d'erreur si c'est pas bon pour la commande else if (!$commande) { $error = "0-21"; } //une fois tous les tests terminés.. // tu peux faire le echo de ton erreur si il y en a une... ou faire le reste de ton code if(!empty($error)){ echo $error; //sinon on insert en bdd et ton envoi de mail }else{
par contre si je modifie le code de cette façon cette condition n'est plus exécutée en premier
Mais juste avant les conditions avec les cases
Mais cela ne m'intéresse pas qu'elle soit exécutée a cet endroit
je désire qu'elle le soit en dernier

Code : Tout sélectionner

//debut des messages d'alertes //si quanditee est egal a 0 if ($total_qte_bas == '0') { $error = "0-18"; //si le choix du mode de livraison est le champ cache on affiche une alerte } else if ($livraison == '() euro(s)') { $error = "0-15"; //on verifie le reste des donnees postale }else if (empty($nom)) { $error = "0-1"; } else if (empty($prenom)) { $error = "0-2"; } else if (empty($adresse)) { $error = "0-3"; } else if (empty($cp)) { $error = "0-4"; } else if (empty($ville)) { $error = "0-5"; } else if (empty($pays)) { $error = "0-6"; } else if (empty($email)) { $error = "0-7"; //je teste pour savoir si cela est une vraie adresse email valable pour tous les pays } else if (!filter_var(($email), FILTER_VALIDATE_EMAIL)) { $error = "0-10"; //on teste afin de savoir si c'est bien un code postal dans le champs adresse valable pour tous les pays }else if ($b != filter_var($b, FILTER_VALIDATE_INT)) { $error = "0-11"; //test de l'adresse il doit y avoir un numero valable pour tous les pays }elseif (!preg_match('#[\d ]#', ($adresse))) { $error = "0-13"; //message erreur du choix du pays on doit absolument entrer un des pays autorises }else if ( $country != "Belgique" && $country != "Luxembourg" && $country != "France" && $country != "Pays-bas" ) { $error = "0-16"; } //je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";} /** * GESTION DE LA LIVRAISON */ switch($livraison ){ //on teste pour savoir si le pays est bien BE pour la belgique //on teste pour savoir si nous sommes bien en belgique case '(MONDIAL-RELAY-BELGIQUE)3 euro(s)': // if(!filter_var($c, FILTER_VALIDATE_INT)){ if($cb_PAYS != "BE"){ $error = "0-8"; } // if($cb_PAYS != "BE" || $cb_PAYS != "FR" ){ // $error = "0-14"; //} if($pays !== "Belgique" and $cb_PAYS == "BE"){ $error = "0-17"; } if($pays === "Belgique" and $cb_PAYS != "BE"){ $error = "0-19"; } break; //on teste pour savoir si le pays est bien FR pour la france //on teste pour savoir si nous sommes bien en france case '(mondial relay-FRANCE)4 euro(s)': if($cb_PAYS != "FR"){ $error = "0-8"; } //if($pays !== "France" || $cb_PAYS != "FR"){ // $error = "0-14"; //} if($pays !== "France" and $cb_PAYS == "FR"){ $error = "0-17"; } if($pays === "France" and $cb_PAYS != "FR"){ $error = "0-19"; } break; //on teste pour savoir si le pays est bien LU pour le luxembourg //on teste pour savoir si nous sommes bien au luxembourg case '(mondial relay-LUXEMBOURG)3 euro(s)': if($cb_PAYS != "LU"){ $error = "0-8"; } // if($pays !== "Luxembourg" || $cb_PAYS != "LU"){ // $error = "0-17"; //} if($pays !== "Luxembourg" and $cb_PAYS == "LU"){ $error = "0-17"; } if($pays === "Luxembourg" and $cb_PAYS != "LU"){ $error = "0-19"; } break; //on teste pour savoir si le pays est bien NL pour les pays-bas //on teste pour savoir si nous sommes bien aux pays pas case '(MONDIAL-RELAY-PAYS-BAS)5 euro(s)': if($cb_PAYS != "NL"){ $error = "0-8"; } // if($pays !== "Pays-bas" || $cb_PAYS != "NL"){ // $error = "0-17"; //} if($pays !== "Pays-bas" and $cb_PAYS == "NL"){ $error = "0-17"; } if($pays === "Pays-bas" and $cb_PAYS != "NL"){ $error = "0-19"; } break; //******************************** //on teste les envois postaux****** //********************************** //si on choisit frais de livraison pays le pays choisi doit etre pays bas case '(POSTE-ENVELLOPPE-PAYS-BAS)2 euro(s)': if( $pays != "Pays-bas") { $error = "0-17"; } break; //si on choisit frais de livraison pays le pays choisi doit etre belgique et les 3 point doivent etre remplit case '(POSTE-COLIS-BELGIQUE_point)5.50 euro(s)': if($pays != "Belgique") { $error = "0-17"; } if( !$adressepoint || !$cppoint || !$villepoint) { $error = "0-9"; } break; //si on choisit frais de livraison pays le pays choisi doit etre belgique case '(POSTE-ENVELLOPPE-belgique)1 euro(s)': case '(POSTE-COLIS-BELGIQUE)6.50 euro(s)': if($pays != "Belgique") { $error = "0-17"; } break; //si on choisit frais de livraison pays le pays choisi doit etre luxembourg case '(POSTE-ENVELLOPPE-LUXEMBOURG)1.50 euro(s)': if($pays != "Luxembourg") { $error = "0-17"; } break; case '(POSTE-ENVELLOPPE-FRANCE)4 euro(s)': if($pays != "France" || $cb_PAYS != "FR") { $error = "0-17"; } break; //default: //aucune erreur detectée //$error = "Aucune erreur detectée "; //tu pourras retirer ce $error = quand tout marchera bien } //******************************** //fin teste les envois postaux****** //********************************** // AUTRE ERREUR //message alertes si autre probleme if ($promotioncases =="20" && ($nouveau_prix_promo_int != $prix_total_int ) ) { $error = "0-12";} // Dernier code d'erreur si c'est pas bon pour la commande else if (!$commande) { $error = "0-21"; } //une fois tous les tests terminés.. // tu peux faire le echo de ton erreur si il y en a une... ou faire le reste de ton code if(!empty($error)){ echo $error; //sinon on insert en bdd et ton envoi de mail }else{

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9478 Messages

23 août 2022, 17:30

Elle ne passe pas en premier, c'est probablement que les autres conditions ne sont pas remplies, ou alors, autre possibilité, c'est que c'est la dernière à s'exécuter et donc si tu regardes la valeur de $error vu que tu écrases à chaque fois la valeur de cette variable, tu ne voies que la dernière valeur.


Hors sujet : Une bonne pratique est de n'utiliser que la notation elseif en un seul mot et pas else if en deux mots, même si dans ton cas ça ne devrait pas changer grand chose, dans d'autres ça peut être source d'erreur
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 480 Messages

23 août 2022, 20:05

Merci pour la réponse
je viens de faire un test si j'enlève la partie du switch cela fonctionne correctement
concernant les erros c'est gérer par des appels de modal avec l'erreur approprie pour chaque cas

Mammouth du PHP | 879 Messages

12 sept. 2022, 04:25

Afin de déboguer, je te suggère aussi d'envoyer des messages à l'écran qui te permettent de suivre l'évolution du traitement.
Ce peut être aussi banal que
echo 'Voici la ligne 23<br />';
Tu verras à ôter ces lignes après vérification manuelle de diverses conditions, bien sûr!
Soyez artisans de paix

Eléphant du PHP | 480 Messages

01 oct. 2022, 13:52

Merci de l'astuce c'est vrai vrai que cela aide