TUTO PHP - Confirmation par mail

PrimFX Boris ('PrimFX') Le 7 juin 2015

Vous savez envoyer des mails avec PHP ? Créer un espace membre ? Un système de confirmation par mail pourrait donc vous être bien utile...

Tutos "pré-requis" :

- TUTO PHP - Envoyer des mails: https://youtube.com/watch?v=c4C0LXmSHhE

- TUTO PHP - Créer un espace membre (3 épisodes) : https://youtube.com/watch?v=s7qtAnH5YkY

  • inscription.php
  <?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');

if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 255) {
         if($mail == $mail2) {
            if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
               $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
               $reqmail->execute(array($mail));
               $mailexist = $reqmail->rowCount();
               if($mailexist == 0) {
                  if($mdp == $mdp2) {
                     $longueurKey = 15;
                     $key = "";
                     for($i=1;$i<$longueurKey;$i++) {
                        $key .= mt_rand(0,9);
                     }
                     $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, uniqid) VALUES(?, ?, ?, ?, ?)");

                     $insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid()));

                     $header="MIME-Version: 1.0\r\n";
                     $header.='From:"[VOUS]"<votremail@mail.com>'."\n";
                     $header.='Content-Type:text/html; charset="uft-8"'."\n";
                     $header.='Content-Transfer-Encoding: 8bit';
                     $message='
                     <html>
                        <body>
                           <div align="center">
                              <a href="http://127.0.0.1/Tutos%20PHP/%2314%20%28Espace%20membre%29/confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">Confirmez votre compte !</a>
                           </div>
                        </body>
                     </html>
                     ';
                     mail($mail, "Confirmation de compte", $message, $header);
                     $erreur = "Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>";
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>
<html>
   <head>
      <title>TUTO PHP</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Inscription</h2>
         <br /><br />
         <form method="POST" action="">
            <table>
               <tr>
                  <td align="right">
                     <label for="pseudo">Pseudo :</label>
                  </td>
                  <td>
                     <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail">Mail :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail2">Confirmation du mail :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp">Mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp2">Confirmation du mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                  </td>
               </tr>
               <tr>
                  <td></td>
                  <td align="center">
                     <br />
                     <input type="submit" name="forminscription" value="Je m'inscris" />
                  </td>
               </tr>
            </table>
         </form>
         <?php
         if(isset($erreur))
         {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>
   </body>
</html>
  • confirmation.php
  <?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');

if(isset($_GET['pseudo'], $_GET['key']) AND !empty($_GET['pseudo']) AND !empty($_GET['key'])) {
   $pseudo = htmlspecialchars(urldecode($_GET['pseudo']));
   $key = htmlspecialchars($_GET['key']);
   $requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND confirmkey = ?");
   $requser->execute(array($pseudo, $key));
   $userexist = $requser->rowCount();
   if($userexist == 1) {
      $user = $requser->fetch();
      if($user['confirme'] == 0) {
         $updateuser = $bdd->prepare("UPDATE membres SET confirme = 1 WHERE pseudo = ? AND confirmkey = ?");
         $updateuser->execute(array($pseudo,$key));
         echo "Votre compte a bien été confirmé !";
      } else {
         echo "Votre compte a déjà été confirmé !";
      }
   } else {
      echo "L'utilisateur n'existe pas !";
   }
}
?>

A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 23

  • effect Le 28 mai, à 15:10 | Répondre

    je comprend pas comment mettre en forme avec mon code de mon site xD

  • Yvesim Le 18 mars, à 21:55 | Répondre

    Salut, je vois la façon d'on vous avez résolu la question. ma préoccupation est de savoir comme je peut faire pour que au cas où le membre veut se connecter si dans confirme ==0 que la personne ne puisse pas se connecter, qu'il va d'abord dans son boite email pour confirme le compte, si non sans cela in ne peut pas se connecter.

  • marco6205 Le 22 février, à 00:37 | Répondre

    Merci pour ce tuto!
    Dans le mail de confirmation qu'on envoi au nouvel inscrit il y a le lien pour cette confirmation, mais lorsqu'on est en local, en test comment doit on mettre cette adresse.
    J'ai adapté l'adresse que vous avez indiqué ex :Confirmez votre compte !
    mais mon mail est considéré comme spam!

    comment faire et est ce que l'adresse est valable

  • Profil introuvable Le 10 juillet, à 15:11 (Édité le 10 juillet 2020 à 17:31) | Répondre

    salut primfx j'ai un petit problème je recoie le mail correctement mais rien n'apparait dans ma base de donné merci de bien vouloir m'aider pour plus d'aifo j'ai un problème avec confirme

  • Tatou Le 5 mai, à 08:50 | Répondre

    bonjour tres beau tuto
    manque peut etre
    else {
    $erreur = "Ce pseudo est déjà utilisé !";

  • M-Propre Le 11 juillet, à 20:25 | Répondre

    Salut Boris !
    Tout d'abord bravo pour tes tutos géniaux !
    Je débute en PHP et c'est un plaisir de suivre tes vidéos pour apprendre !

    J'essaie de résoudre le problème d'écriture dans la bdd qui ne fonctionne que si je fais comme l'a écrit Gelphe :

    [code] $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, confirme) VALUES(?, ?, ?, ?, 0\r\n)"); $insertmbr->execute(array($pseudo, $mail, $mdp, $key));
    [/code]
    Je constate que dans le code que tu as réécrit, tu as changé la valeur par uniqid()
    [code] $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, uniqid) VALUES(?, ?, ?, ?, ?)");
    $insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid()));
    [/code]Mais chez moi, en gardant la colonne "confirme" du type INT, ça ne fonctionne pas.
    Je ne comprends pas pourquoi? Vu que je suis un "bleu" et que tu n'expliques pas dans ta vidéo ce qu'est "uniqid()", j'ai même essayé en remplaçant le nom de la colonne "confirme" par "uniqid"!

    Peut-être pourrais-tu expliquer comment on se sert de "uniqid()" ?

    Merci d'avance pour ton aide.

  • siranno Le 14 mars, à 00:34 | Répondre

    @alaeben slt a toi . je voudrais savoir si tu a résolu ton problème car j'ai exactement le même en se moment . ou une personne a une solution merci d'avance :)

  • siranno Le 14 mars, à 00:34 | Répondre

    @alaeben slt a toi . je voudrais savoir si tu a résolu ton problème car j'ai exactement le même en se moment . ou une personne a une solution merci d'avance :)

  • WhiiTe Le 6 août, à 18:08 | Répondre

    @alaeben Lors de la connexion (si ton système est déjà fait) tu dois sûrement initier des variables de session, tu as donc préalablement fait un fetch pour récupérer les informations du membres donc tu as juste à faire :

    if($variableDuFetch['confirme'] == 0)
    {
    tu inities les variables de session
    }
    else
    {
    tu retournes ton erreur
    }

  • bilaldu60 Le 28 juillet, à 23:19 | Répondre

    Bonjour a tous
    tout d'abord un grand merci pour tous ces tutos.J'ai suivi ce tuto et le resultat correspond bien aux attentes que j'en avais.Je suis nul en php,enfin je debute.Pour l'instant je me contente de faire des copiés collés et d'adapter les codes a ma configuration(Je suis sur un raspberry pi B).
    J'aimerai ajouter une condition a la page connexion.J'aimerai que l'utilisateur ne puisse pas se connecter si il n'a pas confirmé son inscription.J'ai bien compris qu'il fallait ajouter une requéte.Mais je galére je ne connais ni la syntaxe a employé et ni ou la placer dans le code.
    Si il y a une ame charitable ou méme si le grand primfx lui meme pourais me répondre,alors je suis preneur.
    Bon week-end a tous.

  • alaeben Le 7 juillet, à 17:02 | Répondre

    Bonjour Boris tu es vraiment excellent en programmation stp j'ai un petit soucis quand je change l'ancien script avec celui en haut dans le fichier inscription.php la requèrte sql renvoi vide j'ai même uploadé les fichiers en ftp mais le problème persiste encore et quand j'enlève le script de confirmation les donnés se renvoient, j'ai bel est bien ajouté les deux colonnes confirmkey et confirme dans la table membres et j'ai virifié les tag php s'il y'avait des espaces par contre je reçoies l'email de confirmation

  • Gelphe Le 11 juin, à 11:00 | Répondre

    Bonjours à tousquelqu'un serai t’il répondre à mon problème
    Voila chez moi ce Tuto fonctionne parfaitement sous Wamp2.5, sous EasyPHP 12.1 il fonctionne qu' en rajoutant après confirmkey "confirme" et dans VALUES " 0\r\n ".
    Mais sous Wamp3 en 32 e t64bits malgré plusieurs tentative de réinstallation et de réécriture de la table membres, l'inscription dans la BDD ne se fait pas, le mail confirmation et bien envoyé et la réponse à la confirmation renvoie "l'utilisateur n'existe pas" ce qui est normal . En utilisant la même méthode que pour EasyPHP cela ne fonctionne pas non plus . Lorsque j' enlève confirmkey l'inscription se fait !!!.
    Merci à tous

  • bangah Le 1 mai, à 19:42 | Répondre

    merci pour tous ces tutos

  • denly Le 21 février, à 19:58 | Répondre

    Merci encore pour ces supers conseils, grâce à toi çà ma donné envie de me lancer dans la programmation en php, j'ai suivi plusieurs tutos et j'ai réussis sans pb, merci et continu à aider les internautes

  • Ranster Le 13 février, à 12:01 | Répondre

    PrimFX vraiment tu es GENIAL tu m'a beaucoup aider ! Merci pour tout tes tutos !

  • ismael_anouar Le 19 décembre, à 03:04 | Répondre

    Merci bcp

  • Gelphe Le 9 août, à 09:04 | Répondre

    Salut, toujours de très bonne vidéo !

  • PrimFX Le 8 août, à 22:09 | Répondre

    Salut @thheoo !
    Merci pour l'idée de tuto, j'essaie de faire ça pour la semaine prochaine ;-) (déjà un tuto de prévu pour demain :p)
    @+
    PrimFX

  • thheoo Le 8 août, à 19:37 | Répondre

    Hello, merci pour ces tutos ! Pourrais-tu rajouter un système "mot de passe oublié?" à l'occaz?

  • dqfjsqhgfdqhvsq Le 15 juin, à 18:52 | Répondre

    Pk personne commente sur le site :'(

  • dqfjsqhgfdqhvsq Le 15 juin, à 18:52 | Répondre

    Putain je suis seul !

  • dqfjsqhgfdqhvsq Le 15 juin, à 18:52 | Répondre

    Pk personne commente sur le site :'(

  • dqfjsqhgfdqhvsq Le 14 juin, à 18:19 | Répondre

    Pratique de ouf je vais enfin pouvoir dire adieu aux robots