Bonjour tous le monde,

Voilà, j'ai suivi le TUTO de PrimFx pour la confirmation par mail sauf que j'ai un problème...
Disons que mon mail s'envoie et mon compte de s'enregistre pas dans la BDD..

Alors j'ai fais un truc, j'ai essayer de virer la confirmation par mail si sa venez de se problème et oui c'est à cause de la confirmation par mail, car quand je m'inscris avec le codage sans la confirmation par mail, mon compte s'enregistre donc je ne trouve pas une solution au problème:

Code de confirmation par mail qui ne fonctionne pas:

<?php 
require "include/header.php";
require "include/Connexion_PDO.php"; 
?>

<?php
if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['login']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['login']) 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 membre 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 membre(pseudo, mail, motdepasse, confirmkey, confirm, uniqid) VALUES(?, ?, ?, ?, ?, ?)");

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

                     $header="MIME-Version: 1.0\r\n";
                     $header.='From:"CodageCSS"<support@primfx.com>'."\n";
                     $header.='Content-Type:text/html; charset="uft-8"'."\n";
                     $header.='Content-Transfer-Encoding: 8bit';
                     $message='
                     <html>
                        <body>
                        <br>
                        <br>
                        <center><img src="http://site/images/logo.png"></center>
                           <div style="background: white; width: 500px; height: 0 auto; border-color: black; border-style: solid; padding-left: 10px;">
                           <br>
                           <br>
                              <center><a href="http://site/confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">Confirmez votre compte !</a></center>
                              <br>
                              <br>
                           </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 !";
   }
}
?>

<title>Inscription</title>

<!--____Contenues de la page____-->
<center>
<div id="inscription">
         <h2><font color="black">Inscription</h2></font>
         <form method="POST" action="">
            <table>
               <tr>
                  <td align="right">
                     <label for="pseudo"><font color="black">Pseudo :</font></label>
                  </td>
                  <td>
                     <input type="text" placeholder="Votre pseudo" id="login" name="login" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail"><font color="black">Mail :</font></label>
                  </td>
                  <td>
                     <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" style="border-style: double; border-color: black;"/>
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail2"><font color="black">Confirmation du mail :</font></label>
                  </td>
                  <td>
                     <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp"><font color="black">Mot de passe :</font></label>
                  </td>
                  <td>
                     <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp2"><font color="black">Confirmation du mot de passe :</font></label>
                  </td>
                  <td>
                     <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td></td>
                  <td align="center">
                     <br />
                     <input type="submit" name="forminscription" value="Je m'inscris" />
                  </td>
               </tr>
            </table>
         </form>
         </div>
             <center><font color="red">Votre compte demandera une confirmation par email!</font></center>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>

Maintenance celui qui fonctionne:


<?php 
require "include/header.php";
require "include/Connexion_PDO.php"; 
?>
<?php
if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['login']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['login']) 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 membre 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 membre(login, mail, motdepasse, confirmkey) VALUES(?, ?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp, $key));
                     $erreur = "<center>Votre compte a bien été créé ! </center><a href=\"index.php\">";
                  } 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 !";
   }
}
?>

<title>Inscription</title>

<!--____Contenues de la page____-->
<center>
<div id="inscription">
         <h2><font color="black">Inscription</h2></font>
         <form method="POST" action="">
            <table>
               <tr>
                  <td align="right">
                     <label for="pseudo"><font color="black">Pseudo :</font></label>
                  </td>
                  <td>
                     <input type="text" placeholder="Votre pseudo" id="login" name="login" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail"><font color="black">Mail :</font></label>
                  </td>
                  <td>
                     <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" style="border-style: double; border-color: black;"/>
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail2"><font color="black">Confirmation du mail :</font></label>
                  </td>
                  <td>
                     <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp"><font color="black">Mot de passe :</font></label>
                  </td>
                  <td>
                     <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp2"><font color="black">Confirmation du mot de passe :</font></label>
                  </td>
                  <td>
                     <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" style="border-style: double; border-color: black;" />
                  </td>
               </tr>
               <tr>
                  <td></td>
                  <td align="center">
                     <br />
                     <input type="submit" name="forminscription" value="Je m'inscris" />
                  </td>
               </tr>
            </table>
         </form>
         </div>
             <center><font color="red">Votre compte demandera une confirmation par email!</font></center>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>

Je sais d'où sa peut venir mais je ne sais pas si je peux le résoudre moi même car je débute dans le codage PHP, je pense que ça vien de ça:

$insertmbr = $bdd->prepare("INSERT INTO membre(pseudo, mail, motdepasse, confirmkey, confirm, uniqid) VALUES(?, ?, ?, ?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid()));

En Espèrent avoir une réponse, merci.

4 réponses


Bonjour,
Le nombre d'argument demandés est diiférent de celui reçu.
Tu as 6 ? et tu n'nvoie que 5 données dans ton tableau.

Oui ça je sais mais faut le supprimé mais c'est pas ça qui causse le problème, de base on enleve le confirm, je l'ai déjà enlever dans mon dossier php, mais je sens que sa viens du uniqid mais je sais pas comment régler ça

Bonjour.
Les deux premiers codes que tu montres, sont quasiment identiques.
Logiquement, il n'y a que lors de l'inscription que tu es censé présenter un formulaire à l'utilisateur pour qu'il renseigne les informations pour la création de son compte et non lors de la confirmation.
Pour faire simple :

  • Dans le premier (inscription) : Formulaire, traitement de celui-ci, génération de la clé, insertion en base de données et envoi de l'email.
  • Puis dans le second (confirmation) : Vérification en base de données de l'existence d'un enregistrement correspondant aux données transmises dans l'url et modification en base de données dans l'enregistrement.

Tu devrais regarder sur le site, il y a deux tutoriels vidéos qui peuvent t'aider à créer un espace membre : Tutoriel Vidéo PHP » Gestion d'un espace membre et Tutoriel Vidéo PHP » Gestion d'un espace membre (refactorisation).
Tu peux visionner les deux et t'inspirer de celui avec lequel tu seras le plus à l'aise par exemple.
J'aurais bien voulu te détailler un peu plus ce qui ne va pas avec tes codes pour que tu les corriges, mais il y aurait trop de corrections à mentionner, autant du coté PHP que HTML, donc autant que tu partes sur de bonnes bases.

Il ne suffit pas de recopier ce que tu vois dans les tutoriels, mais il te faut également les comprendre.

Merci de tes conseils, mais le truc, c'est que le code qui ne fonctionne pas c'est le code d'origine mais j'ai supprimer le problème le problème c'est:

                     $header="MIME-Version: 1.0\r\n";
                     $header.='From:"CodageCSS"<support@primfx.com>'."\n";
                     $header.='Content-Type:text/html; charset="uft-8"'."\n";
                     $header.='Content-Transfer-Encoding: 8bit';
                     $message='
                     <html>
                        <body>
                        <br>
                        <br>
                        <center><img src="http://site/images/logo.png"></center>
                           <div style="background: white; width: 500px; height: 0 auto; border-color: black; border-style: solid; padding-left: 10px;">
                           <br>
                           <br>
                              <center><a href="http://site/confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">Confirmez votre compte !</a></center>
                              <br>
                              <br>
                           </div>
                        </body>
                     </html>
                     ';  

Lorsque j'enleve cette partie la du code qui ne fonctionne pas, le code fonctionne mais lorsque j'ajoute la confirmation de mail bah mes compte ne s'enregistre pas mais le mail s'envoie.

En espèrent que tu vas comprendre ce que je veux dire ?