Partage
  • Partager sur Facebook
  • Partager sur Twitter

if imbriqués

    7 novembre 2019 à 10:24:09

    Bonjour,

    J'ai un souci de logique avec un if imbriqué ds un autre

    elseif(!empty($post['email'])) //check given email address 
                        {                    
                            if (!filter_var($post['email'], FILTER_VALIDATE_EMAIL))
                            {
                                echo($post['email']."  is not a valid email address");
                                require 'vue/register.php';
                            }
    
                        }
    else 
    					{
    
    						echo "formulaire envoyé";
    						//instancier la classe qui envoie les données des utilisateurs vers la bdd
    						$user= new AdminUsers();
    						$checkUser = $user->addUserToDb($post);
    
    						echo $checkUser;
    
    }
     

    A la fin de mon if interne je ne reprend pas le else final du if principal

    mon script complet est le suivant 

    public function addUser()
    	{		        
    		$post = $_POST;
    		/******** Contact form check ****************/
    
    		$contactMessage="";
    		echo "$contactMessage " .$contactMessage;
    
    
    		if (empty($post['nom']))
    		{
    						$_GLOBALS["contactMessage"] = "rien ds le nom"; // Store error message to be abvailable into register.php			
    
    						require 'vue/register.php';
    
    					}
    					elseif(empty($post['prenom']))
    					{
    
    						$_GLOBALS["contactMessage"] = "rien ds le prenom";
    						require 'vue/register.php';
    						
    					}
    					elseif(empty($post['email']))
    					{
    
    						$_GLOBALS["contactMessage"] = "rien ds le email";
    						require 'vue/register.php';
    
    					}
    					elseif(!empty($post['email'])) //check given email address 
    					{					
    						if (!filter_var($post['email'], FILTER_VALIDATE_EMAIL))
    						{
    							echo($post['email']."  is not a valid email address");
    							require 'vue/register.php';
    						}
    						
    					}
    					elseif(empty($post['login']))
    					{
    
    						$_GLOBALS["contactMessage"] = "rien ds le login";
    						require 'vue/register.php';
    					}
    					elseif(empty($post['password']))
    					{
    
    						$_GLOBALS["contactMessage"] = "rien ds le password";
    						require 'vue/register.php';
    					}
    					elseif(empty($post['password2']))
    					{
    
    						$_GLOBALS["contactMessage"] = "rien ds le password2";
    						require 'vue/register.php';
    					}
    					elseif(($post['password2']) !== ($post['password'])  )
    					{
    
    						$_GLOBALS["contactMessage"] = "les champs des mots de passe doivent être identique";
    						require 'vue/register.php';
    					}
    					else 
    					{
    
    						echo "formulaire envoyé";
    						//instancier la classe qui envoie les données des utilisateurs vers la bdd
    						$user= new AdminUsers();
    						$checkUser = $user->addUserToDb($post);
    
    						echo $checkUser;
    
    					}
    
    				}
    




    • Partager sur Facebook
    • Partager sur Twitter
      7 novembre 2019 à 16:18:43

      Maintenant la question c'est pourquoi dans la logique ça devrait faire ça ?
      • Partager sur Facebook
      • Partager sur Twitter
        8 novembre 2019 à 8:56:31

        Salut

        "Si l'expression vaut TRUE, PHP exécutera l'instruction et si elle vaut FALSE, l'instruction sera ignorée."

        si elle est ignorée le programme reprend le cheminement de la boucle principale jusqu'au else final ?



        • Partager sur Facebook
        • Partager sur Twitter
          8 novembre 2019 à 13:38:42

          Au fait non car il faut vraiment voir les accolades comme des blocks de code et donc si tu es dans un if car la condition de ce dernier est vrai alors tu n'ira jamais dans le else quoi qu'il arrive. On va prendre un exemple simple pour illustrer :

          $age = 19;
          $action = 'vote';
          
          if ($action === 'vote') {
              if ($age > 19) {
                  echo "Vous pouvez votez";
              }
          } else {
              echo "Action inconnue";
          }

          Si je lance ce code je n'aurai aucun des echo qui seront lancé car une fois que l'on rentre dans le if de l'action, on ne peut plus aller dans le else. Le if sur l'age n'est pas lié au if sur l'action.

          Je sais pas si j'ai été clair car pour moi cela semble logique et naturel.

          Pour en revenir à ton code, je dirais qu'il a plusieurs soucis et tous ses elseif déjà c'est bizarre. Voici comment je ferrais personnellement :

          <?php
          
          class Test
          {
              public function addUser()
              {
                  // pas besoin du $post = $_POST
                  // on va prendre tous les champs que l'on a besoin
                  // et avec l'operateur ?? on pourra
                  // donner une valeur par défaut
                  $nom = $_POST['nom'] ?? null;
                  $prenom = $_POST['prenom'] ?? null;
                  $email = $_POST['email'] ?? null;
                  $login = $_POST['login'] ?? null;
                  $password = $_POST['password'] ?? null;
                  $passwordConfirm = $_POST['password2'] ?? null;
          
                  // Pour gérer les erreurs on les stocks dans un tableau
                  $errors = [];
          
                  $requireFields = compact('nom', 'prenom', 'email', 'login', 'password', 'passwordConfirm');
                  if (!$this->checkAllRequiredFields($requireFields)) {
                      $errors[] = 'Certains champs obligatoire ne sont pas rempli';
                  }
          
                  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                      $errors[] = "L'email n'est pas dans un format valide (eg: compte@email.com)";
                  }
          
                  if ($password !== $passwordConfirm) {
                      $errors[] = 'Les mots de passe sont différent';
                  }
          
                  // Etc. pour toutes les erreurs
          
                  if (empty($errors)) {
                      // Validation OK
                  } else {
                      // validation Pas OK
                  }
              }
          
              /**
               * @param array $fields
               * @return bool
               */
              private function checkAllRequiredFields(array $fields): bool
              {
                  foreach ($fields as $field) {
                      if (empty($field)) {
                          return false;
                      }
                  }
          
                  return true;
              }
          }
          

          Pas tester mais c'est pour l'idée global.

          • Partager sur Facebook
          • Partager sur Twitter
            8 novembre 2019 à 16:35:45

            C vrai rien que visuellement  ton code fait pro comparé au mien

            ---------------

            concernant le if interne;

            c'est comme si c'etait une branche parallele vis a vis du if externe ?

            en fait j'ai pris mes desirs pour des réalités 

            sans reflechir plus ( ce qui me fait penser que je me fourvoie en allant ds le dev sans avoir la logique naturelle)

            si a la place de mon if interne j'avais

            						$_GLOBALS["contactMessage"] = "mauvais format d'email";
            						require 'vue/register.php';


            je sortirais du if externe sans passer par else

            -----------

            j'utilisais $_GLOBALS car j'ai besoin de son contenu pour l'afficher dans la page 

            contenant le formulaire 

            idealement ce que j'aurais voulu c'est memoriser la valeur correct entrée ds un champs 

            pour la restituer tout en fournissant le message d'erreur pour la saisie incorrect du champ suivant 

                       <div class="form-group floating-label-form-group controls">
                          <label>Prénom</label>
                          <input type="text" class="form-control" placeholder="Prénom" name="prenom" id="prenom" required data-validation-required-message="Entrez votre prénom.">
                          <p class="help-block text-danger"></p>
                        </div>
                      </div>
                  
                  <div class="control-group">
                        <div class="form-group floating-label-form-group controls">
                          <label>Nom</label>
                          <input type="text" class="form-control" placeholder="<?= 'nom incorrect'?>" name="nom"  id="nom" required data-validation-required-message="Entrez votre nom.">
                          <p class="help-block text-danger"></p>
                        </div>
                      </div>



            -
            Edité par damirov 8 novembre 2019 à 16:51:15

            • Partager sur Facebook
            • Partager sur Twitter
              8 novembre 2019 à 17:54:06

              damirov a écrit:

              sans reflechir plus ( ce qui me fait penser que je me fourvoie en allant ds le dev sans avoir la logique naturelle)

              Si ça peut te rassurer, il n'y a rien de naturel à programmer, faut du temps de pratique pour que ça devienne naturel.

              C'est un peu comme apprendre à conduire, au début on doit réfléchir à chaque action de base, et après ça devient un réflexe, et on peut passer les vitesses tout en parlant avec un passager par exemple.

              Sauf que programmer, ça demande beaucoup plus de temps d'apprentissage.

              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

              if imbriqués

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown