Confirmation d'email

Ce topic a été résolu
joris1904

joris1904 Le 10 mai 2016 à 10:43 (Édité le 25 janvier 2019 à 17:51)

Bonjour j'ai un petit problème

dans mon code je ne reçoit pas de mail de confirmation et dans la base de données je suis censé avoir au niveau de confirme 0 ou 1 et la j'ai 5 chiffres

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

   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, confirme) VALUES(?, ?, ?, ?, ?)");

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

                               $header="MIME-Version: 1.0\r\n";
                               $header.='From:"Jorisvideo.fr"<support@jorisvideo.fr>'."\n";
                               $header.='Content-Type:text/html; charset="uft-8"'."\n";
                               $header.='Content-Transfer-Encoding: 8bit';
                               $message='
<html>
   <body>
      <div align="center">
         <a href="/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>
       <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>";
       }
       ?>


Confirmation.php
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=u258251883_users', 'u258251883_users', 'JorisVideo2016');

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 !";
}
}
?>
Cyberium

Cyberium Le 10 mai 2016 à 15:23

Modifie la ligne 25 par ça:
                               $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, confirme) VALUES(?, ?, ?, ?, '0')");
On doit insérer dans confirme la valeur 0 ou 1 (non activé ou activé) or tu indiques de rentrer une valeur venant du formulaire ( le point d'interrogation) alors qu'il n'y a pas de valeur pour confirme dans le formulaire. MySQL rentre donc un chiffre au hasard (je ne m'y connais pas suffisamment).
BeKidding

BeKidding Le 10 mai 2016 à 15:43 (Édité le 10 mai 2016 à 15:44)

Tu peux utiliser ceci ->
   $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, confirme) VALUES(?, ?, ?, ?, ?)")
   $insertmbr->execute(array($pseudo, $mail, $mdp, $key,'0');
Ou alors tu peux ne pas mentionner Confirme dans ta requête , et vu qu'il s'agira d'un INT il sera SET à 0 de base dans ta SQL 😀
Voilà voilà 😄
Structure de confirme 
joris1904

joris1904 Le 10 mai 2016 à 21:41

ok merci je vous redit si sa marche demain car la je suis sur téléphone merci pour vos réponses 😀
joris1904

joris1904 Le 10 mai 2016 à 21:57

Merci sa marche niquel 😀
lecteursdb

lecteursdb Le 13 mai 2016 à 18:27

Bonjour, j'ai crée dans mon site un formulaire d'inscription avec confirmation par email...au départ tout fonctionnait correctement. Depuis quelques temps lorsque je m'inscris à nouveau (je testais pour certifier que ça fonctionnait toujours) . mon script me signale que le message a bien été envoyé mais lorsque je vérifie ma boîte de réception je ne vois aucun message. j'ai répété plusieurs fois l'inscription et changer même de destinataires mais toujours le même problème. Dans mes comptes de messagerie je reçois ces messages et un peu toutes les fois: This is the mail system at host hosting.y-note.cm.

I'm sorry to have to inform you that your message could not 
be delivered to one or more recipients. It's attached below. 

For further assistance, please send mail to postmaster. 

If you do so, please include this problem report. You can 
delete your own text from the attached returned message. 

The mail system 

<info@twitter.com>: host aspmx.l.google.com[64.233.167.27] said: 550-5.2.1 The 
user you are trying to contact is receiving mail at a rate that 550-5.2.1 
prevents additional messages from being delivered. For more 550-5.2.1 
information, please visit 550 5.2.1 
https://support.google.com/mail/answer/6592 kq8si20398102wjc.2 - gsmtp (in 
reply to RCPT TO command) 

Final-Recipient: rfc822; info@twitter.com 
Action: failed 
Status: 5.2.1 
Remote-MTA: dns; aspmx.l.google.com 
Diagnostic-Code: smtp; 550-5.2.1 The user you are trying to contact is 
receiving mail at a rate that 550-5.2.1 prevents additional messages from 
being delivered. For more 550-5.2.1 information, please visit 550 5.2.1 
https://support.google.com/mail/answer/6592 kq8si20398102wjc.2 - gsmtp 


---------- Message transféré ---------- 
From:xxxxxxxxxxxxxxxxxx 
To: info@twitter.com 
Cc: 
Date: Thu, 12 May 2016 16:28:53 +0200 (CEST) 
Subject: Re: RFI Appels Actualité a tweeté : Demain matin, 8h10 TU : #Kab ila restera-t-il au pouvoir a u delà de 2016? Exprimez-vous ! 
merci...vous avez bien été reçu 
besoin de votre aide svp...
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte