authentification PHP HTML - PHP - Programmation
Marsh Posté le 30-03-2009 à 17:15:45
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).
Marsh Posté le 30-03-2009 à 17:32:37
J'ai fait une modification du fichier PHP :
Code :
|
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
Marsh Posté le 30-03-2009 à 17:35:02
Salut,
Essai ça :
if(trim($ligne) == $chaine) au lieu de if($ligne==$chaine)
Marsh Posté le 30-03-2009 à 17:37:35
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.
Marsh Posté le 30-03-2009 à 17:44:26
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
Marsh Posté le 30-03-2009 à 18:07:57
Tu n'aurais pas un exemple, Yallu ?
Sinon merci de réadapter mon code avec le booléen.
Marsh Posté le 31-03-2009 à 10:20:30
Code :
|
Comme ça non ?
Marsh Posté le 31-03-2009 à 10:43:19
On ne peut pas comparer deux chaînes directement avec '=='.
Ca, c'est pas possible :
Code :
|
Il y a plusieurs méthode pour vérifier deux chaînes. Une souvent utilisée est :
Code : |
Marsh Posté le 31-03-2009 à 11:01:26
Je ne comprends pas pourquoi tu dis que ce n'est pas possible.
Code :
|
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 : |
qui renvoit "true".
Mais il suffit d'utiliser "===" dans ce cas là.
Code : |
renvoit bien false.
Marsh Posté le 31-03-2009 à 11:21:59
J'ai réussi à résoudre mon problème non sans mal :
Code :
|
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.
Marsh Posté le 31-03-2009 à 11:25:45
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.
Marsh Posté le 31-03-2009 à 11:29:31
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 "===".
Marsh Posté le 31-03-2009 à 11:30:09
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 ?
Marsh Posté le 31-03-2009 à 11:31:41
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 '==' !
Marsh Posté le 31-03-2009 à 11:32:51
ReplyMarsh Posté le 31-03-2009 à 11:33:50
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 ^^ |
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 !
Marsh Posté le 31-03-2009 à 11:35:23
colombat a écrit : Si j'ai lu, kao98. |
Ok.
Essaye de t'identifier avec 0 (le chiffre zéro) en nom d'utilisateur et passwd.
Marsh Posté le 31-03-2009 à 11:38:10
J'ai essayé la fonction strcmp mais ça ne fonctionne pas.
On me met accès refusé.
Marsh Posté le 31-03-2009 à 11:39:08
strcmp renvoie 0 quand les chaines sont identiques. Tu l'as bien utilisée ?
Marsh Posté le 31-03-2009 à 11:41:54
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é.
Marsh Posté le 31-03-2009 à 11:43:57
Ok. On va pas débattre 107 ans.
Soit, tu te contentes de ton truc pas sûr à 100%, soit tu remplace
Code : |
par
Code : |
Marsh Posté le 31-03-2009 à 11:47:27
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?
Marsh Posté le 31-03-2009 à 11:55:29
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.
Marsh Posté le 31-03-2009 à 11:59:53
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.
Marsh Posté le 31-03-2009 à 12:03:53
J'ai réussi avec la fonction strcmp en suivant tes indications, kao98.
Code :
|
Merci encore.
Marsh Posté le 31-03-2009 à 12:48:53
Colombat, tu devrais trouver tout un tas de choses qui te seront utiles sur ce tuto :
http://www.siteduzero.com/tutoriel [...] -site.html
Marsh Posté le 31-03-2009 à 13:10:00
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?
Marsh Posté le 31-03-2009 à 13:41:54
Et tu es pro !? O.o
Marsh Posté le 31-03-2009 à 13:44:48
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
Marsh Posté le 31-03-2009 à 14:42:40
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
Marsh Posté le 30-03-2009 à 16:39:20
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ès autorisé. <br>";
echo "<a href=\"accueil.html\"><img src=\"images/quitter.jpg\"></a>";
}
else
{
echo "<b>Accès refusé !</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.