Problème insertion membres dans la bdd

Fermé
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023 - 3 déc. 2019 à 16:29
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 4 déc. 2019 à 19:12
Bonjour,
J'ai crée ma page inscription.php, mais le problème est que rien ne s’inscrit dans ma base de donnée j'ai bien regarder mon code mais je ne trouve pas ou est ma faute pouvez-vous m'aider svp.

Cordialement

code php

<?php
try{
$bdd = new PDO('mysql:host:127.0.0.1:dbname=espace_membre,charset=utf-8','root','');
}
catch(Exeption $e)
{
    die('Erreur :' .$e->getMessage());
}
    if (isset($_POST['envoyer']))
    {
        if (!empty($_POST['pseudo']))
        {
            if (!empty($_POST['pass']))
             {
               $pseudo = htmlspecialchars($_POST['pseudo']);
                $pass = sha1($_POST['pass']);

                $pseudolength = strlen($pseudo);
                /* on compte le nombre de caractére */
                   if($pseudolength <= 255) 
                   {        /* on insert les donnée dans la base de donée*/
                       /*
                       $insertmbr = $bdd -> prepare('INSERT INTO membres(pseudo, mot_de_passe) VALUES (?,?)');
                            $insertmbr -> execute(array($pseudo, $pass));
                            $erreur2 = "Votre compte a bien été crée.";
                       */
                       $insermbr = $bdd->prepare("INSERT INTO membres(pseudo, mot_de_passe) VALUES (?,?)");
									$insermbr->execute(array($pseudo, $pass));	
									
									
                            
                   if(isset($_SESSION))
                       {
                           $erreur2 = "Votre compte a bien été crée.";
                       }
                       else
                       {
                        $erreur = "Votre compte na pas été crée";
                            
                       }
;                   } 
                   else {
                       $erreur = 'Votre pseudo ne doit pas dépasser 255 carractére!';
                   }
            }
            else 
            {
                $erreur = 'le champ "mot de passe" est vide!';
            }
        }
        else
        {
            $erreur = 'Le champ "pseudo" est vide!';
        }
    }

?>
<!DOCTYPE html>
    <html>
        <head>
            <title>Formulaire</title>
            <meta charset="UTF8" />
        </head>
        <body>
            <div style="text-align:center;" >
                <h2>Inscription</h2>
                <form method="POST" action="" style="text-align: center;">
                    <table style= "margin:auto;">
                        <tr style="text-align: center;">
                            <td>
                                <label>pseudo:</label>
                            </td>
                            <td>
                                <input type="text" placeholder="pseudo" name="pseudo" style="text-align: center;">
                            </td> 
                        </tr>
                            <tr>
                                <td>
                                    <label>Votre mot de passe</label>
                                </td>
                                <td style="text-align: center;"> 
                                    <input type="password" placeholder="Votre mote de passe" name="pass" style="text-align: center;">
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <td>
                                <input type="submit" value="Je m'incris" name="envoyer" />
                                </td>
                                <tr>
                                <td>
                                    <td>
                                    <?php
                                        if (isset($erreur)) 
                                        {
                                            echo '<font color= "red">'.$erreur."</font>";
                                            
                                        }
                                        else if(isset($erreur2))
                                                {
                                            echo '<font color= "green">'.$erreur2."</font>";
                                            
                                        }
                                            
                                ?>
                                </td>
                                </td>
                            </tr>
                            </td>
                            </tr>
                           
                    </table>
                </form>
            </div>

        </body>
    </html>


voici ma base de donnée:



Configuration: Windows / Chrome 78.0.3904.108
A voir également:

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 déc. 2019 à 17:21
Bonjour,

Avant toutes choses, commence par gérer les éventuelles erreurs PDO.
Pour cela, lit et applique le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
=> activer les erreurs dans la connexion PDO
=> Placer CHAQUE requête dans un bloc try/catch

Ensuite, mets en pratiques les consignes données ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
=> Activer les erreurs PHP
=> Récupérer proprement les variables AVANT de les utiliser

Sache également qu'on n'utilise plus le SHA1 pour gérer les mots de passe ( pas assez sécurisé ) mais qu'à la place on utilise : https://www.php.net/manual/fr/function.password-hash.php

Tu peux également, au début de ton script, placer un
print_r($_POST);

histoire de voir ce que renvoi ton formulaire...

Reviens nous avec ton code modifié si ton souci persiste.

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 déc. 2019 à 17:23
Ah.. et je vois que tu cherches à utiliser les variables de SESSION....
mais je ne vois nul part dans ton code (ça devrait se trouver au tout début de celui-ci...) le démarrage des sessions...
Je ne vois pas non plus à quel endroit tu stockes une valeur dedans...
Un oublie dans ton copier/coller ??
0
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
Modifié le 4 déc. 2019 à 11:28
bonjour
bon j'ai modifié le code comme tu ma demandé, mise à part le hachage du mot de passe qui n'est pas pour le moment mon plus grand problème(je le ferai plus tard).
Quand j'actualise le code ça me dis ceci.

Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined Les datas : PDO Object ( )

ps J'ai suivi le tuto de Prim FX mais il ne doit plus être à jour.

<?php
try{
$bdd = new PDO('mysql:host:127.0.0.1:dbname=espace_membre,charset=utf-8','root',''); 
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

}
catch(Exeption $e)
{
    die('Erreur :' .$e->getMessage());
}
    if (isset($_POST['envoyer']))
    {
        if (!empty($_POST['pseudo']))
        {
            if (!empty($_POST['pass']))
             {
               $pseudo = htmlspecialchars($_POST['pseudo']);
                $pass = sha1($_POST['pass']);
                

                $pseudolength = strlen($pseudo);
                /* on compte le nombre de caractére */
                   if($pseudolength <= 255) 
                   {        /* on insert les donnée dans la base de donée*/
                       
                      try
                   {
                       $insermbr = $bdd->prepare("INSERT INTO membres(pseudo, mot_de_passe) VALUES (:pseudo,:mot_de_passe)");
         $insermbr->execute(array(
                                        'pseudo' => $pseudo,
                                        'pass' =>  $pass )); 
                   }catch(Exception $e){
                    // en cas d'erreur :
                     echo " Erreur ! ".$e->getMessage();
                     echo " Les datas : " ;
                    print_r($bdd);
                  }    
         
                            
                   
;                   } 
                   else {
                       $erreur = 'Votre pseudo ne doit pas dépasser 255 carractére!';
                   }
            }
            else 
            {
                $erreur = 'le champ "mot de passe" est vide!';
            }
        }
        else
        {
            $erreur = 'Le champ "pseudo" est vide!';
        }
    }

?>
<!DOCTYPE html>
    <html>
        <head>
            <title>Formulaire</title>
            <meta charset="UTF8" />
        </head>
        <body>
            <div style="text-align:center;" >
                <h2>Inscription</h2>
                <form method="POST" action="" style="text-align: center;">
                    <table style= "margin:auto;">
                        <tr style="text-align: center;">
                            <td>
                                <label>pseudo:</label>
                            </td>
                            <td>
                                <input type="text" placeholder="pseudo" name="pseudo" style="text-align: center;">
                            </td> 
                        </tr>
                            <tr>
                                <td>
                                    <label>Votre mot de passe</label>
                                </td>
                                <td style="text-align: center;"> 
                                    <input type="password" placeholder="Votre mote de passe" name="pass" style="text-align: center;">
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <td>
                                <input type="submit" value="Je m'incris" name="envoyer" />
                                </td>
                                <tr>
                                <td>
                                    <td>
                                    <?php
                                        if (isset($erreur)) 
                                        {
                                            echo '<font color= "red">'.$erreur."</font>";
                                            
                                        }
                                        else if(isset($erreur2))
                                                {
                                            echo '<font color= "green">'.$erreur2."</font>";
                                            
                                        }
                                            
                                ?>
                                </td>
                                </td>
                            </tr>
                            </td>
                            </tr>
                           
                    </table>
                </form>
            </div>

        </body>
    </html>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 4 déc. 2019 à 18:26
Oulalalala....
Des erreurs de syntaxes html
Des erreurs dans le nom de tes variables
Toujours des soucis avec l'indentation

Bref.. ça devrait donner un truc du genre
<?php
//démarrage des sessions
session_start();


//connexion à la bdd (qu'il serait préférable de placer dans un fichier à part et d'en faire un require )
try{
  $bdd = new PDO('mysql:host:127.0.0.1:dbname=espace_membre,charset=utf-8','root',''); 
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}catch(Exeption $e){
    die('Erreur :' .$e->getMessage());
}
 
 
//récupération PROPRE des variables AVANT de les utiliser (en ternaire)
$pseudo =  isset($_POST['pseudo']) ? $_POST['pseudo'] : '' ;// htmlspecialchars ne doit JAMAIS s'utiliser pour des requêtes SQL... uniquement pour de l'affichage sur une page web
$pass =  !empty($_POST['pass']) ? sha1($_POST['pass']) : '' ;

$a_err = array(); // tableau contenant les éventuelles erreurs
if (isset($_POST['envoyer'])){
  
  //gestion des champs non remplis et de la taille du pseudo:
  $a_err[] = empty($pseudo) ? 'Le champ "pseudo" est vide !' : "";
  $a_err[] = empty($pass) ? 'le champ "mot de passe" est vide !' : "";
  $a_err[] = strlen($pseudo) <= 255 ? "Votre pseudo ne doit pas dépasser 255 carractéres !" : NULL;
  //traitement :$pseudolength 
  
 //Traitement si pas d'erreur :
  if(!empty($pseudo) && !empty($pass) && strlen($pseudo) > 255) {
    /* on insert les donnée dans la base de donée*/
    //on prepare la requête et les données
    $sql = "INSERT INTO membres(pseudo, mot_de_passe) VALUES (:pseudo,::pass) "; //toi tu avais mis : :mot_de_passe .. normal que ça ne marche pas !
    $datas = array(':pseudo' => $pseudo,':pass' =>  $pass )
    try {
      $insermbr = $bdd->prepare($sql);
      $insermbr->execute($datas); 
      $_SESSION['user'] = array('pseudo'=>$pseudo );
      $success = "Votre compte a bien été créé ";
      // mais à la place de juste afficher un message de succes... tu pourrais faire une redirection vers une autre page du site
      // par exemple :
      //header('location : zonemembre.php');
      //exit(); //toujours mettre un exit après une redirection !
    }catch(Exception $e){
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        echo " Les datas : " ;
        print_r($datas);
    }    
  } 
} // fin du if $_POST['envoyer']

?>
<!DOCTYPE html>
<html>
  <head>
      <title>Formulaire</title>
      <meta charset="UTF8" />
  </head>
  <body>
    <div style="text-align:center;" >
      <h2>Inscription</h2>
      <form method="POST" action="" style="text-align: center;">
        <table style= "margin:auto;">
          <tr style="text-align: center;">
            <td>
              <label>pseudo:</label>
            </td>
            <td>
              <input type="text" placeholder="pseudo" name="pseudo" style="text-align: center;">
            </td> 
          </tr>
          <tr>
            <td>
                <label>Votre mot de passe</label>
            </td>
            <td style="text-align: center;"> 
                <input type="password" placeholder="Votre mote de passe" name="pass" style="text-align: center;">
            </td>
          </tr>
          <tr>
            <td>
              <input type="submit" value="Je m'incris" name="envoyer" />
            </td>
          </tr>
          <tr>
            <td>
              <?php
                if (!empty($a_err))  {
                  foreach($a_err as $erreur){
                    echo '<font color= "red">'.$erreur."</font>";
                  }
                } else if(!empty($success)){
                    echo '<font color= "green">'.$success."</font>";
                }
            ?>
            </td>
            
          </tr>
        </table>
      </form>
    </div>

  </body>
</html>


0
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
Modifié le 4 déc. 2019 à 11:53
bon j'ai l'erreur; c'est le
die('Erreur :' .$e->getMessage());

mais rien ne rentre dans ma bdd

Erreur :SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 4 déc. 2019 à 11:59
Petite erreur de copier coller
dans la variable $sql .. il y a deux points en trop
 VALUES (:pseudo,::pass) 

à corriger par
  $sql = "INSERT INTO membres(pseudo, mot_de_passe) VALUES (:pseudo,:pass) ";
0
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
4 déc. 2019 à 12:49
ok, merci c'et différent de la vidéo tuto que j'ai regardé mais bon par contre sa me mais une erreur:

Parse error: syntax error, unexpected 'try' (T_TRY) in D:\wamp64\www\formulaire.php on line 36
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
4 déc. 2019 à 12:59
Il manque un ; à la ligne d'avant
0
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
4 déc. 2019 à 13:32
bon je n'est plus d'erreur sur la page, mais toujours rien dans la et quand je click sur je m'inscrit sa me donne l'erreur: "Votre pseudo ne doit pas dépasser 255 carractéres !"
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
4 déc. 2019 à 14:04
Faut inverser le sens de la comparaison sur la longueur du pseudo
0