Inscription non effectué dans ma base de donnée

Ce topic a été résolu
0000

0000 Le 30 décembre 2016 à 16:54 (Édité le 25 janvier 2019 à 17:53)

Bonjour à tous, alors voila j'ai un probleme avec mon code ou ma base de donnée lorsque je clique pour m'inscrire aucun message d'eureur n'apparais cependant il n'y a rien qui s'affiche dans ma base de donnée.
Merci de m'aider
php my admin
<?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, avatar)VALUES(?, ?, ?, ?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid(), "default.jpeg"));
                     $header="MIME-Version: 1.0\r\n";
                     $header.='From:"SOS-Motors.com"<confirmation@sos-motors.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/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>
TheOldNoob

TheOldNoob Le 30 décembre 2016 à 21:50

Oulala, tu n'as pas envie de trouver un nom, pas envie de dire bonjour...

ça donne pas envie d'aider.
0000

0000 Le 31 décembre 2016 à 13:29

Désoler c'est vrai sa m'avait tellement énervé au vue des heures passé à chercher l’erreur en vain.
Donc Bonjours et merci de m'aider
TheOldNoob

TheOldNoob Le 31 décembre 2016 à 17:36

Quand tu envoie ton formulaire, est-ce qu'au moins tu a un message de réussite?
0000

0000 Le 1 janvier 2017 à 13:33 (Édité le 1 janvier 2017 à 13:39)

Bonne Année !
Oui, je n'ais aucune erreur de signaler. Il y a marqué comme quoi l'opération a été exécutée avec succée.
Zbuu

Zbuu Le 1 janvier 2017 à 15:29

remplace cette ligne : 

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
par : 

try {
   $bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '');
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
   die('Erreur :' . $e->getMessage());
}
Ça te permettra de voir si tu as des erreurs au niveau de tes requêtes 
TheOldNoob

TheOldNoob Le 1 janvier 2017 à 17:09

Donc effectivement avec cette astuce tu verra si il y a un problème sur tes requête. Car pour moi le problème viens de ta connexion a ta bdd
0000

0000 Le 1 janvier 2017 à 22:46 (Édité le 1 janvier 2017 à 22:48)

Effectivement je crois que tu a raison c'est ma requête qui ne s’exécute pas car j'ai se message d'erreur
 cela correspond à cette ligne
 
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid(), "default.jpeg"));
TheOldNoob

TheOldNoob Le 2 janvier 2017 à 00:04

donc vérifie bien que dans ta bdd qu'elle s'appel bien espace_membre 😀
Zbuu

Zbuu Le 2 janvier 2017 à 00:09 (Édité le 2 janvier 2017 à 02:52)

Effectivement tu as un problème, d'après mysql le champs uniqid n'existe pas. Donc soit il n'existe pas ou soit tu as fait une erreur de frappe 
0000

0000 Le 2 janvier 2017 à 14:13

Je vient de vérifier, elle s’appelle bien espace_membre. Zbuu peut tu développer stp.
Zbuu

Zbuu Le 3 janvier 2017 à 00:39

Tu essaie d'ajouter des informations dans ta table membres mais mysql te retourne l'erreur "uniqid not found" (en français = La colonne uniqid n'existe pas)

Donc va dans ta table membres et vérifie bien que la colonne uniqid existe bel est bien. 

C'est assez clair maintenant ? XD
0000

0000 Le 3 janvier 2017 à 19:19

Je vient de vérifier et la colonne uniquid n'existe pas dans la table en re regardant le tuto j'ai vue qu'elle n'y était pas je l'ai donc supprimer mais cela ne marche toujours pas (pas de message d'erreur et pas n'inscription non plus)
Zbuu

Zbuu Le 3 janvier 2017 à 21:08 (Édité le 3 janvier 2017 à 21:16)

Tu as bien modifier ta requête comme ceci ? : 
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, avatar) VALUES(?, ?, ?, ?, ?)");                     
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, "default.jpeg"));
Ah mais tu es en local ? Si oui alors tu n'a peut être pas configuré l'envoie de mail ? 

Essaye de supprimé ou commenté cette ligne (le temps de testé, voir si c'est a cause de ça)  : 

//mail($mail, "Confirmation de compte", $message, $header);
Essaie de t'inscrire et regarde dans ta base de donnée si ça fonctionne 

Oh est quelques chose quelques qui n'a rien avoir avec ton problème c'est n'est pas un peu grand un pseudo de 255 caractères ? lol 
0000

0000 Le 4 janvier 2017 à 14:29 (Édité le 4 janvier 2017 à 14:38)

Oui ma requête est comme celle que tu a écrite.
Oui je suis en local avec wamps-serveur. j'ai déjà configuré les mails et cela marche très bien sur ma page de contacte.
J'ai essayer de m'inscrire mais rien n'a faire.
Pour les 255 caractères c'est vrai que c'est un peut beaucoup je rectifierai. mdr

on me signale cette erreur

La ligne 33:
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, "default.jpeg"));
Zbuu

Zbuu Le 4 janvier 2017 à 18:47

Cette erreur veux dire que ton champ confirme est obligatoire (doit être remplis)

Donc soit tu modifies ta requête est insère quelques chose dans le champs confirme ou alors tu modifies ton champs et tu lui met une valeur par défaut via phpmyadmin
Balatharas

Balatharas Le 5 janvier 2017 à 08:05

Oui tu devrais définir le champ confirme en donnant la valeur 0 ou false lors de l'inscription
0000

0000 Le 5 janvier 2017 à 20:13

Comment il faut que je fasse pour que lors de l'inscription le champ confirme soit a 0 puis passe à 1 lorsque la validation a été effectuée, ainsi si une personnes se connecte sans avoir confirmer, elle puisse le faire. Si c'est trop compliquée de l'expliquer via le forum 'est ppas grave. Je me débrouillerai tous seul.
Zbuu

Zbuu Le 5 janvier 2017 à 23:16

Pour mettre le champ confirme a 0 à l'inscription tu peux modifier ta requête :

$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, avatar, confirme) VALUES(?, ?, ?, ?, ?, '0')");
Ou mettre la valeur '0' par défaut directement dans la base de donnée comme ça tu ne sera pas obligé de le précisé dans ta requête 

Ensuite pour mettre le champ confirme a '1' comme tu envoies un email à l'utilisateur il te suffit de faire une vérification dans ta page confirmation par exemple : 


<?php 
// Si $_GET['pseudo'] et $_GET['key'] ne sont pas vide
if (!empty($_GET['pseudo']) && !empty($_GET['key'])) {
   // Recherche du pseudo dans la base de donnée
   $q = $db->prepare('SELECT * FROM users WHERE pseudo = ?');
   $q->execute([$_GET['pseudo']]);
   $user = $q->fetch();
   // Si l'utilisateur existe et que $_GET['key'] est égale la key de l'utilisateur
   if ($user && $user['key'] === $_GET['key']) {
      // Confirmation de l'utilisateur
      $q = $db->prepare('UPDATE users SET confirme = 1 WHERE pseudo = ?');
      $q->execute([$_GET['pseudo']]);
      // Redirection vers la page profil 
      header('Location: profil.php');
      exit();
   } else {
      // L'utilisateur ou la key ne correspont pas on redirige vers l'index
      header('Location: index.php');
      exit();
   }
} else {
   // Le pseudo ou la key n'est pas renseigné 
   // On redirige l'utilisateur vers l'index
   header('Location: index.php');
   exit();
}
0000

0000 Le 6 janvier 2017 à 20:08

merci beaucoup a toi. Par contre je met quoi dans le page index.php car elle est inexistante chez moi
Zbuu

Zbuu Le 6 janvier 2017 à 20:49

Çà c'est à toi de voir, ça dépend de se que tu veux faire.
Le plus souvent sur les sites ils affichent les news/articles 
0000

0000 Le 6 janvier 2017 à 21:20 (Édité le 6 janvier 2017 à 21:41)

L a confirmation n'est pas pris en compte. Je n'est pas besoins de confirmer pour accéder à mon compte.
Si j'ai bien compris il faut que lors de la connexion il vérifie si le champ confirme de ma base est a 1 (si oui alors on le renvoie sur l'index sinon un message d’erreur lui indique de confirmer son compte).
Zbuu

Zbuu Le 7 janvier 2017 à 09:21

oui c'est ça dans ta requête de connexion tu ajoutes une clause where confirme = 1
0000

0000 Le 7 janvier 2017 à 11:58 (Édité le 7 janvier 2017 à 11:59)

Tu peut me l'écrire stp. Et me dire ou la mettre (quel ligne) dans ma page de connexion :
<?php
session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');

if(isset($_POST['formconnexion'])) {
   $mailconnect = htmlspecialchars($_POST['mailconnect']);
   $mdpconnect = sha1($_POST['mdpconnect']);
   if(!empty($mailconnect) AND !empty($mdpconnect)) {
      $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ?");
      $requser->execute(array($mailconnect, $mdpconnect));
      $userexist = $requser->rowCount();
      if($userexist == 1) {
         $userinfo = $requser->fetch();
         $_SESSION['id'] = $userinfo['id'];
         $_SESSION['pseudo'] = $userinfo['pseudo'];
         $_SESSION['mail'] = $userinfo['mail'];
         header("Location: profil.php?id=".$_SESSION['id']);
      } else {
         $erreur = "Mauvais mail ou mot de passe !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>
<html>
   <head>
      <title>Connection</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Connexion</h2>
         <br /><br />
         <form method="POST" action="">
            <input type="email" name="mailconnect" placeholder="Mail" />
            <input type="password" name="mdpconnect" placeholder="Mot de passe" />
            <br /><br />
            <input type="submit" name="formconnexion" value="Se connecter !" />
            <p>Vous n'avez pas encore de compte ? <a href="inscription.php"> inscrivez vous</a> </p>
            </form>
             <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>
   </body>
</html>
Zbuu

Zbuu Le 7 janvier 2017 à 12:31

Il te suffit d'ajouter "AND confirme = 1" dans ta requête ce qui donne : 
$requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ? AND confirme = 1");
Du coup si l'utilisateur essaie de se connecter sans avoir confirmer son compte il tombera sur le message "Mauvais mail ou mot de passe" après a toi de modifier ton code si tu veux que l'utilisateur est plutôt un message du type "Vous n'avez pas encore confirmer votre compte" au lieu du "mauvais mail ou mot de passe"