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 38308 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 4 déc. 2019 à 19:12
jordane45 Messages postés 38308 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 4 déc. 2019 à 19:12
A voir également:
- Problème insertion membres dans la bdd
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Touche insertion clavier - Guide
4 réponses
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
3 déc. 2019 à 17:21
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
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.
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
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.
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>
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
Modifié le 4 déc. 2019 à 18:26
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
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>
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
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
die('Erreur :' .$e->getMessage());
mais rien ne rentre dans ma bdd
Erreur :SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
Modifié le 4 déc. 2019 à 11:59
Modifié le 4 déc. 2019 à 11:59
Petite erreur de copier coller
dans la variable $sql .. il y a deux points en trop
à corriger par
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) ";
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
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
Parse error: syntax error, unexpected 'try' (T_TRY) in D:\wamp64\www\formulaire.php on line 36
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
>
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
4 déc. 2019 à 12:59
Il manque un ; à la ligne d'avant
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
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 !"
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
>
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
4 déc. 2019 à 14:04
Faut inverser le sens de la comparaison sur la longueur du pseudo
3 déc. 2019 à 17:23
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 ??