Création espace membre ET mail de confirmation!

Ce topic a été résolu
Fire_Wolf

Fire_Wolf Le 13 février 2017 à 06:46 (Édité le 25 janvier 2019 à 17:53)

Bonjour,
J'ai suivis la vidéo de de PrimFX sur comment créer un espace membre et aussi confirmer inscription par email. Le problème c'est que des que je créer un compte, je reçois bien l'email mais je ne reçois pas le compte sur la base de donnée "espace_membres".

Pouvez-vous m'aider a trouver mon erreur dans le code s'il vous plait?

Ceci est mon Inscription.php
<?php
$bdd = new PDO('mysql:host=localhost;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 <= 20) 
      {
         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 = 13;
                     $key = "";
                     for($i=1;$i<$longueurKey;$i++) 
                     {
                        $key .= mt_rand(0,9);
                     }
                     $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey) VALUES(?, ?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp, $key));
                     $header="MIME-Version: 1.0\r\n";
                     $header.='From:"Fire Wolf"<expediteur@example.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://localhost/site%20web/Espace%20Membre/Confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">Confirmer votre compte !</a>
                           </div>
                        </body>
                     </html>
                     ';
                     mail($mail, "Confirmation de compte !", $message, $header);
                     $erreur = "Votre compte a bien etait crée ! <a href=\"connection.php\">Me connecter</a>";
                  }
                  else
                  {
                     $erreur = "Vos mots de passes ne correpondent pas !";
                  }
               }
               else
               {
                  $erreur = "Adresse mail déja utilisée !";
               }
            }
            else
            {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         }
         else
         {
            $erreur = "Vos adresse mail ne corresponde pas !";
         }
      }
      else
      {
         $erreur = "Votre pseudo ne doit pas dépasser 20 caracteres !";
      }
   }
   else
   {
      $erreur = "Tous les champs doivent etre complétés !";
   }
}
?>
<html>
   <head>
      <title>Register</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Inscription</h2>
         <br /><br />
         <?php $longueurKey = 15;
                     $key = "";
                     for($i=1;$i<$longueurKey;$i++) {
                        $key .= mt_rand(0,9);
                     }
                     echo $key;
                     ?>
         <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 email" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; }?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail2">Confirmer email :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Confirmer 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="Mot de Passe" id="mdp" name="mdp" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp2">Confirmer mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Confirmer votre mdp" id="mdp2" name="mdp2" />
                  </td>
               </tr>
               <tr>
                  <td></td>
                  <td align="center">
                  <br />
                     <input type="submit" name="forminscription" value="Je m'inscrit" />   
                  </td>
               </tr>
            </table>
         </form>
         <?php
         if (isset($erreur))
         {
            echo '<font color="red">' .$erreur."</font>";
         }
         ?>
      </div>
   </body>
</html>
Et voici mon 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éja été confirmé !";
         }
      } else {
         echo "L'utilisateur n'existe pas!";
      }
   }
?>
Cordialement

Fire_Wolf
Johan-Krn

Johan-Krn Le 13 février 2017 à 18:14

Bonjour très très simple 2éme ligne le nom de ta base de donnée il manque un "s"
Fire_Wolf

Fire_Wolf Le 13 février 2017 à 18:21

Merci de ta réponse, C'est ma faute j'ai mal écris mais ma base de donnée, ma bdd ne contient pas de s (espace_membre).  
xtr3m

xtr3m Le 14 février 2017 à 01:51

Personne peut aider? :/
xtr3m

xtr3m Le 14 février 2017 à 02:06 (Édité le 14 février 2017 à 02:07)

Bonjour;
Je crois avoir trouvé mais je n'y arrive pas :/
Je crois que sa se joue dans la bdd et dans se petit code.
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey) VALUES(?, ?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp, $key));
Dans ma BDD j'ai (id, pseudo, mail, motdepasse, confirmkey et confirme) tout comme dans le tutoriel. Et donc quand je m'inscrit je reçois bien l'email mais je mon compte ne s'enregistre pas dans la BDD.

parcontre, SI je suprrime le (confirme) de la BDD et bien le compte s'enregistre bien sur ma BDD mais quand je vais sur mon email et que je confirm je recois un message d'erreur provenant de la ligne 12 de mon document "confirmation.php" comme quoi "confirme" de ma BDD n'existe pas bien evidement vu que je l'ai supprimer.

Voila le code 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 !";
   }
}
?>
Pouvez vous m'aider svp?

Merci d'avance
Zbuu

Zbuu Le 14 février 2017 à 13:27

Salut

Dans ta table est ce que le champs confirme à une valeur par défaut ? Si tu n'a pas mis de défaut et que le champs ne peut pas être null alors c'est ça ton problème.

D'ailleurs je te conseilles d'activé les erreurs de pdo 😀

Fire_Wolf

Fire_Wolf Le 14 février 2017 à 14:33

Merci de vos réponses!
Non le champs confirme n'a pas de valeur, j'ai fais comme dans le tuto de PrimFx mais pourtant sa ne marche toujours pas :/
Comment on active les erreurs pdo?

Cordialement
Johan-Krn

Johan-Krn Le 14 février 2017 à 15:56

Salut j'ai fait plusieurs test et @Zbuu a raison ton champ "confirme" doit avoir une valeur par défaut sinon sa fonctionne pas
essaye met ça c'est pour activé les erreurs PDO
$bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
quand tu met "PDO::ERRMODE_WARNING" toute les erreurs qu'il trouve il est affiche
maintenant quand tu créera un compte il t'affichera l'erreur

pour plu avoir l'erreur dans ta base de donnée modifie le champ confirme dans "défaut" choisis "tel que défini :" et met "0" dans la case
Fire_Wolf

Fire_Wolf Le 14 février 2017 à 16:23

Waw les gars! Vous etes des Legendes! Merci pour tout. Tout fonctionne a la perfection!

Cordialement
Zbuu

Zbuu Le 14 février 2017 à 21:56

j'ai fais comme dans le tuto de PrimFx mais pourtant sa ne marche toujours pas :/ 
PrimFx doit sans doute utilisé une version de mysql plus ancienne que la tienne. C'est pour ça que c'est pratique d'activé les erreurs pdo comme ça tu sais directement d'ou vient le problème 😀 
Fire_Wolf

Fire_Wolf Le 17 février 2017 à 01:25

Oui ça doit être sa. Et grâce a vos réponse j'ai pus régler d'autre problème. Merci encore 😉
mimou123

mimou123 Le 28 avril 2017 à 18:26

salut tous jai un probleme le 1 n'affiche pas svp aide moi 
alla

alla Le 17 mai 2017 à 14:25

salut a tous, j'arrive pas a afficher les messages de mon forum. aidez moi svp!!!!!
ongbak

ongbak Le 1 juin 2017 à 13:36

salut comment une adresse mail comme il dit pas sécurisé stp aidez moi merci d'avance.:)
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte