Problème intégration dans la base de données

Résolu/Fermé
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017 - Modifié par Lucryio le 4/01/2014 à 18:46
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 - 5 janv. 2014 à 19:53
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
5 janv. 2014 à 17:32
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
5 janv. 2014 à 17:49
je doit le mettre ou ce "var_dump(mot_de_passe)" ? comment adapter mon code ?
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 5/01/2014 à 18:26
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
5 janv. 2014 à 18:27
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
5 janv. 2014 à 18:32
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
5 janv. 2014 à 18:44
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 5/01/2014 à 19:26
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
5 janv. 2014 à 19:14
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
5 janv. 2014 à 19:35
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 5/01/2014 à 19:43
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 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
5 janv. 2014 à 19:49
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
5 janv. 2014 à 19:53
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