Problème session php [espace membre]

Résolu/Fermé
Signaler
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012
-
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012
-
Bonjour a tous,

Ma mission du jour est de créer une page a accès protégé par mot de passe. Ma base de données contient 2 membres (ID, Login, Password)
Je dispose d'un formulaire pour entrer les données ( Login et Password ) et d'une autre page qui test et affiche selon le resultat des tests mais voila rien ne marche.
Il me semble que le Login ne passe pas, j ai éssayé de faire des test avec seul le mot de passe et tout fonctionné mais depuis que j ai rajouté le test sur le Login plus rien ne marche. Auriez vous une solution svp ?

Je joins mes codes

Formulaire :

<!--frmPagePasse.php-->
<html>
<head>
<title> Ajout nouveau nom </title>
</head>
<body>
<form action="pagePasse.php" method="post">
<p>
Entrer votre login : <input type="text" name="Pseudo" /><br><br>
Mot de passe : <input type="password" name="Password" /><br><br>

<input type="submit" value="Valider" />
<input type="reset" value="Effacer">
</p>
</form>

</body>
</html>


Page test:

<!--pagePasse.php-->
<html>
<head>
<title>Accés page sécurisé</title>
</head>
<body>
<p>Accès à une page sécurisée</p>
<?php
include('connect.php');
$query=mysql_query("select Pass, Login from Membres");
$MonPass = $_POST['Password']; // Récupération des variables
$MonLogin = $_POST['Pseudo'];
$ligne=mysql_fetch_array($query);
$booly = 'false'
while($ligne or $booly == 'false')
{
if ($ligne['Login'] == $_POST['pseudo'])
{
if ($ligne['Pass'] == $_POST['Password'])
{
echo 'salut';
$booly = 'true';
}
}
$ligne=mysql_fetch_array($query);
"<br>";
}

echo'Mot de passe ou login invalide';
?>
<a href ="frmPagePasse.php"> Se reconnecter </a>
<?php
mysql_close();
?>
</body>
</html>



Merci par avance pour vos réponses

Winco07

5 réponses

Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
90
Bonjour.

plus rien ne marche
Ca veut dire ?
La page web ne s'affiche pas ? Il y a un message d'erreur ?
Si tu ne donnes pas plus de précisions, on ne pourra rien faire pour toi...

Au passage (rien à voir avec ton erreur) :
- Ton système de récupérer toutes les lignes de ta table, pour les comparer aux informations récupérées, c'est OK parce que tu n'as que 2 membres. Mais dans la vraie vie c'est le genre de truc à te couler ton site.
- Il vaut mieux éviter de stocke les Mots de Passe en clair dans ta table. Stocke plutôt le md5 (par exemple), et compare-le à md5($_POST['Password']).
- Dans la vraie vie, tu risques de te retrouver face à des hackers. Prends tout de suite l'habitude de protéger tes variables (tu peux trouver pas mal de tutoriels sur la sécurité par google)
Messages postés
613
Date d'inscription
dimanche 21 octobre 2007
Statut
Membre
Dernière intervention
22 juin 2009
46
 $MonPass = $_POST['Password']; // Récupération des variables
$MonLogin = $_POST['Pseudo'];
...
if ($ligne['Login'] == $_POST['pseudo'])
if ($ligne['Pass'] == $_POST['Password'])
quel est l'interet de les rentrer dans des variables
si tu ne les utilises pas apres ? Oo
de plus tu compars $_POST['pseudo']
alors que ton champs se nomme Pseudo ^^
attention a la casse :)
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012

Bonjour a vous deux,

J ai bien pris note de toutes les infos données, je vais éssayé de voir aujourd'hui pour crypté mes variables.
- Pour la récupération des données j ai bien compris mais c'est vrai que j ignorais si l'on pouvait récupéré que quelques données.
- Pour la récupération de données dans des variables j'ai fait plusieur test avec et sans variable (d'où les variables inutilisé).
-En ce qui concerne l'eurreur généré lorsque j'éfféctue mon script il s'agit pas rééllement d'une eurreur le pseudo n'est pas transmi j ai l impression car quand je fait un 'echo $MonPass' j'arrive a voir le mot de passe mais cela ne fonctionne pas avec 'echo $MonLogin'.

En tout cas merci et je sais où vous trouvez si j' ai un souci

Winco07
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012

Bonjour ...

Depuis deux jours que je travaille sur le sujet je me vois dans l'obligation de refaire appel a vous ...
Chui un boulet lol.

Je vous éxplique depuis mardi j'ai regardé le systéme de sécurité md5, j'ai fait quelques test ducoup je l'ai intégré
a mon développement.

J'ai aussi rajouté un systéme de redirection.
Jusque la pas de souci.

Le souci est le suivant :

Lorsque je veux tésté mon login celui ci plante il me sort des erreurs et le pire c'est que c'est pas toujours a la même ligne.
(erreur : limite de temps de 30 s dépassé).

La page de formulaire n'a pa changé mis apart la variable "pseudo" qui devient "Login".

je joins la novelle page de récéption et traitement des données :

<!--pagePasse.php-->
<html>
<head>
<title>Accés page sécurisé</title>
<link rel ="stylesheet" type="text/css" href="background.css">
</head>
<body>
<?php
		include('connect.php');
		$query=mysql_query("select Pass, Login from Membres");
		$ligne=mysql_fetch_array($query);
		$trouver = false;
			if ($_POST['Login'] == '')
			{
				if (md5($_POST['Password'] == ''))
				{
					While ($trouver == false)
					{
						if (md5($ligne['Pass']) == md5($_POST['Password']))
						{
							header('Location: sommaire.html');
							$trouver = true;
							break;
						}
						Else
						{
						$ligne=mysql_fetch_array($query);
						$trouver = false;
						}
					}
					If ($trouver == false)
					{
					echo'Mot de passe ou login invalide';
					?>
					<a href ="frmPagePasse.php"> Se reconnecter </a>
					<?php
					break;
					}
				else 
					header ('location: frmPagePasse.php?msg=Merci de renseigner tous les champs');
				}
			else 
					header ('location: frmPagePasse.php?msg=Merci de renseigner tous les champs');
			}
			mysql_close();
?>
</body>
</html>




Merci
par avance pour votre aide

Winco07
Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
90
Re.

Déjà, il y a un problème dans ta boucle WHILE :
- Si le md5(MotDePasseEnvoyé) = md5(MotDePasseDansLaBase) => Pas d eproblème (tu sors de la boucle).
- Mais si tu te plantes dans le mot de passe, tu auras toujours md5(MotDePasseEnvoyé) <> md5(MotDePasseDansLaBase), et du coup jamais tu ne sortiras de ta boucle...

Accessoirement :
- Dans le cas d'une corrsepondance, ça ne sert à rien de faire un break (tu passes $trouver à true, donc tu sors de ta boucle).
- Tu stockes quoi, dans ta base ?
Parce que là
(md5($ligne['Pass']) == md5($_POST['Password']))
ça veut dire que tu stockes le mot de passe en clair dans ta base (et comparer les md5 n'a pas d'intérêt). Si tu stockes les md5(mots de passe), à ce moment là il faut comparer
($ligne['Pass'] == md5($_POST['Password']))

- Affine ta requête :
$query=mysql_query("select Pass, Login from Membres where Login = $_POST['Login']");
. tu ne récupèreras que la ligne correspondant au Login (ça t'évite de te palucher tous les enregistrements de ta table pour rien).
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012

re

Ce que j ai voulu faire c'est en claire :

Tester si il y avait quelque chose dans mes variables
Le while signifie que tant que le booleen n'est pas a vrai on ne sort pas de la boucle
le "if" (md5($ligne['Pass']) == md5($_POST['Password'])) veut dire que si les mots de passes concordent on est redirigé vers une autre page sinon on passe a la ligne suivante.

2.)Mes mots de passes sont bien stocké en claire mais je ne trouve pas le moyen de les cryptés dans ma base mais ca je finirais bien par trouvé.

3.)Merci pour la requéte je n y avais vraiment pas pensé.
Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
90 >
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012

Le while signifie que tant que le booleen n'est pas a vrai on ne sort pas de la boucle
Oui, mais SI le login envoyé est mauvais, le booléen ne passera jamais à TRUE et tu restes dans la boucle jusqu'à épuisement ! Au minimum, rajoute une condition à ton while
WHILE ( (!$trouver) AND ( $ligne=mysql_fetch_array($query) ) {
...
}

Comme ça, au pire, quand tu as fini de scanner ta table, tu sors quand-même...

2.)Mes mots de passes sont bien stocké en claire mais je ne trouve pas le moyen de les cryptés dans ma base mais ca je finirais bien par trouvé.
Pour les coder dans la table il "suffit" de rajouter le md5(motdepasse) dans ton INSERT.
Et si tu as déjà alimenté ta table :
1. Fais une sauvegarde de la table.
2. Crée une page php du genre :
<Connexion à la base>
$query = mysql_query ("SELECT ID, MotDePasse from MaTable") or die ("Erreur de requête : ".mysql_error());
while ($result = mysql_fetch_array ($query)) {
   $update = mysql_query('UPDATE MaTable SET MotdePasse='.md5($result['MotDePasse']).' WHERE id='.$result['ID']) or die ("Erreur à la mise à jour : ".mysql_error());
}

C'est juste pour voir la logique du truc, hein... C'est à adapter selon tes données (il faudrait sans doute aussi faire des contrôles de sécurité...)
Messages postés
118
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 octobre 2012

Merci pour tes conseils je vais regardé tout ca cet aprem et faire au mieu.

En tout cas merci pour ton aide.