Problème avec une fonction qui retourne mal valeur

Résolu
Tobi86 Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   -  
Tobi86 Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   -
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 :)



A voir également:

2 réponses

Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Bonjour,
Ceci donne quoi :
function mdp_aleatoire($n){
	for ($i=0; $i<=$n; $i++)
	{
	$mdp.=carac_aleatoire();
	}
	
return $mdp;
}
2
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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 405 Date d'inscription   Statut Membre Dernière intervention   57
 
Ah d'accord ! Super merci de l'explication Raivax ! :)
0
Tobi86 Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   57
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Tu peux rajouter $mdp = '';
au début de ta fonction mdp_aleatoire().
0
Tobi86 Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   57
 
C'est ce que j'ai fait après ton explication et ça fonctionne du tonnerre !! Encore merci !
0