Problème avec une fonction qui retourne mal valeur

Résolu/Fermé
Tobi86 Messages postés 403 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 9 mai 2018 - 8 déc. 2013 à 11:30
Tobi86 Messages postés 403 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 9 mai 2018 - 8 déc. 2013 à 13:00
Bonjour,

Voilà je suis entrain de faire un exercice de cours et j'ai un petit souci que je n'explique pas ...
L'exercice est de faire un générateur de mot de passe, l'utilisateur doit rentrer le nombre de caractères voulu dans le mot de passe après ça le programme le génère.
Je tiens à préciser que c'est du PHP en mode CLI.

voilà mon code :

<?php
/***FONCTION GENERANT LE CARACTERE ALEATOIREMENT***/
function carac_aleatoire(){
	
$rep1 = rand(97,122);

//test permettant de savoir le chiffre généré aléatoirement de 97 à 122
//echo $rep1;
	
$carac = (chr($rep1));
	 
return$carac;
}

/***FONCTION GENERANT LE MOT DE PASSE DE 'n' CARACTERES***/
function mdp_aleatoire($n){
	for ($i=0; $i<=$n; $i++)
	{
	$lettreA = carac_aleatoire();
	$mdp="";
	$mdp=$mdp & $lettreA;
	}
	
return $mdp;
}

/***PROGRAMME PRINCIPAL***/
echo "nbr de caractères ? \n";
$n = trim(fgets(STDIN));
echo mdp_aleatoire($n);
?>


C'est au niveau de cette fonction que ça bug
/***FONCTION GENERANT LE MOT DE PASSE DE 'n' CARACTERES***/
function mdp_aleatoire($n){
	for ($i=0; $i<=$n; $i++)
	{
	$lettreA = carac_aleatoire();
	$mdp="";
	$mdp=$mdp & $lettreA;
	}
	
return $mdp;


J'ai bien un résultat dans ma console mais ça fait une ligne "vide"
Si quelqu'un avait la possibilité de me dépanner, merci d'avance :)



2 réponses

Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
8 déc. 2013 à 12:45
Bonjour,
Ceci donne quoi :
function mdp_aleatoire($n){
	for ($i=0; $i<=$n; $i++)
	{
	$mdp.=carac_aleatoire();
	}
	
return $mdp;
}
2
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
8 déc. 2013 à 12:54
Pour compléter cette (bonne) réponse, quelques explications.

1 - $mdp="";
à chaque itération de ta boucle, tu remets à vide "" ta variable !

2- $mdp=$mdp & $lettreA;
l'opérateur & ne s'applique pas à la concaténation de chaînes de caractères.
Pour cela, il faut utiliser l'opérateur point "." :
$mdp = $mdp . $lettreA;
ou, comme le suggère Nhay, la forme condensée $mdp .= $lettreA;
$a .= $b;
est strictement équivalent à
$a = $a . $b;

Xavier
0
Tobi86 Messages postés 403 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 9 mai 2018 57
8 déc. 2013 à 12:57
Ah d'accord ! Super merci de l'explication Raivax ! :)
0
Tobi86 Messages postés 403 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 9 mai 2018 57
8 déc. 2013 à 12:54
Voici le résultat dans ma console : ça me donne bien une chaine malgré que un un mot de passe de 5 caractères il m'en donne 6 mais ça je sais pourquoi. et mais apres il y a l'erreur.
nbr de caractères ? 
5
PHP Notice: Undefined variable: mdp in /home/thibault/workspace/TP6/SI4-TP6/Save/test.php on line 19
ewdbea

0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
8 déc. 2013 à 12:59
Tu peux rajouter $mdp = '';
au début de ta fonction mdp_aleatoire().
0
Tobi86 Messages postés 403 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 9 mai 2018 57
8 déc. 2013 à 13:00
C'est ce que j'ai fait après ton explication et ça fonctionne du tonnerre !! Encore merci !
0