Récupération mot de passe et login.

Petit nouveau ! | 6 Messages

21 oct. 2008, 15:09

Bonjour à tous, je remercie d'avance les utilisateurs qui prendront le temps de lire mon sujet et d'y répondre :) ...

Dans le cadre d'un TP notre prof nous demande de créer un CV en html, mais pour pouvoir atteindre ce CV il faut d'abord ce logger. Les logins et mot de passe étant stocker dans un fichier texte, je rencontre un problème lors du test des logins mot de passe.

Voici le code HTML et PHP de la page :
<!DOCTYPE html

     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

    "DTD/xhtml1-strict.dtd">

<html>

	<head>

			<title>CV de Mask</title>

			

	</head>

	<body>
		<div>
		Pour accéder à mon CV veuillez vous identifiez
			<div>
				<form method="POST" action="login.html"><br/>
						<label>Login<br/></label>
						<input type="text" name="login"/><br/>
						<label>Password</label><br/>
						<input type="password" name="passwd"/>
						<input type="submit" value="ok" />
			</div>

		</div>
		
<?php
		$fic=fopen($bdd,"r");/*Ouverture du fichier (en lecture seule) contenant les logins et mot de passe*/
	        $ligne = fgets($fic);/*lecture de la premiere ligne*/
		while($ligne!=fin_fichier)/*tant que ligne différent de fin_fichier faire*/
		{
		if($_POST ['login']==$ligne) /*test si login est égale à la première ligne*/
                {
		$ligne=fgets($fic);/*Obtention de la 2eme ligne*/
		if($_POST ['passwd']==$ligne)/*test du mot de passe*/
		{
		header("Location:CV.html");/*Envoie vers le CV*/
		}
		}
		$ligne=fgets($fic);/*Obtention d'une nouvelle ligne*/
		}/*Fin tant que*/
		fclose($fic);/*Fermeture du fichier*/
		else/*si le login et mot de passe introuvable alors on envoie vers la page d'enregistrement*/
		{
		header("Location:auth.php");
		}    
		
?>

	</body> 

</html>
Je rentre les valeurs , je les envoie mais ensuite il ne se passe rien ...

Mon fichier BDD est consituté de cette façon :
mask
azerty
etc etc ...
fin_fichier
Une ligne de login et sur celle d'en dessous le MDP. fin_fichier est ce qui me permet de mettre fin à ma boucle tant que.

Je me tiens évidement à votre disposition pour toutes questions qui pourraient vous aidez à comprendre mon poblème et à le corriger.

PS : Le SQL nous est interdit ...
Modifié en dernier par mask le 26 oct. 2008, 01:41, modifié 2 fois.

Eléphant du PHP | 254 Messages

21 oct. 2008, 15:23

Salut

Code : Tout sélectionner

<form method="POST" action="login.html">
- Le submit de ton formulaire va envoyer le navigateur sur la page login.html, ce fichier existe t'il ?
- Il manque une balise </form>
- Met ton traitement php au debut de ton fichier, en l'exécutant seulement si tes variables de formulaires existent, car la commande user ne fonctionnera pas si tu as déja affiché quelque chose dans ta page
- Si tes variables de formulaire existent, alors tu fais ta redirection, sinon pas besoin de redirection, tu est deja dans la page d'autentification

Petit nouveau ! | 6 Messages

21 oct. 2008, 17:18

Salut merci de ton aide :)
Salut

Code : Tout sélectionner

<form method="POST" action="login.html">
- Le submit de ton formulaire va envoyer le navigateur sur la page login.html, ce fichier existe t'il ?
Oui il existe c'est ce fichier la

- Il manque une balise </form>
Oops merci :)

- Met ton traitement php au debut de ton fichier, en l'exécutant seulement si tes variables de formulaires existent, car la commande user ne fonctionnera pas si tu as déja affiché quelque chose dans ta page
Si je comprend bien je copie/colle ce code dans une autre page que je nome login.php par exemple et dans laquelle j'éxécute ce code ? :roll:

- Si tes variables de formulaire existent, alors tu fais ta redirection, sinon pas besoin de redirection, tu est deja dans la page d'autentification
Je ne pense pas avoir compris cette phrase ... Je suis obliger d'effectuer une redirection vers la page que je veux afficher ...
Mais sinon à vue d'oeil mon cde PHP permet il de lire et de rechercher correctement dans un fichier ?

Merci par avance ...

Eléphant du PHP | 254 Messages

21 oct. 2008, 22:13

- Le submit de ton formulaire va envoyer le navigateur sur la page login.html, ce fichier existe t'il ?
Oui il existe c'est ce fichier la
Euh un fichier qui execute du php doit avoir l'extension php non ? =>login.php
Met ton traitement php au debut de ton fichier, en l'exécutant seulement si tes variables de formulaires existent, car la commande user ne fonctionnera pas si tu as déja affiché quelque chose dans ta page
Si je comprend bien je copie/colle ce code dans une autre page que je nome login.php par exemple et dans laquelle j'éxécute ce code ?
Non non pas de soucis pour faire le traitement dans la meme page, simplement il faut que tu fasses ton traitement en début de fichier, sinon ta fonction header va raler (et aussi pour ne pas réafficher le formulaire si l'authentification est réussie)

Je m'explique, au depart ton user va voir le formulaire vide (login.php), qu'il va devoir remplir et envoyer. Dans cette étape la tu n'a pas de traitement PHP a faire. Ensuite ton FORM va réafficher login.php, puisque c'est bien ce que tu doit lui spécifier (a condition que tu ai renommé ton fichier comme dis plus haut)
Donc longin.php va etre re interprété depuis le début, mais tu auras des variables de formulaire a traiter, et avant que le code en arrive a afficher ton formulaire de login, tu aura analysé les variables $_POST, et fait ta redirection avec ton header

En gros l'algo de index.php c'est :

Code : Tout sélectionner

<?php - Analyse des variables de formulaire - Si Elle existent et son non nulles, alors lecture dans fichier, sinon on passe a la suite - Si elles correspondent a ce qu'il y a dans le fichier alors redirection (header) ?> Affichage du formulaire

Mammouth du PHP | 959 Messages

21 oct. 2008, 22:53

Une ligne de login et sur celle d'en dessous le MDP. fin_fichier est ce qui me permet de mettre fin à ma boucle tant que.
A ta place, je ferais comme cela :
login1:pass1
login2:pass2
Ça simplifiera les choses, après faut utiliser la fonction explode() pour séparer les 2...

Si le couple identifiant/mot de passe est bon, ne redirige pas vers la page de ton CV... utilise plutôt l'include en prenant soin de réfléchir comment faire pour pas te retrouver avec 2 fois la balise <html> dans ta page :P ça serait bête ^^

ViPHP
ViPHP | 3607 Messages

22 oct. 2008, 11:26

Sinon une autre erreur m'apparait..
Dans ton while, pour tester la fin de lecture du fichier, tu as oublier les guillemets autour de fin_fichier...
Pour finir, si tu es en php5, je te conseil vivement d'utiliser file_get_contents() au lieu de fopen() et sa clique...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

22 oct. 2008, 11:41

A ta place, je ferais comme cela :
login1:pass1
login2:pass2
Ça simplifiera les choses, après faut utiliser la fonction explode() pour séparer les 2...
:idea: Il vous est demandé d'enregistrer ces données dans un fichier texte.
Cela peut-il être un XML ?... ;)

Petit nouveau ! | 6 Messages

22 oct. 2008, 13:18

Met ton traitement php au debut de ton fichier,
C'est ce que j'ai fais sauf qu'au lieu de m'afficher le formulaire login et password il m'afiche une page vide, j'ai aussi tenter une autre méthode, déplacer mon code PHP vers un fichier nommé login.php, que j'appelle dans le bloc form de login.html mais j'ai toujours le même problème il n'éxécute pas ou tres mal mon bloc PHP.
Sinon une autre erreur m'apparait..
Dans ton while, pour tester la fin de lecture du fichier, tu as oublier les guillemets autour de fin_fichier...
Pour finir, si tu es en php5, je te conseil vivement d'utiliser file_get_contents() au lieu de fopen() et sa clique...
Merci pour l'erreur :), et pour la fonction file_get_contents je vais lire la doc et je la testerai :)
Ça simplifiera les choses, après faut utiliser la fonction explode() pour séparer les 2...
Merci je m'en servirai pour la partie écriture :)
Si le couple identifiant/mot de passe est bon, ne redirige pas vers la page de ton CV... utilise plutôt l'include en prenant soin de réfléchir comment faire pour pas te retrouver avec 2 fois la balise <html> dans ta page Razz ça serait bête ^^
La par contre je t'avouerai que je ne comprend pas tres bien ...
Il vous est demandé d'enregistrer ces données dans un fichier texte.
Cela peut-il être un XML ?... Wink
Oui si le mot de passe et le login est incorrect ou inconu il faut rediriger vers un formulaire d'inscription, mais je n'en suis pas encore la ^^. Et pour répondre à ta question on a carte blanche pour le format des fichiers, tant que l'on écrit et que l'on vient lire dans ce fichier ... Je vais aller faire un tour dans la section XML :D

Merci à tous pour votre aide :) ....

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
AB
ViPHP | 5818 Messages

22 oct. 2008, 20:00

Le plus simple serait d'enregistrer un tableau d'utilisateur dans un fichier texte. Auquel cas tu peux traiter ça en quelques lignes. Par exemple tu peux tester ce code :
<?php
// Utile si le charset html est UTF-8
header('Content-type: text/html; charset=UTF-8');

//SCRIPT DE CREATION DU TABLEAU
// Exemple de création et d'enregistrement du tableau des utilisateurs dans 'fichier_utilisateurs.txt'
//Normalement les trois lignes suivantes ne figurent pas dans ton script de connexion mais elles sont nécessaires ici pour la démonstration
$utilisateur['moi'] = 'mon pass';
$utilisateur['autre'] = 'autre pass';

file_put_contents('fichier_utilisateurs.txt', serialize($utilisateur));


// SCRIPT DE CONNEXION

//fonction pour travailler quelque soit la configuration magicquotes du serveur
function Verif_magicquotes ($chaine) 
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 

if (isset($_POST['nom'],$_POST['pass'])) 
{
$nom = Verif_magicquotes($_POST['nom']);
$pass = Verif_magicquotes($_POST['pass']);

//Importation du tableau enregistré dans le fichier fichier_utilisateurs.txt
$recherche = unserialize(file_get_contents('fichier_utilisateurs.txt'));

//Recherche dans le tableau
if (array_key_exists($nom,$recherche) && $recherche[$nom] == $pass) echo 'Utilisateur enregistré'; else echo 'Utilisateur inconnu';

}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<form action = '#' method="post">
nom <input type="text" name="nom" /><br />
pass <input type="text" name="pass" /><br />
<input type="submit" value = "connexion" />
</form>
</body>
</html>

Petit nouveau ! | 6 Messages

26 oct. 2008, 01:40

Probleme résolu merci à tous pour votre aide :)