Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: Dinars, Nobodief
Auteur Sujet: Erreur dans mon script

Dinars

Messages: 5

Bonjour, j'ai suivit le tuto de Primfx sur la récupération de mot de passe et j'ai une erreur sur la partie html avec les "if ... elseif ... else ... "

Voici la partie du script dont je parle et l'erreur signalée par Wamp est située au niveau de "elseif"
<?php if($section == 'code') { ?>
    Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail']; } ?>
    <form method="post">
       <input type="text" placeholder="Code de vérification" name="verif_code"/><br/>
       <input type="submit" value="Valider" name="verif_submit" class="btn btn-primary"/>
    </form>
    <?php } elseif ($section == 'changemdp') { ?>
     Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
    <form method="post">
       <input type="password" placeholder="Nouveau mot de passe" name="change_mdp"/><br/>
       <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><br/>
       <input type="submit" value="Valider" name="change_submit"/>
    </form> 
    <?php } else { ?>
        <form method="post">
                <input type="email" placeholder="Votre adresse mail" id="recup_mail" /><br/>
                <input type="submit" value="Valider" name="recup_submit" class="btn btn-primary"/>
            </form>
    <?php }
Publicité

Nobodief
Membre Premium

Messages: 74

Bonjour,

Il arrive parfois de faire des erreurs, souvent l'erreur la plus fréquente et l'oublie du point virgule.
Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
Mais tu as bien fait de nous montrer du code, je vais te montrer une autre possibilité de le formuler, tu peux également l'écrire ainsi :
<?php if($section == 'code'): ?>    
   Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail']; } ?>    
   <form method="post">       
      <input type="text" placeholder="Code de vérification" name="verif_code"/><br/>       
      <input type="submit" value="Valider" name="verif_submit" class="btn btn-primary"/>    
   </form>    
<?php elseif($section == 'changemdp'): ?>     
   Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>    
   <form method="post">       
      <input type="password" placeholder="Nouveau mot de passe" name="change_mdp"/><br/>       
      <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><br/>       
      <input type="submit" value="Valider" name="change_submit"/>    
   </form>     
<?php else: ?>        
   <form method="post">                
      <input type="email" placeholder="Votre adresse mail" id="recup_mail" /><br/>                
      <input type="submit" value="Valider" name="recup_submit" class="btn btn-primary"/>            
   </form>    
<?php endif; ?>

Dinars

Messages: 5

Bonjour et merci de m'aider.
Je connais cette notation sous forme ternaire mais je ne l'utilise jamais car je ne sais pas bien m'en servir et de plus ce n'est pas proposé par Sublime Text!

Zbuu

Messages: 128

C'est juste une façon plus "simple/plus propre" de faire un if else dans du html 

Le ternaire c'est : 
$name = 'Dinars';
$result = (!empty($name)) ? $name : null;
Dans cet exemple :
Si la variable $name n'est pas vide alors $result retournera la valeur donc ici "dinars".
Par contre si elle est vide alors $result vaudra null

et de plus ce n'est pas proposé par Sublime Text!
ah bon dans du code html ça n'autocomplete pas automatiquement cette façon de if/else ? Je me souviens pas d'avoir installé quelque chose de particulier pour ça Ennuyé

Sinon si tu n'as toujours pas résolu ton problème, tu as un } en trop dans ta ligne 2 Clin d'oeil 
Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail']; } ?>
Serait plutot : 
Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail']; ?>

Dinars

Messages: 5

Bonjour, merci pour la correction. Cependant, mon erreur (si c'en ait une) sur laquelle je n'arrive pas à trouver de solution c'est sur la partie affichage. Malgré avoir fait et refait le tuto, fait des recherches, je ne trouve pas comment expliquer que ma page recuperation.php affiche le formulaire pour entrer son e-mail et celui pour entrer son code de réinitialisation une fois ma page personnalisée avec css et compagnie. J'ai peut-être une erreur dans mon script php mais je ne trouve pas où!

Je poste mon code aussi au cas où

<?php require_once 'include/connexion_bdd_espace_membres.php'; // Connexion à la base de données

if (isset($_GET['section'])) {
    $section = htmlspecialchars($_GET['section']);
} else {
    $section == "";
}

if (isset($_POST['recup_submit'], $_POST['recup_mail'])) {// si le formulaire est bien rempli
    if (!empty($_POST['recup_mail'])) {// si le formulaire n'est pas vide
    
        $recup_mail = htmlspecialchars($_POST['recup_mail']); //sécurisation de l'e-mail donnée

        if (filter_var($recup_mail, FILTER_VALIDATE_EMAIL)) {// on verifie que l'adresse e-mail ($recup_mail) est valide
        
            $mailexist = $bdd2->prepare('SELECT id, pseudo  FROM membres WHERE email = ?');
            $mailexist->execute(array($recup_mail)); // on récupère id et pseudo correspondant à $recup_mail
            $mailexist_count = $mailexist->rowCount();

            if ($mailexist_count == 1) {//si l'e-mail existe
            
                $pseudo = $mailexist->fetch();
                $pseudo = $pseudo['pseudo'];
                
                $_SESSION['recup_mail'] = $recup_mail;
                //$_SESSION['recup_code'] = $recup_code;

                $recup_code = "";

                    for ($i=0; $i < 8; $i++) { 
                        $recup_code .= mt_rand(0,9); // génération d'un code à 8 chiffres
                    }

                $mail_recup_exist = $bdd2->prepare('SELECT id FROM recuperation WHERE email = ?');
                $mail_recup_exist->execute(array($recup_mail));
                $mail_recup_exist = $mail_recup_exist->rowCount();

                if ($mail_recup_exist == 1) {
                    $recup_insert = $bdd2->prepare('UPDATE recuperation SET code = ? WHERE email = ?');
                    $mail_recup_exist->execute(array($recup_code, $recup_mail));
                } else {
                    $recup_insert = $bdd2->prepare("INSERT INTO recuperation(pseudo, email, code) VALUES (?, ?, ?)"); // insertion dans la table recuperation
                    $recup_insert->execute(array($pseudo, $recup_mail, $recup_code));
                }
                
              // e-mail

                    mail($recup_mail, $sujet, $message, $header);
                    header('Location: http://localhost/test/reinitialisation.php?section=code');
            } else {
                $erreur = "Adresse e-mail non reconnue";
            }
        } else {
            $erreur = "Adresse e-mail invalide !";
        }
    } else {
        $erreur = "Veuillez entrer une adresse e-mail !";
    }
}

// traitement du formulaire demandant de recopier le code reçu par mail

if (isset($_POST['verif_submit'], $_POST['verif_code'])) {
    if (!empty($_POST['verif_code'])) {
        $verif_code = htmlspecialchars($_POST['verif_code']);
        $verif_req = $bdd2->prepare('SELECT id FROM recuperation WHERE email = ? AND code = ?');
        $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
        $verif_req = $verif_req->rowCount();

        if($verif_req == 1) {
                $up_req = $bdd2->prepare('UPDATE recuperation SET confirme = 1 WHERE email = ?');
                $up_req->execute(array($_SESSION['recup_mail']));
                header('Location:http://localhost/test/recuperation.php?section=changemdp');
            } else {
                 $erreur = 'Code invalide';
            }
    } else {
        $erreur = 'Veuillez entrer votre code de confirmation';
    }
}

// traitement du formulaire de redéfinition du mot de passe

if(isset($_POST['change_submit'])) {
    if(isset($_POST['change_mdp'],$_POST['change_mdpc'])) {
            $verif_confirme = $bdd->prepare('SELECT confirme FROM recuperation WHERE mail = ?');
            $verif_confirme->execute(array($_SESSION['recup_mail']));
            $verif_confirme = $verif_confirme->fetch();
            $verif_confirme = $verif_confirme['confirme'];
            if($verif_confirme == 1) {
                 $mdp = htmlspecialchars($_POST['change_mdp']);
                 $mdpc = htmlspecialchars($_POST['change_mdpc']);
                 if(!empty($mdp) && !empty($mdpc)) {
                        if($mdp == $mdpc) {
                             $mdp = sha1($mdp);
                             $ins_mdp = $bdd->prepare('UPDATE membres SET mdp = ? WHERE email = ?');
                            $ins_mdp->execute(array($mdp, $_SESSION['recup_mail']));
                            $del_req = $bdd->prepare('DELETE FROM recuperation WHERE mail = ?');
                            $del_req->execute(array($_SESSION['recup_mail']));
                             header('Location:http://localhost/test/connexion.php');
                        } else {
                            $erreur = 'Vos mots de passes ne correspondent pas !';
                        }
            } else {
                $erreur = 'Veuillez confirmer votre adresse e-mail avec le code qui vous a été envoyé !';
            }
    } else {
        $erreur = 'Veuillez remplir tous les champs !';
    }
} else {
    $erreur = 'Veuillez remplir tous les champs !';
}  ?>


Veuillez vous connecter ou créer un compte pour poster une réponse