Mes conditions ne s'exécute pas dans le bon ordre
Résoluflexi2202 Messages postés 3822 Date d'inscription Statut Membre Dernière intervention -
bonjour a tous
encore un nouveau soucis pour lequel google n' a pas su m'aider
dans mon bon de commande je vérifie un tas de chose
Notamment en dernier lieu un bouton radio afin d'obliger l'utilisateur a faire un choix
Mais malheureusement cette dernière condition passe la première
Je souhaiterais qu'elle garde sa place de dernière vérification
Voici le code php
//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"; } /** * 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 //je verifie si le total du bon de promo est pareil au panier 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{
et c'est cette condition qui refuse de rester dans les dernières a être testée
//je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";}
- Mes conditions ne s'exécute pas dans le bon ordre
- Excel trier par ordre croissant chiffre - Guide
- Ajoutez à la liste de contacts ana le goff, inscrite le 27 novembre 2015, dans la catégorie i. puis triez les contacts en les classant : par ordre alphabétique de leur nom de famille (critère principal), puis par date du plus récent au plus ancien (critère secondaire). quel mot apparaît à la verticale dans la colonne "catégorie" entre les lignes 200 et 209 (en-tête compris) ? ✓ - Forum Word
- Ordre meilleur ami snap - Forum Snapchat
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Ordre suggestion messenger - Forum Facebook Messenger
8 réponses
bonjour,
Ne faudrait-il pas écrire une ou plusieurs fonction(s) qui se trouverai dans un dossier et les appeler dans votre fichier (page.php).
bonjour,
Pour moi, ce qui est bizarre, c'est que:
- tu n'as ajouté aucun echo() dans le code, qui te permettrait de comprendre ce que fait ton code
- tu nous expliques que tu as un résultat inattendu, sans nous donner le contenu des variables concernées.
Au minimum, au lieu d'écrire "c'est bizarre", tu pourrais expliquer pourquoi tu trouves cela bizarre, et quel résultat tu aurais attendu.
bonjour yg_be
j'ouvre mon bon de commande et je clic sur passer la commande
au niveau des variables repérée je n'ai que
$promotioncases =="10" qui est récupérée puisque c'est un bouton caché
pour toute les autres elles sont a 0 ou null
voici mon code modifie avec des var_dump
//debut des messages d'alertes //si quanditee est egal a 0 if ($total_qte_bas == '0') { $error = "0-18"; echo "quanditee"; var_dump($error); echo "quanditee"; //si le choix du mode de livraison est le champ cache on affiche une alerte } else if ($livraison == '() euro(s)') { $error = "0-15"; echo "livraison"; var_dump($error); echo "livraison"; //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"; echo "country"; var_dump($error); echo "country"; } /** * 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 echo "erreur"; var_dump($error); echo "erreur"; //je verifie si le bouton radio coche n'est pas 10 if ($promotioncases =="10" ) { $error = "0-20";} else 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{
mais ce que cela me retourne n'est pas très clair dans les 4 var_dump j'ai un complet et un deuxième sans les echos
quand aux 2 autres pas présent
quanditeestring(4) "0-18" quanditeeerreurstring(4) "0-18" erreur0-20
je pourrais remplacer le switch par des else if , mais j'aimerais comprendre pourquoi ca ne fonctionne pas bien avec ce switch
Pour moi, ton code se comporte exactement comme il est écrit.
En quoi se comportement est-il bizarre?
Si j'était toi, je prendrais un peu de temps pour faire des echo() qui te donnent un affichage plus clair: j'ai l'impression que tu ne comprends pas ce qui est affiché. tu écris, d'ailleurs "ce que cela me retourne n'est pas très clair"
Merci pour ton aide
si si je comprends ce qu'il devrait faire
prenons la toute première condition
//si quanditee est egal a 0 if ($total_qte_bas == '0') { $error = "0-18";
lorsque je clic sur valider la commande
c'est bien par cette condition qu'il doit commencer ???
pourquoi alors il commence par celle ci
//je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";}
et pour cause de me répéter si j'enlève la partie du switch cela fonctionne correctement
c 'est bien la condition suivante qui est la première a fonctionner
//si quanditee est egal a 0 if ($total_qte_bas == '0') { $error = "0-18";
Au risque de me répéter moi aussi ... il ne COMMENCE pas par cette condition ... il FINI par cette condition... et ECRASE la valeur précédemment renseignée dans la variable $error ...
Tu as beaucoup de mal à comprendre visiblement ... et c'est pourtant le B.A.BA de la programmation ( quelque soit le langage (procédural )
Faudrait vraiment que tu suive des formations avant de continuer tes dev ( tes bidouilles devrais-je dire.. )
Il te manque les bases du langages et ça ne peut que te ralentir fortement dans l'écriture de tes code.
Quoi qu'il en soit, regarde ma réponse précédente. Cela devrait "patcher" ton "bug"
en supposant qu'il finisse par cette condition
J'ai parfaitement compris qu' a chaque nouvelle condition la précédente est encrassée et remplacée par la suivante
Pourquoi lorsque je remplace le morceau de switch par des else if
Tout fonctionne correctement ?
Avec ce code aucun soucis
//debut des messages d'alertes //si quanditee est egal a 0 if ($total_qte_bas == '0') { $error = "0-18"; //echo "quanditee"; //var_dump($error); //echo "quanditee"; //si le choix du mode de livraison est le champ cache on affiche une alerte } else if ($livraison == '() euro(s)') { $error = "0-15"; // echo "livraison"; //var_dump($error); //echo "livraison"; //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"; // echo "country"; //var_dump($error); //echo "country"; } /** * GESTION DE LA LIVRAISON */ else if ($livraison == '(MONDIAL-RELAY-BELGIQUE)3 euro(s)') { // if(!filter_var($c, FILTER_VALIDATE_INT)){ if($cb_PAYS != "BE"){ $error = "0-8"; } if($pays !== "Belgique" and $cb_PAYS == "BE"){ $error = "0-17"; } if($pays === "Belgique" and $cb_PAYS != "BE"){ $error = "0-19"; } } elseif ($livraison== '(mondial relay-FRANCE)4 euro(s)') { if($cb_PAYS != "FR"){ $error = "0-8"; } if($pays !== "France" and $cb_PAYS == "FR"){ $error = "0-17"; } if($pays === "France" and $cb_PAYS != "FR"){ $error = "0-19"; } } elseif ($livraison == '(mondial relay-LUXEMBOURG)3 euro(s)') { if($cb_PAYS != "LU"){ $error = "0-8"; } if($pays !== "Luxembourg" and $cb_PAYS == "LU"){ $error = "0-17"; } if($pays === "Luxembourg" and $cb_PAYS != "LU"){ $error = "0-19"; } } elseif ($livraison == '(MONDIAL-RELAY-PAYS-BAS)5 euro(s)') { if($cb_PAYS != "NL"){ $error = "0-8"; } if($pays !== "Pays-bas" and $cb_PAYS == "NL"){ $error = "0-17"; } if($pays === "Pays-bas" and $cb_PAYS != "NL"){ $error = "0-19"; } } elseif ($livraison == '(POSTE-ENVELLOPPE-PAYS-BAS)2 euro(s)') { if( $pays != "Pays-bas") { $error = "0-17"; } } elseif ($livraison == '(POSTE-COLIS-BELGIQUE_point)5.50 euro(s)') { if($pays != "Belgique") { $error = "0-17"; } if( !$adressepoint || !$cppoint || !$villepoint) { $error = "0-9"; } } elseif ($livraison == '(POSTE-ENVELLOPPE-belgique)1 euro(s)') { if($pays != "Belgique") { $error = "0-17"; } } elseif ($livraison =='(POSTE-ENVELLOPPE-LUXEMBOURG)1.50 euro(s)') { if($pays != "Luxembourg") { $error = "0-17"; } } elseif ($livraison == '(POSTE-ENVELLOPPE-FRANCE)2 euro(s)') { if($pays != "France" || $cb_PAYS != "FR") { $error = "0-17"; } } elseif ($livraison == "(POSTE-COLIS-BELGIQUE)6.50 euro(s)") { if($pays != "Belgique" || $cb_PAYS != "FR") { $error = "0-17"; } } //je verifie si le bouton radio coche n'est pas 10 et qu'il n'y a pas déjà une autre erreur // provenant des tests qui se trouvent au dessus dans le code... elseif ($promotioncases =="10" ) ) { $error = "0-20"; } else 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{
Par ce que dans un IF .. ELSEIF .. ELSE ... tu n'entres que dans UN seul cas ...
Exemple :
$var = 10; if($var == 0 ){ echo "var:" . $var; } elseif ($var==5){ echo "var:" . $var; }elseif($var==10){ //Il va entrer ici echo "var:" . $var; }elseif($var < 20 ){ //C'est aussi vrai.. mais il se sera arrété à la condition d'avant echo "var:" . $var; }
Alors que là .. toi tu as plusieurs blocks (comme je te l'ai déjà expliqué) Et donc.. tu es dans ce cas de figure
$var = 10; if($var == 0 ){ echo "var:" . $var; } elseif ($var==5){ echo "var:" . $var; }elseif($var==10){ //Il va entrer ici echo "var:" . $var; } // AUTRE IF/ESLE.. if($var == 50 ){ echo "var:" . $var; }elseif($var < 20 ){ //C'est aussi vrai.. et comme c'est dans autre IF . cette condition sera également traitée echo "var:" . $var; }
J'espère que cette fois tu as compris....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionCe n'est pourtant pas bien compliqué
Au lieu de
// AUTRE ERREUR //message alertes si autre probleme echo "code"; var_dump($error); echo "code"; //je verifie si le bouton radio coche n'est pas 10 if ($promotioncases =="10" ) { $error = "0-20";}
Tu fais
// AUTRE ERREUR //message alertes si autre probleme echo "code"; var_dump($error); echo "code"; //je verifie si le bouton radio coche n'est pas 10 et qu'il n'y a pas déjà une autre erreur // provenant des tests qui se trouvent au dessus dans le code... if ($promotioncases =="10" && empty($error) ) { $error = "0-20"; }
PS: tu noteras que mes IF .. je les écris en plaçant les accolades d'une certaines façons .. ( c'est ce que préconise la norme.. et ça rend le code plus lisible ( surtout pour des vrais développeurs). )
Merci donc de bien vouloir respecter cette "norme" lorsque tu nous présentes ton code
Mais... mais... c'est ce que je n'arrête pas de t'expliquer !
Ton code est découpé en TROIS blocs conditionnels .
- Un premier ensemble de IF / ELSEIF ..
- Puis un SWITCH ( c'est un peu comme un if/elseif )
- Puis un autre bloc IF / ELSEIF
Donc .. CHAQUE BLOC est susceptible d'écraser ta variable $error ..
Bon... là je ne sais plus quoi te dire ni comment te l'expliquer ! Relis mes explications
Essais de comprendre les exemples que je t'ai donné. ... par ce que .. franchement.. là je ne peux rien de plus pour t'aider à comprendre le fonctionnement "basique" de la programmation.
Bonjour,
Qu'est-ce qui vous fait dire qu'elle est tester avant les autres ?
Qu'est-ce qui vous est remonté?
Bonjour,
Comme pour chacune de tes questions .... pourrais tu nous faire un var_dump de tes variable afin de nous indiquer ce qu'elles valent et donc, par conséquent.. si c'est normal que ça entre dans ton elseif ...
Bonjour jordane
je viens de faire des var_dump mais tout est vide sauf le bouton radio cache qui est bien a 10
ce qui est logique puisque je valide ma commande sans entrer aucune information
Et normalement dans ce cas de figure ca serait la condition et l'erreur qu'il faut entrer des articles qui devrait fonctionner et non pas celle que je dois cocher un bouton radio autre que le 10
je viens de remarquer que si je déplace cette condition et modifie le code de cette façon
la première condition est bien accomplie la première
/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"; }
mais cela ne m'intéresse pas que le contrôle du bouton radio soit a cet endroit
oui jordane on est d'accord mais lorsque je test le premier code
Ma condition
//je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";}
passe non pas dans les dernières conditions mais en premier
Par contre contre si je la place au dessus du switch elle garde sa place a être exécutée avant les conditions du switch
mais je désire qu'elle soie exécutée après le switch
C'est quoi cette histoire de premier ... ??
Les conditions sont testées dans l'ordre.
Vu que tu utilises une seule variable $error .. elle prend la dernière valeur que tu lui a affecté .. même si tu as eu d'autres erreurs avant ...
En gros..
$error = 1;
//je fais d'autres truc . et maintenant je dis
$error = 2;
//encore autre chose ..
$error = "trucmuche" ;
echo $error; // affichera forcément le dernier renseigné ... à savoir.. trcumuche
Si tu veux pouvoir gérer plusieurs erreurs en même temps, il te faut passer non pas par une "string" .. mais par un array ..
Ou alors, pour gérer chaque erreur dans l'ordre .. penser à mettre des return/exit dans ton code dans tes if .
Jordane je pense que l'on s'est mal compris
Dans mon code la première condition est
//si quanditee est egal a 0 if ($total_qte_bas == '0') { $error = "0-18";
voici mon code qui fonctionne de façon correcte c'est a dire que l'ordre des conditions est respectée
Car j'ai enlevé la partie du switch
//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";} else 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{
par contre si je laisse le code avec le switch comme ci dessous
la condition
//je verifie si le bouton radio coche n'est pas 10 else if ($promotioncases =="10" ) { $error = "0-20";}
est exécutée en premier
/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"; } /** * 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 //je verifie si le bouton radio coche n'est pas 10 if ($promotioncases =="10" ) { $error = "0-20";} else 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{
donc ce qui dérange dans mon code c'est ce switch
Si si.. on s'est très bien compris ... enfin.. moi.. j'ai très bien compris...
Donc :
Ton code, pour tes conditions, est découpé en trois morceaux
- Un premier bloc de IF/ELSEIF ( qui rempli la variable $error )
- Un switch ( qui, selon les conditions pourrais lui aussi remplir $error )
- Et enfin, un troisième bloc IF qui rempli la variable $error
Alors que sans le switch .. tu n'as plus qu'un seul bloc IF/ELSEIF ... il ne rempli donc qu'une seule fois la variable $error
Donc.. soit tu appliques ce que je t'ai déjà répondu .. soit, tu ajoutes à ton deux bloc IF une condition supplémentaire permettant de vérifier si la variable $error est vide ou non..
bonjour
Merci pour la réponse
mon soucis est le swith dans les conditions
si je supprime la partie des switchs tout fonctionne correctement