Variable indéfini alors qu'elle est.
RésoluLucryio Messages postés 224 Statut Membre -
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
Une fonction PHP est utilisée pour générer un mot de passe aléatoire, mais l'affichage échoue lorsque l'on tente d'inclure la variable générée directement dans un echo en dehors de la fonction. La solution principale consiste à faire retourner la valeur par la fonction et à l'utiliser ensuite dans l'echo, ou à appeler la fonction directement dans le texte affiché. Des conseils complémentaires évoquent aussi de passer le nombre de caractères en argument, d'éviter l accès direct à une variable locale et de corriger des détails de syntaxe. Certains répondants évoquent l'enregistrement du mot de passe généré en base de données via PDO, avec des précautions de sécurité et une gestion correcte des requêtes.
-
Bonjour
En effet, $mot_de_passe est bien défini à l'intérieur de ta fonction, mais pas à l'extérieur.
Donc dansecho "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.";
-
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."; } ?> -
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. -
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) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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
-
et c'est possible de transférer ces mots aléatoire dans un fichier texte ? si oui, comment faire à partir de mon code ?
-
-
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. -
-
-
Je vais te montrer le code. Juste un peu de temps.
Dans le code au dessus j'ai oublier quelque choseecho '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
-
-
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 ? -
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. -
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 -
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 ?-
-
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é. -
-
-
-