Inscription : le insert into ne fait rien

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour, je suis en train de créer mon site internet mais j'ai un soucis quand je veux inscrire un membre dans la base de donnée :
voici le code :
<?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) {
                     $insertmbr = $bdd->prepare("INSERT INTO membres (pseudo, mail, motdepasse) VALUES(?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp));
                     $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 !";
   }
}
?>

<!DOCTYPE html>

<html>
   <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <link rel="icon" type="image/x-icon" href="images/logo.jpg" />
        <title> Le titre </title>
   </head>
   <body>
   <?php include("header.php"); ?> <!-- Titre avec le menu -->

      <div class="page">
         <h2>Inscrivez-vous dès maintenant</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 $erreur; } ?>
      </div>
   </body>
</html>


Il n'y pas de message d'erreur et je ne trouve pas l'erreur ...
Si quelqu’un pourrait m'aider, sa me serait vraiment utile
Merci d'avance
Nils0
A voir également:

1 réponse

Exileur Messages postés 1475 Date d'inscription   Statut Membre Dernière intervention   150
 
Salut,
Peut-être mettre un :
echo $erreur;


Aprés avoir défini les variables erreur ?

Cordialement

N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
0
Utilisateur anonyme
 
merci de votre réponse
le
 echo $erreur;

me renvoie "votre compte a bien été créer" alors qu'il n'y a rien dans la base de donnée ...
0
Utilisateur anonyme
 
j'ai modifié le code en mettant le php avant mais ça n'a rien changé
0
Exileur Messages postés 1475 Date d'inscription   Statut Membre Dernière intervention   150
 
Pourquoi faire un :

 htmlspecialchars();


Cette fonction est faite pour l’échappement des caractères html avant l'affichage. Pas avant l'envoie dans une base de donnée.

Pour sécurisé les variables utilisateurs avant l'envoie dans une base de donnée tu dois utiliser la fonction prepare de pdo.

Essaye comme ça :

$query=$bdd->prepare('INSERT INTO membres (pseudo, mail, motdepasse) VALUES(:pseudo, :mail, :motdepasse)');

$query->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$query->bindValue(':mail', $mail, PDO::PARAM_STR);
$query->bindValue(':motdepasse', $motdepasse, PDO::PARAM_STR);
$query->execute();


PDO::PARAM_STR permet d'indiquer qu'il s'agit d'une chaine de caractère.
Tu peux aussi utiliser PDO::PARAM_INT pour un nombre.

Je te conseille égallement de définir ton fichier de connexion comme ça :

$dsn = "mysql:dbname=DBNAME;host=ADRESSE_DE_LA_BASE;charset=utf8";
$user = 'USER';
$password = 'PASSWORD';

try {
    $bdd = new PDO($dsn, $user, $password);
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Échec lors de la connexion : ' . $e->getMessage();
}


Affin d'afficher les éventuelles erreurs SQL

Cordialement
0
Utilisateur anonyme
 
merci mais ça ne marche toujours pas ...
0
Exileur Messages postés 1475 Date d'inscription   Statut Membre Dernière intervention   150 > Utilisateur anonyme
 
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
0