[Résolu] Problème incompréhensible avec du code PHP

Bonjour à tous,

Je réalise un projet en PHP en ce moment et j’ai un petit problème, je bloque dessus depuis des heures et je n’arrive pas à voir d’où vient le problème, je sollicite votre aide.

Il s’agit d’une partie qui concerne l’inscription sur une plateforme, pour cela j’aimerais comparer un mot de passe donné par l’utilisateur à une base dans un fichier, voici le code :

$tab_dico = file('dico');
$taille_tab_dico = count($tab_dico);
// On initialise cette variable à 0, si un mot de passe est jugé faible, on la passe à 1
$resultat_tab_dico = 0;
$i = 0;
		
// On parcours le tableau afin de détecter les faibles mots de passe
do 
{
	$mdp_table = $tab_dico[$i];
	if (strcmp($mdp, $mdp_table) == 0) {
	// Si détecté, on passe la variable à 1
        $resultat_tab_dico = 1;
}
        $i = $i + 1;
} while (($i<=$taille_tab_dico) && ($resultat_tab_dico == 0));

Le problème c’est que la variable reste à 0, même si j’indique un mot de passe contenu dans le fichier, (j’ai vérifié par affichage, ils sont exactement identiques).

Il rentre bien dans la boucle do mais ne met pas la variable $resultat_tab_dico à 1…
:open_mouth:

Quelqu’un aurait une idée ?

Merci

Bonjour,

Pour commencer, ton code n’est pas mauvais en soit, mais il ressemble à du code en C alors que PHP propose des fonctionnalités qui te facilite la vie (et celles de tes lecteurs) :

[code]$tab_dico = file(‘dico’);
// true si un mot de passe est jugé faible
$resultat_tab_dico = false;

foreach ($tab_dico as $mdp_table) {
if ($mdp == $mdp_table) {
$resultat_tab_dico = true;
break;
}
}
[/code]

A première vue, je pencherai pour un problème de saut de ligne. Cela peut être difficile à détecter puisque le HTML ignore les sauts de ligne. Tu peux tester en utilisant la fonction var_dump pour afficher la valeur des variables.

Voici une solution possible pour être tranquille :

[code]$contents = file_get_contents (‘dico’);
$tab_dico = explode ("\n", $contents);
// true si un mot de passe est jugé faible
$resultat_tab_dico = false;

foreach ($tab_dico as $mdp_table) {
if ($mdp == $mdp_table) {
$resultat_tab_dico = true;
break;
}
}
[/code]

PS: code écrit alarache sans php sous la main, il peut y avoir des erreurs de syntaxe :wink:

Bonjour gege2061,

Merci de ta réponse, en effet c’est peut-être bien un problème de retour à la ligne, de plus oui j’aurais du penser au foreach c’est quand même plus rapide.

Je testerais ta façon le plus vite possible et je te tiendrais au courant dans la semaine.

En tout cas merci :wink:

Bonne soirée

Il est interessant aussi de savoir que la boucle foreach quelque soit le langage est au pire aussi rapide qu’une boucle for avec un entier qu’on incrémente, mais au mieux beaucoup plus rapide (grace à l’utilisation d’itérateur de manière implicite). Ça dépend du langage et des cas.

Ah oui en effet, je m’en servais pour le Csh, mais je penserais à l’utiliser dès que je peux.

En tout cas merci car cela fonctionne ! :stuck_out_tongue: