Problème intégration dans la base de données
Résolu
Lucryio
Messages postés
206
Date d'inscription
Statut
Membre
Dernière intervention
-
ryko1820 Messages postés 1677 Date d'inscription Statut Membre Dernière intervention -
ryko1820 Messages postés 1677 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je fait à nouveau appel à vous car, ce code :
Me pose problème.
La page, génère bien la chaîne de caractère, elle s'affiche bien sur la page comme voulu.
Il m'affiche quand même cette erreur :
Warning: Illegal string offset 'MDP' in C:\wamp\www\FC-LUCRYIO\index2.php on line 367
ce qui correspond à cette ligne :
Dans ma base de données il m'enregistre SEULEMENT le premier caractère de la chaîne générée.
Si vous pouviez m'aider, se serais très gentil de votre part.
Merci à vous.
Je fait à nouveau appel à vous car, ce code :
function generer_mot_de_passe($nb_caractere) { $mot_de_passe = ""; $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $longeur_chaine = strlen($chaine); for($i = 1; $i <= $nb_caractere; $i++) { $place_aleatoire = mt_rand(0,($longeur_chaine-1)); $mot_de_passe .= $chaine[$place_aleatoire]; } $HOTE = 'localhost'; //NOM DE L'HÔTE SQL (fourni par ton hébergeur) $DB = 'fc_lucryio'; //NOM DE TA BASE DE DONNEES (que tu dois crée ou pas selon ton hébergeur) $USERNAME = 'root'; //NOM D' UTILISATEUR FOURNI PAR TON HEBERGEUR $PWD = ''; //MOT DE PASSE SQL FOURNI PAR TON HEBERGEUR //********************************// // Il faut que tu modifie les // // ci dessus // //********************************// try { $bdd = new PDO('mysql:host='.$HOTE.';dbname='.$DB.'',$USERNAME,$PWD); } catch (Exception $e){ die ('Erreur: ' . $e->getMessage()); } // NOUS VOILA CONNECTER A LA BASE DE DONNEE (NORMALEMENT) /* Il faudra créer une table dans votre base de donnée, elle s'appelera MDPgeneres il y aure dedans les champs : ID , de type INT avec une limite de caracteres de 11 MDP de type char avec une limite de 255 */ $bdd->exec('INSERT INTO mdpgeneres VALUES("", "'.$mot_de_passe['MDP'].'")'); return $mot_de_passe; } echo 'Bravo, vous pouvez passer à l\'étape suivante en donnant ce code <mark>'.generer_mot_de_passe(12).'</mark> à Messi44 par MP sur SDF.'; } else { echo "Vous n'avez pas encore atteint la note minimum de 18/20."; } ?>
Me pose problème.
La page, génère bien la chaîne de caractère, elle s'affiche bien sur la page comme voulu.
Il m'affiche quand même cette erreur :
Warning: Illegal string offset 'MDP' in C:\wamp\www\FC-LUCRYIO\index2.php on line 367
ce qui correspond à cette ligne :
VALUES("", "'.$mot_de_passe['MDP'].'")');
Dans ma base de données il m'enregistre SEULEMENT le premier caractère de la chaîne générée.
Si vous pouviez m'aider, se serais très gentil de votre part.
Merci à vous.
A voir également:
- Problème intégration dans la base de données
- Fuite données maif - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
- Tnt base de données vide - Forum TNT / Satellite / Réception
- La base de données de sécurité du serveur n'a pas de compte d'ordinateur pour la relation - Forum Windows 10
5 réponses
Hello,
as-tu essayé de faire un var_dump($mot_de_passe) ?
A priori il dit qu'il n'existe pas de clef MDP dans ton tableau $mot_de_passe ...
as-tu essayé de faire un var_dump($mot_de_passe) ?
A priori il dit qu'il n'existe pas de clef MDP dans ton tableau $mot_de_passe ...
Tu peux aussi rajouter un die(); juste après
Avant ton "$bdd->exec " :
Ce n'est pas pour corriger ton code, c'est pour t'aider à comprendre ton erreur (déboguer), tu verras que dans ton tableau $mot_de_passe il n'y a pas de clef 'MDP' ... C'est ce que te dis le message d'erreur ... A toi ensuite d'en tirer les conséquences.
Une fois trouvée l'erreur tu pourras effacer le var_dump et le die ....
You may stop me but you can't stop us all ;-)
Avant ton "$bdd->exec " :
var_dump($mot_de_passe); die(); $bdd->exec('INSERT INTO mdpgeneres VALUES("", "'.$mot_de_passe['MDP'].'")'); return $mot_de_passe; }
Ce n'est pas pour corriger ton code, c'est pour t'aider à comprendre ton erreur (déboguer), tu verras que dans ton tableau $mot_de_passe il n'y a pas de clef 'MDP' ... C'est ce que te dis le message d'erreur ... A toi ensuite d'en tirer les conséquences.
Une fois trouvée l'erreur tu pourras effacer le var_dump et le die ....
You may stop me but you can't stop us all ;-)
Je suis pas à l'aise avec les base de données c'est pour ça que je demande de l'aide et à vrai dire tous ce qui touche sur les base, je comprend pas trop.
mais pourtant ma variable $mot_de_passe éxiste et ma colonne "MDP" éxiste aussi. donc je comprend pas que ça fonctionne pas en faite ^^
"MDP" c'est une colonne de ma base et $mot_de_passe est ma variable qui contien le mot de passe (code) généré.
Donc je comprend pas sachant qu'en plus, il trouve bien MDP dans ma base puisqu'il enregistre le 1er caractère du code généré uniquement.
Moi ce que j'aimerais c'est qu'il enregistre tous le codes et non seulement le 1er caractère.
"MDP" c'est une colonne de ma base et $mot_de_passe est ma variable qui contien le mot de passe (code) généré.
Donc je comprend pas sachant qu'en plus, il trouve bien MDP dans ma base puisqu'il enregistre le 1er caractère du code généré uniquement.
Moi ce que j'aimerais c'est qu'il enregistre tous le codes et non seulement le 1er caractère.
Arf
essaye de passer ta requète sql dans phpmyadmin avant de la mettre dans ton code ...
... Là elle est fausse aussi.
Cela serait plus :
ou
Qui sont équivalentes l'id étant en autoincrement je suppose (?)
Mais ton erreur initiale ne concerne pas sql ou la bdd.
La valeur de $mot_de_passe['MDP'] n'existe pas.
Comment est générée cette valeur ?
Tu essayes bien de passer la valeur contenu dans la clef 'MDP' du tableau $mot_de_passe ? Car là c'est ce que tu as écrit.
Si tu veux passer uniquement la variable $mot_de_passe à ta requête c'est :
ou
(Qui sont équivalentes si ta colonne 'ID' s'écrit bien comme ça)
qu'il faut écrire, mais ça ne veut plus dire la même chose ...
Est-ce que tu saisis les nuances ?
/!\ Dans MySQL PHP les nom des colonnes sont case sensitive, il faut donc respecter dans tes requêtes la casse des noms des colonnes utilisés dans ta base ...
Edit : j'ai retiré les quotes autour des noms des colonnes mySQL de la requête, ce ne sont pas des
essaye de passer ta requète sql dans phpmyadmin avant de la mettre dans ton code ...
... Là elle est fausse aussi.
Cela serait plus :
INSERT INTO 'mdpgeneres' (MDP) VALUES ('".$mot_de_passe['MDP']."');
ou
INSERT INTO 'mdpgeneres' (ID,MDP) VALUES ('','".$mot_de_passe['MDP']."');
Qui sont équivalentes l'id étant en autoincrement je suppose (?)
Mais ton erreur initiale ne concerne pas sql ou la bdd.
La valeur de $mot_de_passe['MDP'] n'existe pas.
Comment est générée cette valeur ?
Tu essayes bien de passer la valeur contenu dans la clef 'MDP' du tableau $mot_de_passe ? Car là c'est ce que tu as écrit.
Si tu veux passer uniquement la variable $mot_de_passe à ta requête c'est :
INSERT INTO 'mdpgeneres' (MDP) VALUES ('".$mot_de_passe]."');
ou
INSERT INTO 'mdpgeneres' (ID,MDP) VALUES ('','".$mot_de_passe."');
(Qui sont équivalentes si ta colonne 'ID' s'écrit bien comme ça)
qu'il faut écrire, mais ça ne veut plus dire la même chose ...
Est-ce que tu saisis les nuances ?
/!\ Dans MySQL PHP les nom des colonnes sont case sensitive, il faut donc respecter dans tes requêtes la casse des noms des colonnes utilisés dans ta base ...
Edit : j'ai retiré les quotes autour des noms des colonnes mySQL de la requête, ce ne sont pas des
'(Touche
4) mais des
'(Touches
Alt-Gr+
7) et comme elles ne servent que pour les noms de colonnes qui auraient des espaces ce qui j'espère n'est pas ton cas ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alors, en faisant comme ça :
J'ai plus de message d'erreur MAIS par contre, il enregistre rien dans ma base de donnée.
Une idée ?
function generer_mot_de_passe($nb_caractere) { $mot_de_passe = ""; $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $longeur_chaine = strlen($chaine); for($i = 1; $i <= $nb_caractere; $i++) { $place_aleatoire = mt_rand(0,($longeur_chaine-1)); $mot_de_passe .= $chaine[$place_aleatoire]; } $HOTE = 'localhost'; //NOM DE L'HÔTE SQL (fourni par ton hébergeur) $DB = 'fc_lucryio'; //NOM DE TA BASE DE DONNEES (que tu dois crée ou pas selon ton hébergeur) $USERNAME = 'root'; //NOM D' UTILISATEUR FOURNI PAR TON HEBERGEUR $PWD = ''; //MOT DE PASSE SQL FOURNI PAR TON HEBERGEUR //********************************// // Il faut que tu modifie les // // ci dessus // //********************************// try { $bdd = new PDO('mysql:host='.$HOTE.';dbname='.$DB.'',$USERNAME,$PWD); } catch (Exception $e){ die ('Erreur: ' . $e->getMessage()); } // NOUS VOILA CONNECTER A LA BASE DE DONNEE (NORMALEMENT) /* Il faudra créer une table dans votre base de donnée, elle s'appelera MDPgeneres il y aure dedans les champs : ID , de type INT avec une limite de caracteres de 11 MDP de type char avec une limite de 255 */ $bdd->exec('INSERT INTO mdpgeneres ("ID","MDP") VALUES("", "'.$mot_de_passe.'")'); return $mot_de_passe; } echo 'Bravo, vous pouvez passer à l\'étape suivante en donnant ce code <mark>'.generer_mot_de_passe(12).'</mark> à Messi44 par MP sur SDF.'; } else { echo "Vous n'avez pas encore atteint la note minimum de 18/20."; } ?>
J'ai plus de message d'erreur MAIS par contre, il enregistre rien dans ma base de donnée.
Une idée ?
faudrait savoir ce qu'il y a dans $mot_de_passe
pour ça que je te proposais d'en faire un var_dump tout à l'heure.
Sinon faut pas mettre de quotes autour de ID et de MDP ça doit pas être nécessaire et peut être même nuisible :
Pour être sûr. Tu prend la requête :
et tu la rentres à la main dans phpmyadmin (dans l'onglet SQL) pour voir ...
pour ça que je te proposais d'en faire un var_dump tout à l'heure.
Sinon faut pas mettre de quotes autour de ID et de MDP ça doit pas être nécessaire et peut être même nuisible :
$bdd->exec('INSERT INTO mdpgeneres (ID,MDP) VALUES("", "'.$mot_de_passe.'")');
Pour être sûr. Tu prend la requête :
INSERT INTO mdpgeneres (ID,MDP) VALUES("", "test")
et tu la rentres à la main dans phpmyadmin (dans l'onglet SQL) pour voir ...
Ah merde les quotes, je les ai pas retiré ^^ bin ça marche.
En faite, le souci depuis le début étais les quotes, je cherchais trop loin pour un truc à la con lol
Merci beaucoup de ton aide en tous cas. vraiment merci.
Donc :
c'est good :P
En faite, le souci depuis le début étais les quotes, je cherchais trop loin pour un truc à la con lol
Merci beaucoup de ton aide en tous cas. vraiment merci.
Donc :
$bdd->exec('INSERT INTO mdpgeneres (id,mdp) VALUES("", "'.$mot_de_passe.'")');
c'est good :P