Problème session php [espace membre]

Résolu/Fermé
winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012 - 3 juin 2008 à 16:11
winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012 - 5 juin 2008 à 15:15
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
A voir également:

5 réponses

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
3 juin 2008 à 18:36
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)
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
3 juin 2008 à 22:56
 $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 :)
0
winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012
4 juin 2008 à 08:50
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
0
winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012
5 juin 2008 à 11:42
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
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
5 juin 2008 à 13:57
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).
0
winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012
5 juin 2008 à 14:35
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é.
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89 > winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012
5 juin 2008 à 14:55
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é...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
winco07 Messages postés 117 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 5 octobre 2012
5 juin 2008 à 15:15
Merci pour tes conseils je vais regardé tout ca cet aprem et faire au mieu.

En tout cas merci pour ton aide.
0