Page 1 sur 1

Problème connexion espace membre

Posté : 01 déc. 2010, 20:50
par vindian
Bonjour,

Je souhaite créer un espace membre pour mon site, j'ai ainsi 4 pages php :
- index.php : qui demande le login/mdp a l'utilisateur s'il n'est pas inscrit : l'orienter vers inscription.php.
- inscription.php : qui demande a l'utilisateur de s'inscrire (login,mdp,mail...) et qui sauvegarde les données dans une base de donnée SQL,
- membre.php : page reservé au membre,
- deconnexion.php : pour se deconnecter.

Cependant je rencontre un petit problème: mes pages fonctionnent correctement mais quand je veux me connecter (sur la page index donc), impossible de s'authentifier "La connexion avec le serveur a été réinitialisée pendant le chargement de la page."
Sur la base de donnée les utilisateurs inscrits apparaissent bien.
Merci de votre aide. :)

Voici le code de la page index.php :
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

		$base = mysql_connect ('localhost', 'root', '');
		mysql_select_db ('test', $base);

		// on teste si une entrée de la base contient ce couple login / pass
		$sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		$data = mysql_fetch_array($req);

		mysql_free_result($req);
		mysql_close();

		// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: membre.php');
			exit();
		}
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
		elseif ($data == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
}
?>

<html>
<head>
<title>Accueil</title>
</head>

<body>


<p align="center">
<font face="Verdana" size="2">
<h3>Connexion à l'espace membre </h3><br />
<form action="index.php" method="POST" id="Connexion">

<label>Login:<br><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></label><br>
<label>Password:<br><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></label><br><br>

<input type="submit" name="connexion" value="Connexion">
<br><br>
<a href="inscription.php">Vous inscrire</a>

</form>
</font></p>

</form>

<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
inscription.php :
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
		// on teste les deux mots de passe
		if ($_POST['pass'] != $_POST['pass_confirm']) {
			$erreur = 'Les 2 mots de passe sont différents.';
		}
		else {
			$base = mysql_connect ('localhost', 'root', '');
			mysql_select_db ('test', $base);

			// on recherche si ce login est déjà utilisé par un autre membre
			$sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
			$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			$data = mysql_fetch_array($req);

			if ($data[0] == 0) {
				$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string($_POST['pass']).'", "'.mysql_escape_string($_POST['mail']).'")';
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

				session_start();
				$_SESSION['login'] = $_POST['login'];
				header('Location: membre.php');
				exit();
			}
			else {
				$erreur = 'Un membre possède déjà ce login.';
			}
		}
	}
	else {
		$erreur = "Assurez vous d'avoir rempli tout les champs.";
	}
}
?>
<html>
<head>
<title>Inscription</title>
</head>

<body>

<font face="Verdana" size="2">

<h3>Inscrivez vous </h3>

<form action="inscription.php" method="post">
<TABLE BORDER=0 CELLSPACING=5>
<tr>
<label><td>Login : </td><td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td><br /><br /></label>
</tr>
<tr>
</label><td>Mot de passe : </td><td><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td><br /><br /></label>
</tr>
<tr>
</label><td>Confirmation du mot de passe : </td><td><input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"></td><br /><br /></label>
</tr>
<tr>
</label><td>Adresse mail : </td><td><input type="text" name="mail" value="<?php if (isset($_POST['mail'])) echo htmlentities(trim($_POST['mail'])); ?>"></td><br /><br /></label>
</tr>
<td><input type="submit" name="inscription" value="Inscription"></td>
</form>
</font>

<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>
membre.php
<?php
session_start();
if (!isset($_SESSION['login'])) {
	header ('Location: index.php');
	exit();
}
?>

<html>
<head>
<title>Espace membre</title>
</head>

<body>
Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?>!<br />
<a href="deconnexion.php">Déconnexion</a>
</body>
</html>
deconnexion.php
<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>
table membre SQL :
CREATE TABLE membre(
id int(11) NOT NULL auto_increment,
login varchar(40) NOT NULL,
password varchar(40) NOT NULL,
mail varchar(40) NOT NULL,
PRIMARY KEY (id)
);

Re: Problème connexion espace membre

Posté : 01 déc. 2010, 22:15
par damaskinos
Salut,

Pour ton problème, c'est normal quand tu insères, tu n'appliques pas md5 sur le mot de passe par contre à la comparaison tu l'appliques.

Inscription
 $sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string($_POST['pass']).'", "'.mysql_escape_string($_POST['mail']).'")';  // pas de md5
Login
 $sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"'; // md5
Quelques remarques sur ton script:
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])))
revient à faire
if ( !empty($_POST['login']) &&  !empty($_POST['pass']))
Voilà bonne chance

Re: Problème connexion espace membre

Posté : 01 déc. 2010, 22:57
par vindian
Bonsoir,
Merci pour ta réponse,
malgré les modifications j'ai toujours le même soucis (j'ai retiré le md5).
Je ne vois pas d'ou pourrait venir l'erreur :|

Re: Problème connexion espace membre

Posté : 01 déc. 2010, 23:06
par vindian
Revoici mon code modifié (j'ai trouvé quelque erreurs)

index.php
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ( !empty($_POST['login']) &&  !empty($_POST['pass'])){

		$base = mysql_connect ('localhost', 'root', '');
		mysql_select_db ('test', $base);

		// on teste si une entrée de la base contient ce couple login / pass
		$sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass="'.mysql_escape_string($_POST['pass']).'"';
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		$data = mysql_fetch_array($req);

		mysql_free_result($req);
		mysql_close();

		// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data[0] == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: membre.php');
			exit();
		}
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
		elseif ($data [1] == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
}
?>

<html>
<head>
<title>Accueil</title>
</head>

<body>


<p align="center">
<font face="Verdana" size="2">
<h3>Connexion à l'espace membre </h3><br />
<form action="index.php" method="POST" id="Connexion">

<label>Login:<br><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></label><br>
<label>Password:<br><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></label><br><br>

<input type="submit" name="connexion" value="Connexion">
<br><br>
<a href="inscription.php">Vous inscrire</a>

</form>
</font></p>

</form>

<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
membre.php
<?php
session_start();
if (!isset($_SESSION['login'])) {
	header ('Location: index.php');
	exit();
}
?>

<html>
<head>
<title>Espace membre</title>
</head>

<body>
Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?>!<br />
<a href="deconnexion.php">Déconnexion</a>
</body>
</html>
deconnexion.php
<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>
inscription.php
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
	
	if ( !empty($_POST['login']) &&  !empty($_POST['pass']) && !empty($_POST['pass_confirm'])
	{
		// on teste les deux mots de passe
		if ($_POST['pass'] != $_POST['pass_confirm']) {
			$erreur = 'Les 2 mots de passe sont différents.';
		}
		else {
			$base = mysql_connect ('localhost', 'root', '');
			mysql_select_db ('test', $base);

			// on recherche si ce login est déjà utilisé par un autre membre
			$sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
			$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			$data = mysql_fetch_array($req);

			if ($data[0] == 0) {
				$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string($_POST['pass']).'", "'.mysql_escape_string($_POST['mail']).'")';
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

				session_start();
				$_SESSION['login'] = $_POST['login'];
				header('Location: membre.php');
				exit();
			}
			else {
				$erreur = 'Un membre possède déjà ce login.';
			}
		}
	}
	else {
		$erreur = "Assurez vous d'avoir rempli tout les champs.";
	}
}
?>
<html>
<head>
<title>Inscription</title>
</head>

<body>

<font face="Verdana" size="2">

<h3>Inscrivez vous </h3>

<form action="inscription.php" method="post">
<TABLE BORDER=0 CELLSPACING=5>
<tr>
<label><td>Login : </td><td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td><br /><br /></label>
</tr>
<tr>
</label><td>Mot de passe : </td><td><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td><br /><br /></label>
</tr>
<tr>
</label><td>Confirmation du mot de passe : </td><td><input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"></td><br /><br /></label>
</tr>
<tr>
</label><td>Adresse mail : </td><td><input type="text" name="mail" value="<?php if (isset($_POST['mail'])) echo htmlentities(trim($_POST['mail'])); ?>"></td><br /><br /></label>
</tr>
<td><input type="submit" name="inscription" value="Inscription"></td>
</form>
</font>

<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>
table sql
CREATE TABLE membres_tbl (
   id int(11) NOT NULL auto_increment,
   login varchar(40) NOT NULL,
   pass varchar(40) NOT NULL,
   mail varchar(40) NOT NULL,
   PRIMARY KEY (id),
   );

Re: Problème connexion espace membre

Posté : 02 déc. 2010, 00:17
par damaskinos
Donc c'est réglé ou pas ?

Si oui oublie pas de marquer résolu!

Re: Problème connexion espace membre

Posté : 02 déc. 2010, 00:20
par vindian
Non toujours pas

Re: Problème connexion espace membre

Posté : 02 déc. 2010, 02:22
par devlop78
le nom de tes tables semble différer. tu as membre d'un coté et membre_tbl d'un autre. Est-ce une erreur de saisie ?

Re: Problème connexion espace membre

Posté : 02 déc. 2010, 21:03
par vindian
Bonjour,
C'est une erreur de ma part, la table s'appelle 'membre'.
Dans la page index.php j'ai rajouté
mysql_close($base);

Maintenant lorsque je me connecte j'ai : "Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion."
soit (dans index.php)
// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data[1] == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: membre.php');
			exit();
		
		}
		
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
		elseif ($data [0] == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
Merci de votre aide

Re: Problème connexion espace membre

Posté : 02 déc. 2010, 22:05
par damaskinos
Fait un
var_dump($data);
Pour voir ce que tu as dans data. As-tu plus qu'un membre avec le même identifiant ?