Construire un tableau associatif avec un fichier externe

Signaler
Messages postés
40
Date d'inscription
lundi 13 février 2012
Statut
Membre
Dernière intervention
18 avril 2014
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonsoir,


Voilaà j'ai un fichier texte externe nommé identif_ens.txt et contenant
les login et mots de passe permettant de se logguer à une page, ce
fichier a la forme :


azerty;123456

toto;titi25


Par ailleurs pour tester la validité du login j'ai développé un script
qui teste si le champs login de mon formulaire d'accès et le champs
pass sont correct. Pour cela j'envisage de lire à l'ntrée dans le
script le fichier identif_ens.txt, de construire un tableau associatif
$tab et ensuite d'effectuer un test tel que :

si (strcmp($tab[$login], $pass) ==0) alors l'accès est possible


Voici le code entier :


$tab = array ();

// lecture du fichier contenat les identifications et construction du tableau interne

$fic = fopen("identif_ens.txt","r");

do{

    $ligne = fgets($fic, 4096);

    $element = explode (";",$ligne);


    $id = $element[0]; echo $id."=".$element[0];

    $p = $element[1]; echo $p."=".$element[1]."
";

    $tab["$id"] = $p;       // Mon problème réside sur cette ligne voir plus bas

    echo $tab["$id"]." = ".$p."
";
}while(!feof($fic));

?>

<html>

    <head>

        <title> Identification enseignant </title>

    </head>

   

        <?

        if(empty($pass)){

            echo " Vous devez entrer un mot de passe !

";

        }else{

            if(strcmp($tab[$login],$pass) == 0){

                echo " login et password correct

";

                session_start();

                echo "Créer un QCM";               

            }else{

                echo " login et password incorrect

";

            }

        }

        ?>

   

</html>


La ligne que j'ai commenté en rouge : refuse de me construire l'élément de tableau associatif.

La ligne echo implanté en dessous pour vérification de l'implémentation me retourne même : ph51cn08 = ph51cn08 c'est à dire deux fois $p de passé en paramètre.


Dès lors comment puis-je faire pour que cette boucle me génère une association valide ?


Merci de votre aide.

Ph. Sautreau

7 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut
pour recuperer ton tableau, tu peux faire beaucoup plus simple :

$tab_1d = file('identif_ens.txt');
$tab_2d=array();

foreach ($tab_1d as $l=>$u){
$e=explode(';', $u);
$tab_2d[$e[0]]=str_replace("\n", '', $e[1]);
}

un print_r($tab_2d) te permet de verifier le contenu du tableau.
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
40
Date d'inscription
lundi 13 février 2012
Statut
Membre
Dernière intervention
18 avril 2014

Bonjour,

Et merci pour votre solution, toutefois si le tableau se construit bien, il n'en reste pas moins que lorsque je rentre un login et un mot de passe corrects (par exemple azerty et 123456) cf. plus haut mon script me retourne :

login et password incorrect

Y aurai-t-il une mauvaise interprétation de strcmp($tab[$login], $pass) == 0?

Merci pour votre aide.

Ph. Sautreau
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

tu as utilisé le code de Coucou ? Parce qu'il fait un truc que tu oublies, il vire le retour chariot de fin de ligne.
Ensuite, pourquoi utiliser strcmp() quand une simple comparaison suffit (!==) ?
Messages postés
40
Date d'inscription
lundi 13 février 2012
Statut
Membre
Dernière intervention
18 avril 2014

Bonsoir,

Pour répondre à ta question, j'ai bien utilisé le code de coucou747.
Quand à l'utilisation de strcmp plutôt que !==, cela viens d'une habitude qu'un de mes profs d'info m'avait donné il y a une dizaine d'année et qui était : quand on traite des chaînes de caractères on utilise des fonctions chaîne de caractères.

Ph. Sautreau
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Alors il n'y a aucune raison que ça ne marche pas.
Essaye donc d'afficher tes deux variables entre des délimiteurs (# par exemple), pour voir si aucun caractère n'est venu s'interposer.
Pour strcmp(), il ne faut pas toujours écouter ses vieux profs... "toujours" dans son sens le plus temporel ;-). Les langages évoluent. Et pire, ils n'ont pas tjrs raison.
 
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
strcmp c'est un truc a utiliser en C,
en perl, c'est eqen php, c'est ou
en java c'est equals
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Ben voilà la réponse du pourquoi et du comment :-)
Effectivement, chaque langage est différent.