Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
620 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  authentification PHP HTML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

authentification PHP HTML

n°1867517
colombat
Posté le 30-03-2009 à 16:39:20  profilanswer
 

Bonjour,
Je travaille actuellement sur le développement d'une page web permettant l'authentification d'utilisateurs.
Voici le code de la page HTML :
 
<html><head><title>Gestion des utilisateurs</title></head>
<body background="images/fond.gif" vlink="gray" alink="red" link="gray">
<h4>Pour vous identifier, veuillez entrer votre login :</h4>
 
<FORM method="post" action="login1.php" name=form>
<TABLE BORDER=0 align="center">
<TR>
 <TD>Login :</TD>
 <TD>
 <INPUT type=text name="nom" size=30> </TD>
</TR>
 
<TR>
 <TD>Mot de passe :</TD>
 <TD>
 <INPUT name="passwd" type=password size="30"> </TD>
</TR>
<TR>
 <TD COLSPAN=2>
 <br> </TD>
</TR>
 
<TR>
 <TD COLSPAN=2><div align="center">
   <input type="image" src="images/valider.jpg" onClick="javascript:document.form.submit();" name="send">
 </div></TD>
</TR>
</TABLE>
</FORM>
</body>
</html>
 
 
 
Et celui de la page en PHP :
<HTML><HEAD><TITLE>Gestion des utilisateurs</TITLE>
</HEAD>
<BODY background="images/fond.gif" vlink="gray" alink="red">
<p>
 
<?php
//$id_file=fopen("utilisateurs.txt","r" );
//{
if(isset($_POST["nom"]) && isset($_POST["passwd"]))
{
    $nom=$_POST["nom"];
    $passwd=$_POST["passwd"];
    $chaine=$nom.":".$passwd;
   
    //$i=1;
      if($id_file=fopen("utilisateurs.txt","r" ))
      {
       while($ligne=fread($id_file,100))
       {
        if($ligne==$chaine)
   {
    echo "Acc&egrave;s autoris&eacute;. <br>";  
    echo "<a href=\"accueil.html\"><img src=\"images/quitter.jpg\"></a>";
   }
   else
   {
      echo "<b>Acc&egrave;s refus&eacute; !</b>\n<br>Assurez vous que votre login et mot                    de passe sont valides.<br>";
      echo "<br><hr><br><a href=\"index1.html\"><img src=\"images/retour.jpg\"></a><br>";
     // echo $chaine;
      exit();
      }
     } //fin du while
  fclose($id_file);
   }
   else
   {
  echo "Fichier inexistant";
   }
}
else
{  
 echo "<h2>Veuillez vous authentifier !</h2> ";
}
?>
 
 
Le fichier utilisateurs.txt contient les lignes suivantes :
admin:toto
titi:tutu
 
Et lorsque j'exécute le programme (page HTML), il me met toujours accès refusé.
Merci de m'aider.

mood
Publicité
Posté le 30-03-2009 à 16:39:20  profilanswer
 

n°1867554
olivthill
Posté le 30-03-2009 à 17:15:45  profilanswer
 

fread() est fait pour lire des enregistrements de longueur fixe, ce qui n'est pas le cas ici.
Il vaut mieux utiliser fgets() qui va ramener une chaine jusquà la fin de la ligne.
Voir la doc http://fr.php.net/manual/fr/function.fgets.php
 
(Pour les prochains messages sur ce forum, sélectionner les lignes de code et appuyer sur le bouton "Fixe" ou "C/c++". Cela mettra le code dans un cadre plus lisible).


Message édité par olivthill le 30-03-2009 à 17:16:17
n°1867565
colombat
Posté le 30-03-2009 à 17:32:37  profilanswer
 

J'ai fait une modification du fichier PHP :

Code :
  1. <HTML><HEAD><TITLE>Gestion des utilisateurs</TITLE>
  2. </HEAD>
  3. <BODY background="images/fond.gif" vlink="gray" alink="red">
  4. <p>
  5. <?php
  6. //$id_file=fopen("utilisateurs.txt","r" );
  7. //{
  8. if(isset($_POST["nom"]) && isset($_POST["passwd"]))
  9. {
  10.    $nom=$_POST["nom"];
  11. $passwd=$_POST["passwd"];
  12. $chaine=$nom.":".$passwd;
  13. echo "nom = " .$nom. "<br>";
  14. echo "password = " .$passwd. "<br>";
  15. echo "chaine =" .$chaine. "<br>";
  16.     //$i=1;
  17.         $id_file=fopen("utilisateurs.txt","r" );
  18.        while($ligne=fgets($id_file,100))
  19.        {
  20.   echo $ligne;
  21.         if($ligne==$chaine)
  22.   {
  23.    echo "Acc&egrave;s autoris&eacute;. <br>";
  24.    echo "<a href=\"accueil.html\"><img src=\"images/quitter.jpg\"></a>";
  25.    //echo $chaine;
  26.   }
  27.   else
  28.   {
  29.      echo "<b>Acc&egrave;s refus&eacute; !</b>\n<br>Assurez vous que votre login et mot                    de passe sont valides.<br>";
  30.      echo "<br><hr><br><a href=\"index1.html\"><img src=\"images/retour.jpg\"></a><br>";
  31.      //echo $chaine;
  32.      exit();
  33.      }
  34.      } //fin du while
  35.  fclose($id_file);
  36. }
  37. else
  38. {
  39. echo "<h2>Veuillez vous authentifier !</h2> ";
  40. }
  41. ?>


 
Voici le résultat lorsque je saisis admin en login et toto en mot de passe :
nom = admin
password = toto
chaine =admin:toto
admin:toto Accès refusé !
Assurez vous que votre login et mot de passe sont valides.
 
Il me met toujours accès refusé alors que ces valeurs sont présentes dans le fichier utilisateurs.txt.
Merci de m'aider

n°1867569
yellu
Posté le 30-03-2009 à 17:35:02  profilanswer
 

Salut,
Essai ça :
 
if(trim($ligne) == $chaine) au lieu de if($ligne==$chaine)

n°1867573
colombat
Posté le 30-03-2009 à 17:37:35  profilanswer
 

Merci yellu.
Sauf que maintenant, il m'affiche ça :
nom = admin
password = toto
chaine =admin:toto
admin:toto Accès autorisé.
titi:tutu
Accès refusé !
Assurez vous que votre login et mot de passe sont valides.
 
Il y a sûrement des éléments à supprimer ou qqch à ajouter.


Message édité par colombat le 30-03-2009 à 17:38:49
n°1867581
yellu
Posté le 30-03-2009 à 17:44:26  profilanswer
 

ben oui met un "break;" apres avoir trouvé un enregistrement qui corresponde pour casser ton while.
 
Ton else est pas bon car actuellement tu casses la boucle avec exit(); des qu'un enregistrement est mauvais, on peut donc pas s'identifier avec autre chose que la première ligne de ton fichier ...
 
Utilises un boolean que tu passe a true dans ta boucle en cas de succes et que tu vérifie une fois la boucle terminée ou cassée.
 
Yellu

n°1867596
colombat
Posté le 30-03-2009 à 18:07:57  profilanswer
 

Tu n'aurais pas un exemple, Yallu ?
Sinon merci de réadapter mon code avec le booléen. ;)

n°1867788
Tirkyth
Posté le 31-03-2009 à 10:20:30  profilanswer
 

Code :
  1. <HTML><HEAD><TITLE>Gestion des utilisateurs</TITLE>
  2. </HEAD>
  3. <BODY background="images/fond.gif" vlink="gray" alink="red">
  4. <p>
  5. <?php
  6. if(isset($_POST["nom"]) && isset($_POST["passwd"]))
  7. {
  8.    $nom = $_POST["nom"];
  9.    $passwd = $_POST["passwd"];
  10.    $chaine = $nom . ":" . $passwd;
  11.    $id_file = fopen("utilisateurs.txt", "r" );
  12.    $auth = false;
  13.    while ($ligne = fgets($id_file, 100))
  14.    {
  15.        if ($ligne == $chaine)
  16.        {
  17.             $auth = true;
  18.             break;
  19.        }
  20.    } //fin du while
  21.    fclose($id_file);
  22.  
  23.    if ($auth)
  24.    {
  25.        echo "Acc&egrave;s autoris&eacute;. <br>";
  26.        echo "<a href=\"accueil.html\"><img src=\"images/quitter.jpg\"></a>";
  27.    }
  28.    else
  29.    {
  30.        echo "<b>Acc&egrave;s refus&eacute; !</b>\n<br>Assurez vous que votre login et mot de passe sont valides.<br>";
  31.        echo "<br><hr><br><a href=\"index1.html\"><img src=\"images/retour.jpg\"></a><br>";
  32.    }
  33. }
  34. else
  35. {
  36.    echo "<h2>Veuillez vous authentifier !</h2> ";
  37. }
  38. ?>


 
Comme ça non ?


Message édité par Tirkyth le 31-03-2009 à 10:35:04

---------------
Mon Feedback !
n°1867799
kao98
...
Posté le 31-03-2009 à 10:43:19  profilanswer
 

On ne peut pas comparer deux chaînes directement avec '=='.
Ca, c'est pas possible :  

Code :
  1. if ($machaine == $machaine2)


 
Il y a plusieurs méthode pour vérifier deux chaînes. Une souvent utilisée est :

Code :
  1. if (strpos($chaine, $chaine2)===FALSE) //chaînes différentes


Message édité par kao98 le 31-03-2009 à 10:43:40

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867801
kao98
...
Posté le 31-03-2009 à 10:46:16  profilanswer
 

Mince, suis con !
Y'a mieux : la fonction strcmp !
 

Code :
  1. if (strcmp($machaine, $machaine2) == 0) //chaines égales !!!


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
mood
Publicité
Posté le 31-03-2009 à 10:46:16  profilanswer
 

n°1867805
Tirkyth
Posté le 31-03-2009 à 11:01:26  profilanswer
 

Je ne comprends pas pourquoi tu dis que ce n'est pas possible.

Code :
  1. if ($machaine == $machaine2)


Un code comme cela fonctionne. Ça ne cause pas d'erreur PHP ou quoi que ce soit.
 
Je t'accorde qu'on peut se retrouver avec des résultats inattendus. Par exemple avec

Code :
  1. var_dump("1" == "01" );


qui renvoit "true".
 
Mais il suffit d'utiliser "===" dans ce cas là.

Code :
  1. var_dump("1" === "01" );


renvoit bien false.


---------------
Mon Feedback !
n°1867807
colombat
Posté le 31-03-2009 à 11:21:59  profilanswer
 

J'ai réussi à résoudre mon problème non sans mal :

Code :
  1. <HTML><HEAD><TITLE>Gestion des utilisateurs</TITLE>
  2. </HEAD>
  3. <BODY>
  4. <p>
  5. <?php
  6. if(isset($_POST["nom"]) && isset($_POST["passwd"]))
  7. {
  8. $i=1;
  9.    $nom=$_POST["nom"];
  10. $passwd=$_POST["passwd"];
  11. $chaine=$nom.":".$passwd;
  12. echo "Patientez ...";
  13.         $id_file=fopen("utilisateurs.txt","r" );
  14.        while($ligne=fgets($id_file,60))
  15.        {
  16.         if((trim($ligne) == $chaine))
  17.   {
  18.    fclose($id_file);
  19.    echo "<meta http-equiv=\"REFRESH\" content=\"0;url=accueil1.html\">";
  20.    exit();
  21.   }
  22.   else
  23.   {
  24.      echo "...";
  25.      $i++;
  26.      }
  27.      } //fin du while
  28.  echo "<br><b>Acc&egrave;s refus&eacute; !</b>\n<br>Assurez vous que votre login et mot                 de passe sont valides.<br>";
  29.     echo "<a href=\"index.html\">Retour &agrave; l'accueil</a>";
  30. }
  31. else
  32. {
  33. echo "<h2>Veuillez vous authentifier !</h2> ";
  34. }
  35. ?>


 
Maintenant, je recherche à restreindre l'accès à l'a page d'accueil (accueil1.html) du site pour qu'elle soit redirigée vers la page index.html pour permettre à l'utilisateur de s'authentifier.
Je crois que c'est avec un fichier .htaccess.
Merci pour votre aide. ;)

n°1867811
kao98
...
Posté le 31-03-2009 à 11:25:45  profilanswer
 

Il n'y a pas d'erreur de syntaxe, je te l'accorde, mais les chaînes ne seront pas comparée en tant que telle.
Il faut utiliser strcmp.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867813
Tirkyth
Posté le 31-03-2009 à 11:29:31  profilanswer
 

Je veux bien te croire, mais donne moi une source valable où c'est indiqué. Ou des codes exemples qui ne fonctionnent pas avec un "===" mais qui fonctionnent bien avec un strcmp ^^
 
Jusqu'à présent je n'ai jamais eu à faire de strcmp à cause d'un comportement non désiré des "===".


---------------
Mon Feedback !
n°1867816
colombat
Posté le 31-03-2009 à 11:30:09  profilanswer
 

Certes kao98 mais ça fonctionne très bien.
C'est tout à fait ce que souhaite mon boss.
As-tu par hasard la réponse à ma question ?

n°1867818
kao98
...
Posté le 31-03-2009 à 11:31:41  profilanswer
 

colombat a écrit :

J'ai réussi à résoudre mon problème non sans mal :
(...)


Ok. T'as pas lu mes messages.
 
Utilise strcmp, éventuellement '===' plutôt '==' !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867819
colombat
Posté le 31-03-2009 à 11:32:51  profilanswer
 

Si j'ai lu, kao98.
Mais mon code marche très bien. ;)

n°1867820
kao98
...
Posté le 31-03-2009 à 11:33:50  profilanswer
 

Tirkyth a écrit :

Je veux bien te croire, mais donne moi une source valable où c'est indiqué. Ou des codes exemples qui ne fonctionnent pas avec un "===" mais qui fonctionnent bien avec un strcmp ^^
 
Jusqu'à présent je n'ai jamais eu à faire de strcmp à cause d'un comportement non désiré des "===".


J'ai jamais mentionné l'opérateur "===" ! Je ne mentionnais que "==" !
Ne jamais utilisé "==" ! Mais "===", ça fonctionne, effectivement.
Mais dans son code, il n'utilise que "==" ce qui est une grosse erreur car on peut en fin de compte s'identifier avec 0/0 a priori !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867821
kao98
...
Posté le 31-03-2009 à 11:35:23  profilanswer
 

colombat a écrit :

Si j'ai lu, kao98.
Mais mon code marche très bien. ;)


Ok.
Essaye de t'identifier avec 0 (le chiffre zéro) en nom d'utilisateur et passwd.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867822
colombat
Posté le 31-03-2009 à 11:38:10  profilanswer
 

J'ai essayé la fonction strcmp mais ça ne fonctionne pas.
On me met accès refusé.

n°1867823
kao98
...
Posté le 31-03-2009 à 11:39:08  profilanswer
 

strcmp renvoie 0 quand les chaines sont identiques. Tu l'as bien utilisée ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867825
colombat
Posté le 31-03-2009 à 11:41:54  profilanswer
 

En m'identifiant avec 0 et 0 (login et mdp), on me met accès refusé.
Pour information, dans le programme, j'ouvre le fichier utilisateurs.txt qui contient les lignes suivantes :
admin:toto
titi:tutu
gc:gc
 
En entrant, par exemple, admin en login et toto en mdp, ça marche sans problème. Idem pour les 2 autres lignes.
Mais quand on rentre 0 (login) et 0 (mdp) ou autre chaîne de caractère dans ces 2 champs, on m'affiche bien accès refusé.

n°1867828
kao98
...
Posté le 31-03-2009 à 11:43:57  profilanswer
 

Ok. On va pas débattre 107 ans.
Soit, tu te contentes de ton truc pas sûr à 100%, soit tu remplace  

Code :
  1. if((trim($ligne) == $chaine))


par  

Code :
  1. if(strcmp($ligne, $chaine) == 0)


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867829
colombat
Posté le 31-03-2009 à 11:47:27  profilanswer
 

OK kao98.
Merci encore pour ton aide. ;)
Maintenant, sais-tu comment faire pour rediriger la page d'accueil à la page d'index pour permettre à l'utilisateur de s'authentifier?

n°1867832
kao98
...
Posté le 31-03-2009 à 11:55:29  profilanswer
 

Pour mon code précédent, il faut bien sûr faire un $ligne = trim($ligne) juste avant !
Pour ton autre question : ce qu'il faut, c'est garder, en session, si on est authentifié ou non. Et sur toutes tes pages nécessitant une authentification, tu test, grâce à ta session, si tu es identifié ou non, et si ce n'est pas le cas, tu redirige la page, grâce à la fonction php header(), vers le form d'identification.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867833
colombat
Posté le 31-03-2009 à 11:59:53  profilanswer
 

Tu n'aurais pas un exemple ou un lien à me donner, s'il te plaît ?
Je suis novice en PHP et ce n'est pas encore très évident pour moi. ;)

n°1867835
colombat
Posté le 31-03-2009 à 12:03:53  profilanswer
 

J'ai réussi avec la fonction strcmp en suivant tes indications, kao98.
 

Code :
  1. $ligne = trim($ligne);
  2.         if(strcmp($ligne, $chaine) == 0)
  3.   {
  4.    fclose($id_file);
  5.    echo "<meta http-equiv=\"REFRESH\" content=\"0;url=accueil.html\">";
  6.    exit();
  7.   }
  8.   else
  9.   {
  10.      echo "...";
  11.      $i++;
  12.      }


 
Merci encore. ;)


Message édité par colombat le 31-03-2009 à 12:04:41
n°1867844
Tirkyth
Posté le 31-03-2009 à 12:48:53  profilanswer
 

Colombat, tu devrais trouver tout un tas de choses qui te seront utiles sur ce tuto :
http://www.siteduzero.com/tutoriel [...] -site.html


---------------
Mon Feedback !
n°1867851
rufo
Pas me confondre avec Lycos!
Posté le 31-03-2009 à 13:10:00  profilanswer
 

y'a juste un truc qui me choque : les mdp sont en clairs dans le fichier txt :/ Est-ce qu'au moins ce fichier txt est protégé contre le téléchargement avec un .htaccess?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1867857
colombat
Posté le 31-03-2009 à 13:35:38  profilanswer
 

Comment faut-il faire pour le protéger ?

n°1867860
kao98
...
Posté le 31-03-2009 à 13:41:54  profilanswer
 

Et tu es pro !? O.o


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1867863
colombat
Posté le 31-03-2009 à 13:44:48  profilanswer
 

autant pour moi, j'ai créé un dossier user avec le fichier .htaccess suivant :
AuthType Basic
AuthName "Acces Restreint"
AuthUserFile "user/utilisateurs.txt"
require valid-user

n°1867877
rufo
Pas me confondre avec Lycos!
Posté le 31-03-2009 à 14:42:40  profilanswer
 

Ca va pouvoir te servir :  
http://www.infres.enst.fr/~danzart [...] s.html#C10
 
Pafce qu'avec ta méthode, t'empêche certes de télécharger ton fichier txt, mais les mdp sont toujours en clair :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  authentification PHP HTML

 

Sujets relatifs
MySQL - connection PHP/MySQL - problème de socket ?Php, classement tableau
Salut !! PHP Windows IISS (probleme de script)tableau sérialisé en PHP
colorer bordure tableau htmlCréer un formulaire PHP qui renvoie les données en Excel
[PHP] Varaibles de sessions et classes[PHP] utiliser le moteur de joomla pour faire une application.
Afficher le symbole € (euro) avec librairie GD PHP[PHP] Comment récupérer un source HTML ? (site avec authentification)
Plus de sujets relatifs à : authentification PHP HTML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR