Problème insertion membres dans la bdd
xooit21
Messages postés
99
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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
voici ma base de donnée:

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:
- Problème insertion membres dans la bdd
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
4 réponses
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
histoire de voir ce que renvoi ton formulaire...
Reviens nous avec ton code modifié si ton souci persiste.
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.
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.
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>
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
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>
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
die('Erreur :' .$e->getMessage());
mais rien ne rentre dans ma bdd
Erreur :SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
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
Parse error: syntax error, unexpected 'try' (T_TRY) in D:\wamp64\www\formulaire.php on line 36
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 ??