Impossible de faire fonctionner une condition

Résolu/Fermé
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - Modifié le 16 août 2022 à 09:40
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 17 août 2022 à 08:57

bonjour a tous

Doucement mais surement je finalise mon bon de commande

Ayant encore une fois cherché tout un week end 

je me remets a vous , car j'ai des soucis avec une condition 

lorsque je clic sur commander 

j'ai bien dans console ces informations 

prix_depart    "27.5"
promotioncases    "20" //qui est le choix du bouton radio 
promotionpourcentageinverse    "2.20" qui sert pour ma condition en php
promotionpourcentage    "19.80"qui sert pour ma condition en php
promotion    "10" qui est un code pour une condition

j'ai aussi lorsque je fais des var_dump de ces valeurs 

var_dump($prix_depart);// me retourne string(4) "27.5"
var_dump($promotion);// me retourne string(2) "10"

var_dump($promotionpourcentageinverse);//me retourne string(4) "2.20"

var_dump($promotionpourcentage);//me retourne string(5) "19.80"

var_dump($promotioncases);//me retourne string(2) "20"

//le seul moyen que j'ai trouve pour que mes modals fonctionnent 
//$totalpourcentage=$promotionpourcentage + $promotionpourcentageinverse ;
$totalpourcentage=(float)$promotionpourcentage + (float)$promotionpourcentageinverse ;

var_dump($totalpourcentage);//float(22) 

donc tout ce passe bien 

je commence par une première condition qui fonctionne

je verifie que le bouton radio coche ne soit pas celui qui est cache
else if ($promotioncases == '10'   )
{  $error = "0-20";} 

une deuxième et troisième qui fonctionnent 

// si le bouton radio 2 qui indique que l'utilisateur choisit un code promo est egal a 20 et que le code de promotion est absent (alors message )
elseif (  $promotioncases == '20' and $promotion == '' )  {
$error = "0-12";} 

// si le bouton radio 2 qui indique que l'utilisateur choisit un code promo est egal a 20 et que le code de promotion est 0 (alors message )
elseif (  $promotioncases == '20' and $promotion == '0' )  {
$error = "0-12";} 

ensuite viennent les deux qui ne fonctionnent pas 

je veux que si l'utilisateur choisisse le promotioncases 20 et le code promo 0 ou vide et que le prix de départ ne soit pas égal a totalpourcentage il puisse y avoir une erreur 

// si le bouton radio 2 qui indique que l'utilisateur choisit un code promo est egal a 20 et que le code de promotion est absent et que le prix de depart est different de totalpourcentage (alors message )
elseif (( $promotioncases == '20' and $promotion == '0'  ) and ($prix_depart <> $totalpourcentage))  {
$error = "0-14";} 

// si le bouton radio 2 qui indique que l'utilisateur choisit un code promo est egal a 20 et que le code de promotion est 0 et que le prix de depart est different de totalpourcentage (alors message )
elseif (( $promotioncases == '20' and $promotion == '' ) and ($prix_depart <> $totalpourcentage))  {
$error = "0-14";} 

 Mais elles ne retournent aucune erreur alors qu'en principe elles devraient d'après les données recueillies 

je sais que je peux pas mélanger des floats et des string

Mais pour que mes fenêtres modals puissent apparaître je dois écrire des floats dans le calcul de totalpourcentage 

Je m'en remets a vous 

car je ne sais plus quoi essayer après des dizaines et des dizaines de tests  et de constructions de tests différents 

4 réponses

jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727
16 août 2022 à 09:49

Bonjour,

En PHP, utilise de préférence le  &&  au lieu de and

Et quand tu n'as que des "and" .. pas besoin de parenthèses pour priosier.

Et enfin..  le "différent" ( comme je te l'ai déjà dit il me semble) se teste avec le "not equal" : !=  ou !==  et pas les <>


1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 16 août 2022 à 10:03

bonjour jordane

Merci pour la réponse

j'ai déjà essayer aussi comme tu expliques mais cela ne me retourne pas l'erreur de la modal

mais dans mon code qui ne fonctionne pas pas je n'avais pas que que des AND puisque j'avais aussi un operateur d'inégalité 

voici mon dernier essai

Mais sans succès

elseif (( $promotioncases == '20' && $promotion == '0'  ) && ($prix_depart !=  $totalpourcentage))  {
$error = "0-14";} 

elseif (( $promotioncases == '20' && $promotion == '' ) && ($prix_depart !=  $totalpourcentage))  {
$error = "0-14";} 
0
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
16 août 2022 à 11:13
elseif (( $promotioncases == '20' && $promotion == '0'  ) && ($prix_depart !=  $totalpourcentage))  {
$error = "0-14";} 

elseif (( $promotioncases == '20' && $promotion == '' ) && ($prix_depart !=  $totalpourcentage))  {
$error = "0-14";} 

revient au même que

elseif ( $promotioncases == '20' && $promotion == '0' && $prix_depart !=  $totalpourcentage)  {
  $error = "0-14";
} 
elseif ( $promotioncases == '20' && $promotion == '' && $prix_depart !=  $totalpourcentage)  {
 $error = "0-14";
} 

Quoi qu'il en soit, si tu n'entres pas dans ces elseif .. c'est que tes variables ne contiennent pas c eque tu penses...

Fais donc des var_dump de chacune de ces variables AVANT le IF  et regarde ce que ça te retourne...

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025
16 août 2022 à 12:58

Merci jordane 

voila mon code avec les var_dump

totalpourcentage float(22) 
prix_depart string(4) "27.5"
promotion string(2) "10" 
promotionpourcentage string(5) "19.80" 
promotionpourcentageinverse string(4) "2.20"
promotioncases string(2) "20"

et voici le code php

//$totalpourcentage=$promotionpourcentage + $promotionpourcentageinverse ;
$totalpourcentage=(float)$promotionpourcentage + (float)$promotionpourcentageinverse ;
echo "totalpourcentage";
var_dump($totalpourcentage);
echo "prix_depart";
var_dump($prix_depart);
echo "promotion";
var_dump($promotion);
echo "promotionpourcentage";
var_dump($promotionpourcentage);
echo "promotionpourcentageinverse";
var_dump($promotionpourcentageinverse);
echo "promotioncases";
var_dump($promotioncases);

//si quanditee est egal a 0
if ($total_qte_bas == '0') 
{ $error = "0-18";} 
else if ($promotioncases == '10')
{ $error = "0-20";} 
elseif (  $promotioncases == '20' && $promotion == '')
{ $error = "0-12";} 
elseif (  $promotioncases == '20' && $promotion == '0')  
{$error = "0-12";} 
elseif ( $promotioncases == '20' && $promotion == '0' && $prix_depart !=  $totalpourcentage) 
{ $error = "0-14";} 
elseif ( $promotioncases == '20' && $promotion == '' && $prix_depart !=  $totalpourcentage)
{ $error = "0-14";} 
elseif ( $promotioncases == '20' && $promotion == '10' && $prix_depart !=  $totalpourcentage)  
{ $error = "0-14";} 

Pour rappel

//le seul moyen que j'ai trouve pour que mes modals fonctionnent ce qui me renvoie un nombre float avec lequel je me sers pour faire des opérations avec des chaines en string
//$totalpourcentage=$promotionpourcentage + $promotionpourcentageinverse ;
$totalpourcentage=(float)$promotionpourcentage + (float)$promotionpourcentageinverse ;
0
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
16 août 2022 à 16:02

Normal que tu n'entres pas dans ton elsif puique ta variable n'est pas vide ni à zéro

promotion string(2) "10" 
1

puisque 19.80 + 2.20 est égal a 22

Oh, ce n'est pas si sûr que cela : 19.80 + 2.20 vaut probablement 21.9999999. Revoyez votre cours sur les nombres flottants.

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
17 août 2022 à 01:24

Merci de la réponse

en effet mais le soucis vient de mes boutons radios

0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 16 août 2022 à 10:37

Malheureusement non 

alors que la condition n'est pas respectée il affiche le message d'erreur

0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
16 août 2022 à 10:46

pourtant lorsque je vois cette copie d'écran 

prix_depart    "22"
promotioncases    "20"
promotionpourcentageinverse    "2.20"
promotionpourcentage    "19.80"
promotion    "10"

avec une telle condition qui n'est pas réunie cela devrait fonctionner je ne devrais pas voir un message d'erreur de modal 

puisque 19.80 + 2.20 est égal a 22 et mon erreur devrait s'afficher si justement si ils ne sont pas égaux 

0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 16 août 2022 à 20:55

Oui Jordanne et pour cela que j'ai rajouter une condition avec ce if

Mais ca ne fonctionne toujours pas 

après une montagne de test je viens de me rendre compte d'une anomalie

Mes conditions semblent fonctionner tant que je ne clic pas sur un bouton radio d'un autre groupe en l'occurrence celui des livraisons

je m'explique 

ma première condition est de savoir si oui ou non il y a des articles dans le panier 

ma deuxième condition est de savoir si l'utilisateur a cocher un autre bouton radio que le premier de mon groupe promotion 

voici les deux conditions

//si quanditee est egal a 0
if ($total_qte_bas == '0') 
{ $error = "0-18";} 
//je verifie si le bouton avec la valeur 10 n'est pas coche
else if ($promotioncases == '10')
{ $error = "0-20";} 

ensuite vient seulement les tests ou j'ai des soucis 

Par accident j'ai fait un test

si je clique sur commander 

on me demande bien d'ajouter des articles 

ensuite je clic sur commander 

L'erreur survient me demandant de choisir autre chose que le bouton avec la valeur 10

Donc tout va bien ....

Par contre dans le deuxième test 

Je clique d'abord sur ma première liste de bouton radio qui concerne la livraison et j'en coche 1 ,avant toute chose

puis je clic sur commander 

j'ai bien l'erreur que je dois ajouter des articles 

Je les ajoutes 

ensuite je clic sur commander 

Et la surprise il passe la condition du bouton radio pour le code promo

Voici donc la manière dont le premier bouton radio est récupéré en javascript donc le bouton des livraison 

/on commence par recuperer des informations lorsque on clic sur un choix de livraison 
		const cases = document.querySelectorAll('input[name="choix_livraison"]');
		for (const x of cases) {//debut const x of cases
			if (x.checked) {
			    //si une case est cochee on recupere 2 variables
				let nom_choix_livraison = x.dataset.nom;
				let prix_choix_livraison = x.value;
				//on definit le prix total et la livraison 
				let prix_et_livraison = (( (MonPanier.totalpanier()))) + Number(prix_choix_livraison)  ;

et voici le bouton radio 

<div class="col-sm ">
                    <input type="radio" name="choix_livraison" class="choix_livraison articleBtnposteinvisible" checked="checked" data-lang="de" data-nom="" value="" onclick="ouvreMaJolieAlertposte(event,'  ');"> Par poste enveloppe (je ne suis pas responsable des pertes éventuelles) 1,10 euros
                 </div>

Ensuite il y a les boutons radios pour afficher ou cacher le code promo

   <label>
<!-- je cache le premier bouton -->
     <input type="radio" name="promotioncases" id="black" data-target="10" value="10" checked style="display: none;" />
   </label>
   <label>

<!-- si ce bouton est sélectionner une div apparaît avec le le input pour rentrer le code promo -->
     <input type="radio" name="promotioncases" id="red" data-target="20" value="20">j'ai un code </label>
   <div id="20" class="descendre"> j'ai sélectionne 2 <form name="form" id="forms"> Enter name:   <input type="text" id="name">
       <input type="button" value=" Click Up">
     
     <p id="prix_depart_promo"></p>
     <p id="print"></p>
   </div>


   <label>
     <input type="radio" name="promotioncases" id="vert" data-target="30" value="30" />Pas de code </label>
      
   

Et voici la manière dont je le traite 

var promotioncases  = document.querySelector('input[name=promotioncases]:checked').value;

je ne vois pas trop comment ces boutons peuvent se mélanger 

0
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727
16 août 2022 à 21:42

Ce n'est pas avec des petits bouts de code pris par-ci par-là que je vais être capable de comprendre le bordel de ton script... 

Quoi qu'il en soit il semble donc bien que ça ne soit pas un souci au niveau des conditions ( sujet initial de ta question) mais un problème de fonctionnement, de logique, de ton code.

Je t'invite donc à analyser le fonctionnement de ton code pour déterminer à quel endroit les variables restent mémorisées alors qu'elle ne le devraient pas

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025
17 août 2022 à 01:27

Merci pour la réponse jordane 

c'est vrai que des petits morceaux de code ne vont pas aider

Mais a la longue de faire des ajout mon code devient de plus en plus long

Je vais donc repartir sur une bonne sauvegarde de mon site  et voir comment mettre en place ce coupon

Je m'attendais pas a autant de de difficultés 

existe t il un moyen pour connaître si les variables restent en mémoire

0
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
17 août 2022 à 03:37

Commence par regarder la console lors de l'appel ajax (l'onglet requête permettant de voir ce qui est envoyé par l'Ajax)

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025
17 août 2022 à 08:57

voila je pense que j'ai trouve le soucis j'avais les deux codes des boutons radios qui étaient imbriques l'un dans l'autre dans le code de javascript

j'ai donc un peux changer le code et on verra 

Encore merci 

0

Discussions similaires