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

Résolu
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

  1. 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
    1. je doit le mettre ou ce "var_dump(mot_de_passe)" ? comment adapter mon code ?
      0
      1. 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
        1. 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
          1. 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
          2. 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
          3. 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
          4. 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
        2. 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
          1. 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
          2. 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
          3. 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