Variable indéfini alors qu'elle est.

Résolu/Fermé
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017 - 4 janv. 2014 à 14:46
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017 - 4 janv. 2014 à 18:39
Bonjour,

je fais appel à nouveau à vous car, j'ai un souci avec ce code :

function generer_mot_de_passe($nb_caractere = 12) 
{
        $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];
        }

        return $mot_de_passe;    
}
echo "Bravo, vous pouvez passer à l'étape suivante en donnant ce code <mark>$mot_de_passe</mark> à Messi44 par MP sur SDF."; 
}
else
{
echo "Vous n'avez pas encore atteint la note minimum de 18/20.";
}
?>


Il me dis que la variable "$mot_de_passe" n'est pas définie alors qu'elle est.

Je veux que dans l'echo, il me donne la chaîne de caractère généré aléatoirement.


Vous pouvez m'aider s'ils vous plait ?

Merci par avance.

10 réponses

Bonjour

En effet, $mot_de_passe est bien défini à l'intérieur de ta fonction, mais pas à l'extérieur.
Donc dans
echo "Bravo, vous pouvez passer à l'étape suivante en donnant ce code <mark>$mot_de_passe</mark> à Messi44 par MP sur SDF."; 
il n'est pas défini

Ça devrait mieux marcher :
echo "Bravo, vous pouvez passer à l'étape suivante en donnant ce code <mark>",generer_mot_de_passe(),"</mark> à Messi44 par MP sur SDF."; 
1
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
Modifié par tete0148 le 4/01/2014 à 15:08
Ton soucis vient du fait que dans la ligne pour afficher le résultat de la fonction (
echo "Bravo, vous pouvez passer à l'étape suivante en donnant ce code <mark>$mot_de_passe</mark> à Messi44 par MP sur SDF."; 
)
Tu utilise directement la variable, alors qu'il faut mettre le nom de la fonction :

echo 'Bravo, vous pouvez passer à l'étape suivante en donnant ce code <mark>'.generer_mot_de_passe.(12)'</mark> à Messi44 par MP sur SDF.'; 

Il faut aussi enlever le
= 12 
lors de la déclaration de fonction.
Ton code final ressemble donc à ç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];
        }

        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.";
}
?>
1
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 à 14:59
Voila le message d'erreur :

Notice: Undefined variable: mot_de_passe in C:\wamp\www\FC-LUCRYIO\index2.php on line 348


la ligne est correspond à celle de l'"echo".

Je viens de vérifier (au cas ou) et cette variable est utilisé seulement pour ça et nulle part ailleur.
0
Utilisateur anonyme
4 janv. 2014 à 14:59
J'ai corrigé ma réponse et tete0148 a répondu en même temps
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 15:00
Juste une question : pourquoi n'ai-je pas la coloration syntaxique sur les codes de mes messages.
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
4 janv. 2014 à 15:03
pour avoir la couleur sur ton code, tu doit choisir quel langage tu utilise ^^
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 15:06
Merci ^^
0
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 à 15:06
Merci, ça fonctionne très bien.

Une autre petite question :

Comment faire pour que la chaîne de caractère donne un mot et non un truc qui veux rien dire ?

Ou alors, est-ce possible que ces mots soit gardé dans un fichier texte ? (c'est pour vérifier la véracité des mots que les gens devrons me donner pour valider leurs quizz)
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 15:06
soit tu choisi le mot à la base, ou tu fait une liste de mots.
Si tu veux que le mot soit aléatoire, il va falloir utiliser une API de google, celle de Google traduction je pense (je sais même pas si elle existe).
Je te conseil la méthode de la liste, puis de choisir un des mots aléatoirement.
0

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

Posez votre question
Utilisateur anonyme
4 janv. 2014 à 15:07
Si par "mot" tu entends "mot du dictionnaire de la langue française", le seul moyen à ma connaissance est d'avoir une grande liste de mots et de "taper dedans" au hasard
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
4 janv. 2014 à 15:08
et c'est possible de transférer ces mots aléatoire dans un fichier texte ? si oui, comment faire à partir de mon code ?
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 15:09
Je n'ai pas bien compris, mettre la liste dans un fichier ?
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
4 janv. 2014 à 15:12
non, je vais essayer d'être plus explicite.

Actuellement le programme génère un "mot" aléatoire.
Ce que j'aimerais savoir c'est est-ce que c'est "mot" peuvent être mis en même temps que la génération du "mot" dans un fichier texte.

J'aimerais garder une trace des "mot" généré afin de vérifier ce que les membres me donnerons et voir s'il ne triche pas en quelque sorte.
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 15:17
La meilleur solution serait de les stocker en base de donnée. En as tu une avec ton hébergeur ?
0
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 à 15:33
oui, j'ai une base de données avec mon hebergeur, et comment adapter mon code pour qu'il enregistre dans la base ?

Je viens de créer ma base "fc_lucryio" et ma table "code_quizz" qui contien : id et code.
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 15:33
Je vais te montrer le code. Juste un peu de temps.

Dans le code au dessus j'ai oublier quelque chose
 echo 'Bravo, vous pouvez passer à l\'étape suivante en donnant ce code <mark>'.generer_mot_de_passe(12).'</mark> à Messi44 par MP sur SDF.'; 

Il faut penser à échapper l'apostrophe à "l'étape" en utilisant un anti slash
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
4 janv. 2014 à 17:33
oui oui seulement id est en auto-incrément.

voici le 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 (mdp)
     VALUES('.NULL,$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.'; 


Et voici l'erreur qu'il me met :

Warning: PDO::exec() expects exactly 1 parameter, 2 given in C:\wamp\www\FC-LUCRYIO\index2.php on line 367

ce qui correspond à cette ligne :

VALUES('.NULL,$mot_de_passe.')');

Et même si je retire le "NULL" et les ".", ça ne fonctionne pas, le code ne s'enregistre pas dans la base de données.

J'ai bien fait la base, "fc_lucryio" et la table "mdpgeneres" et les 2 colonnes :

- id int(11) auto-incrémentation
- mdp char(255)

voila tous ce que j'ai fais.

Et malgré tous ça, le code se génére le message d'erreur est là et le code ne s'enregistre pas dans la base, une idée de quelqu'un ?
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 17:42
Il faut changer les identifiants ainsi que le nom de l'hôte SQL
$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

Penser à enlever le point devant NULL et MDPgeneres pour la table.
0
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 à 17:46
pour le moment, je suis en local donc pour l'hôte, c'est ça ^^

pour le nom de la table, si je met MDPgeneres, ça me le change en mdpgeneres

il me retire les majuscules.

Pour le "." devant NULL, quand je le retire ça me fait cette erreur :

Parse error: syntax error, unexpected 'NULL' (T_STRING) in C:\wamp\www\FC-LUCRYIO\index2.php on line 367
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
4 janv. 2014 à 17:55
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 (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 d'erreur mais le code ne s'enregistre pas dans ma base de données.

une idée ?
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 18:04
Il faut effectivement laisser le point (pour la concaténation).
Mais je ne sais pas pourquoi ça ne s'inclue pas. C'était pareil à mes débuts.
0
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:14
j'ai essayé comme ça :

$bdd->exec('INSERT INTO mdpgeneres 
     VALUES("", "'.$mot_de_passe['MDP'].'")');


j'ai cette erreur :

Warning: Illegal string offset 'MDP' in C:\wamp\www\FC-LUCRYIO\index2.php on line 367

qui correspond à cette ligne :
VALUES("", "'.$mot_de_passe['MDP'].'")');


et ça me m'enregistre 1 lettre ou 1 chiffre uniquement dans la base.

une idée ?

PS : Il m'enregistre seulement le premier caractère généré.
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 18:19
Je vois.
J'ai peut-être une idée :
/*** Au dessus il y a la fonction 
**************************************/
$MDPgenere = generer_mot_de_passe(12);
$[/contents/104-bases-de-donnees-introduction bdd]->exec('INSERT INTO mdpgeneres 
     VALUES('.MDPgenere.')');
0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
4 janv. 2014 à 18:21
heu, je met ce code ou en faite ?
0
tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
4 janv. 2014 à 18:27
Tu enlève tout le code concernant la base de donnée qui est à l'intérieur de la fonction.
Et tu met dessous, avec ce que je viens de rajouter.
0