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   -
Bonjour,

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.

5 réponses

ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
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 ...
0
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
je doit le mettre ou ce "var_dump(mot_de_passe)" ? comment adapter mon code ?
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Tu peux aussi rajouter un die(); juste après

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 ;-)
0
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
La déjà c'est la valeur que tu essayes d'insérer qui a un problème, php la trouve pas, si tu faisais simplement un

echo $mot_de_passe['MDP'];


tu aurais exactement la même erreur. Bon sauf le numéro de ligne :p
0
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
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 :

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 ...
0
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
oui oui la colonne id dans ma base s'appel : "ID" donc, je pourrais faire un changement dans la rrequête en remplaçant "Id" par "ID" je test après avoir mangé et je te tien au courant.

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
Alors, en faisant comme ça :

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 ?
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
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 :

$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 ...
0
Lucryio Messages postés 206 Date d'inscription   Statut Membre Dernière intervention  
 
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 :
 $bdd->exec('INSERT INTO mdpgeneres (id,mdp)
     VALUES("", "'.$mot_de_passe.'")');


c'est good :P
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
De rien.
Enfin y avait aussi que tu essayais de passer un tableau au lieu d'une variable dans ta requète.
Et puis y'a d'autres trucs, car là c'est pas trop sécurisé à plusieurs niveau, mais beaucoup de codes que je vois ici ne le sont pas ...
0