Impossible de faire fonctionner une condition

Résolu
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -

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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    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
    1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
       

      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
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         
        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
      2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         

        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
      3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         

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

        promotion string(2) "10" 
        1
  2. flottant
     

    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
    1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
       

      Merci de la réponse

      en effet mais le soucis vient de mes boutons radios

      0
  3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     

    Malheureusement non 

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

    0
    1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
       

      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
  4. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     

    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
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      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
      1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         

        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
      2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         

        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
      3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         

        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