Vous n'êtes pas identifié(e).
Bonjour,
je suis débutante en PHP et je bute sur un problème qui doit être bien simple à réaliser mais dont je ne trouve pas la solution :
-je dois vérifier le couple login/mot de passe. Ces derniers sont enregistrés dans un doc au format txt.
Mon problème est le suivant : quand je teste ce code il ne prend en compte que la 1ere ligne du document il n'y a donc qu'un seul utilisateur qui peut s'enregistrer, embêtant, non ?
voici mon code :
if(!empty($pass) && !empty($login)) {checkPass($login,$pass);} // verification du couple login pass en provenance du fichier
function checkPass($login,$pass) {
$tab = file("passwd.txt");
foreach($tab as $val){
list($l,$p)= explode("::",$val);
if(strtolower(trim($l)) == strtolower($login) && strtolower(trim($p)) == strtolower($pass))
{
echo "bienvenue";
return true;
$_SESSION['isPassValid'] = true; // initialisation de la variable de session
}
else {echo "Le login et / ou le mot de passe ne sont pas corrects";
return false;}
}
}
?>
dans le fichier texte les couples sont écrits :
login::pass
login::pass
etc...
pourquoi le foreach ne parcoure -t-il pas toutes les lignes du tableau ?
merci d'avance,
Inès
Hors ligne
Bonjour Inés !!!
Comme aujourd'hui, je suis de bonne humeur , je vais "moi-même" éditer ton post pour mettre les balises... sinon c'était fermeture de ton sujet.
P.S : pourquoi ne pas passer par un Array ???
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Bonjour,
merci pour la bonne humeur !!!!
désolé
etant donné que j'ouvre mon fichier texte avec file() le contenu est automatiquement mis dans un tableau , non ?
Inès
Hors ligne
Saluton,
Dans ta boucle foreach $val est l'index de chaque ligne et non la valeur.
Il te faut utiliser la syntaxe foreach complète
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Salut !
merci mais ça ne marche toujours pas :-(
Inès
Hors ligne
un petit point de detail qui devrai changer pas mal de chose
[code : php]
function checkPass($login,$pass) {
$tab = file("passwd.txt");
$tmp=false;
foreach($tab as $val){
list($l,$p)= explode("::",$val);
if(strtolower(trim($l)) == strtolower($login) && strtolower(trim($p)) == strtolower($pass)) {
echo "bienvenue";
$tmp= true;
$_SESSION['isPassValid'] = true; // initialisation de la variable de session
}
else
{
echo "Le login et / ou le mot de passe ne sont pas corrects";
$tmp= false;
}
}
return $tmp;
}
[/code]
a++
Hors ligne
merci,
mais maintenant le script m'affiche le message d'erreur et le message de bienvenue en même temps !! et l'ordre d'affichage diffère en fonction de la position du couple login/pass dans le fichier txt.
par ailleurs je ne comprends pas bien à quoi correspond cette variable $tmp ?
Inès
Hors ligne
>>par ailleurs je ne comprends pas bien à quoi correspond cette variable $tmp ?
je te met sur la voie
tel que tu avais écrit ta fonction, $_SESSION['isPassValid'] = true n'était jamais appelé
a++
Hors ligne
bon il faut que je me replonge dans les sessions alors !!
sinon que puis-je faire pour mon souci d'affichage ?
merci !
Hors ligne
pas de solution à mon problème ? (((
Hors ligne
Voilà une correction du code de Pierrot avec un seul affichage du message correspondant.
Hors ligne
merci beaucoup pour le code mais il y a toujours un problème !
dans mon fichier "passwd.txt" j'ai plusieurs couple login/pass et le code n'accepte l'entrée qu'au 1er couple inscrit et non aux suivants ! retour à la case départ !
a++
Inès
Hors ligne
Cours de debugage pour comprendre ce qui ne va pas alors. ^^
Avec ceci tu auras ce qui est réellement récupéré et ce qui est interprété.
Hors ligne
Encore merci
le problème vient donc du list !
lors du 1er affichage du tableau j'ai bien mes 3 couples login/pass
mais lors du 2nd affichage après le list($l,$p) = explode......
j'en ai deux qui sont passés à la trappe ! le problème vient donc peut être de mon fichier 'passwd.txt' j'y ai inscrit les couples comme ceci :
florent::flo
mathieu::mash
.....
est ce que c'est le retour à la ligne qu'il ne lit pas ?
Hors ligne
Saluton,
Je pense que tu devrais remplacer le echo $val par print_r($val), pour t'assurer de ce que retourne foreach, car je persiste à penser que tu n'utilises pas la bonne syntaxe.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
ça ne change rien à l'affichage, il n'y a toujours que la 1ere ligne d'affichée:(
Hors ligne
Et que donne un print_r($tab) avant ta boucle foreach
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Hors ligne
Plop,
Désolé de te décevoir Majuna chéri, mais la syntaxe du foreach version courte, existe bien
Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première.
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
Pour en revenir au sujet, un code comme ca fait quoi ?
(oui je sais, ca va retourner false, mais au moins ca permettra de situer un peu mieux le problème
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Un truc qui m'échappe c'est la logique de ça
Pourquoi y tester ($tmp == false) ???
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
ça ne m'affiche donc que la 1ere ligne : florent::flo
merci
Hors ligne
Plop,
Désolé de te décevoir Maljuna chéri, mais la syntaxe du foreach version courte, existe bien
Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première.
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
Il est vrai que je ne me sers quasiment jamais de tableaux autres qu'associatifs, donc cette syntaxe courte me dérange toujours puisqu'un item de tableau est toujours associé à un index (numérique ou autre).
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je viens de tester avec un environnement Mov'Amp, j'obtiens bien les trois items.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
????? désolé mais je débute alors c'est quoi un environnement Mov'Amp ?
j'ai simplement testé sous firefox !
Hors ligne
C'est Apache Mysql PHP installés sur une clef USB, je n'ai pas d'autre moyen de tester ici au bureau.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne