Mes conditions ne s'exécute pas dans le bon ordre
Résolu/Ferméflexi2202 Messages postés 3798 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 3 mai 2024 - 25 août 2022 à 13:44
- Mes conditions ne s'exécute pas dans le bon ordre
- Excel trier par ordre croissant chiffre - Guide
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum LibreOffice / OpenOffice
- Comment remettre les chaines dans l'ordre tv lg ✓ - Forum Box et Streaming vidéo
- Libreoffice calc si plusieurs conditions ✓ - Forum Excel
8 réponses
23 août 2022 à 17:36
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).
23 août 2022 à 21:29
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.
Modifié le 23 août 2022 à 21:55
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
23 août 2022 à 22:05
je pourrais remplacer le switch par des else if , mais j'aimerais comprendre pourquoi ca ne fonctionne pas bien avec ce switch
23 août 2022 à 22:22
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"
Modifié le 23 août 2022 à 22:30
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";
23 août 2022 à 22:45
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"
Modifié le 23 août 2022 à 23:02
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{
Modifié le 23 août 2022 à 23:09
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....
24 août 2022 à 09:29
Il suffisait d'ajouter un else avant le switch.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 23 août 2022 à 22:42
Ce 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
23 août 2022 à 22:50
Merci jordane pour le code
Je vais respecter cette norme ...
je viens mettre en place ton code
voici ce q'il me retourne
codestring(4) "0-18" code0-18
donc que que $error n'est pas vide ...
23 août 2022 à 23:11
C'est bien ce que tu voulais ?
Tu peux donc mettre la discussion en résolue. Merci
23 août 2022 à 23:20
oui et non
j'aurais souhaiter savoir pourquoi le code avec le switch ne fonctionne pas correctement
alors que si je remplace le morceau de code switch par des else if cela fonctionne correctement
Mais bon le principal c'est que cela fonctionne
23 août 2022 à 23:28
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.
23 août 2022 à 14:16
Bonjour,
Qu'est-ce qui vous fait dire qu'elle est tester avant les autres ?
Qu'est-ce qui vous est remonté?
23 août 2022 à 15:53
bonjour
Merci pour la reponse
Car lorsque je valide ma commande sans entrer aucune information
la première condition est de me signaler qu il faut ajouter des articles
23 août 2022 à 15:57
Vous voyez ca dans le mauvais sens. En réalité, c'est bien la dernière valeur testé. Mais vu que $error est constamment modifié, vous n'avez que le dernier résultat de $error.
Pour le tester, essayer de voir la variation de $error au fil du temps en rajoutant des var_dump($error).
23 août 2022 à 16:05
lorsque je parle d'erreur ce sont des messages d'erreur que l'utilisateur voit par l'intermédiaire des modals
23 août 2022 à 15:01
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 ...
23 août 2022 à 16:01
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
Modifié le 23 août 2022 à 16:32
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
23 août 2022 à 16:59
Ben oui.. mais le code est lu de haut en bas . Et il s'arrête donc sur la première condition valide...
A toi d'organiser tes tests dans l'ordre que tu souhaites...
Modifié le 23 août 2022 à 17:15
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
23 août 2022 à 17:37
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 .
Modifié le 23 août 2022 à 20:03
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
Modifié le 23 août 2022 à 20:17
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..
23 août 2022 à 20:04
bonjour
Merci pour la réponse
mon soucis est le swith dans les conditions
si je supprime la partie des switchs tout fonctionne correctement