Probleme : creer une page de connexion php

catsu -  
 catsu -
Bonjour,
Je suis entrain de créer un site dynamique pour un projet. J'ai ma base de donnée sur PhpMyAdmin et je voudrais qu'on puisse se connecter sur mon site (soit un admin soit un membre). Mais voila, quand je rentre les logins ou mots de passe, il me revoit sur la page de connexion dù surement aux "header" dans mes "else". Mais ça veut dire qu'un "if" ne se fait pas, et je vois pas du tout lequel c'est ni comment résoudre cela =(
.
.
Voila mon formulaire de connexion sur ma page d'accueil (index.php) :
<body>
...
<form method="post" action="pages/login.php">
Login : <input type="text" name="login" /><br/>
Mot de passe : <input type="password" name="pass" /><br/>
<input id="connecter" type="submit" value="connecter" />
</form>
...
</body>
.
.
et ma page de vérification de connexion (login.php) :

<?php
session_start();
if (isset($_POST)) {
$login = $_POST['login'];
$password = $_POST['pass'];
require("connect.php");
$connexion=mysql_pconnect(SERVEUR,NOM,PASSE);
if((strlen($login)!=0) && (strlen($password)!=0)) {
$q_login = mysql_query("SELECT * FROM Adherents WHERE login='".$login."' AND mdp ='".$password."'");
if ($q_login) {
$_SESSION["m_login"] = $login; }
else {header("Location: ../index.php");exit();}}
else {header("Location: ../index.php"); exit();}}
else {header("Location: ../index.php");exit();}
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>...</head>
<body>
<a href="MesDonnes.php">Voir Mes données</a>
<a href="MesCompets.php">Voir Mes Competitions</a>
<a href= "Deconnect.php">Me deconnecter</a>
</body>
</html>
.
.
Voila, si quelqu'un à une idée d'où vient le problème, parce que ça fait plusieurs heures que je suis la dessus en tournant en rond XD
Merci

4 réponses

ReDLoG
 
Je pencherais pour une connexion à MySQL déficiente et/ou une requête avec une erreur de syntaxe. A modifier comme ceci pour débuguer le script :
<?php
session_start();
if (isset($_POST['login'] && isset($_POST['pass'])) {
	// Penser à protéger les données provenant du formulaire en évitant
	// une injection SQL par vérification des magic quotes activés ou désactivés
	$login = trim($_POST['login']);
	$password = trim($_POST['pass']);

	if((strlen($login)!=0) && (strlen($password)!=0)) {
		require("connect.php");
		// A eviter absolument sauf si necessaire la connexion persistante a MySQL avec mysql_pconnect()
		$connexion=mysql_pconnect(SERVEUR,NOM,PASSE)or die('Impossible de se connecter à MySQL!');
		// Pas necessaire de faire une requete sur TOUS les champs, on a juste besoin de verifier sur login et mot de passe
		$q_login = mysql_query("SELECT login,mdp FROM Adherents WHERE login='".$login."' AND mdp ='".$password."'")or die('Erreur dans la requête SQL : '.mysql_error());
		if (mysql_num_rows($q_login) != 0) {
			$_SESSION["m_login"] = $login;
		} else {
			header("Location: ../index.php");
			exit();
		}
	} else {
		// Ici il vaudrait mieux rediriger sur le formulaire d'identification car erreur dans login et/ou mot de passe
		header("Location: ../index.php");
		exit();
	}
} else {
	header("Location: ../index.php");
	exit();
}
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>...</head>
<body>
<a href="MesDonnes.php">Voir Mes données</a>
<a href="MesCompets.php">Voir Mes Competitions</a>
<a href= "Deconnect.php">Me déconnecter</a>
</body>
</html>
0
catsu
 
Merci de ta réponse, j'ai fais les quelques modifications mais rien n'a changé :'(

page login.php :
<?php
session_start(); 
if (isset($_POST['login']) && isset($_POST['pass'])) {
	$login = trim($_POST['login']);
	$password = trim($_POST['pass']);
	if((strlen($login)!=0) && (strlen($password)!=0)) {
		require("connect.php");
		mysql_connect(SERVEUR,NOM,PASSE);
		mysql_select_db(BASE);
		$q_login = mysql_query("SELECT login, mdp FROM Adherents WHERE login=\".$login.\" AND mdp=\".$password.\" ");
		if (mysql_num_rows($q_login) != 0) {
			$_SESSION["login"] = $login;
			if ($_SESSION['login'] = "ADMIN") {header('Location: admin.php'); exit();}
			else {header('Location: membre.php'); exit();}}
		else {header("Location: ../index.php");exit();}}
	else {header("Location: ../index.php"); exit();}}
else {header("Location: ../index.php");exit();} 
?> 



et toujours dans ma page pour se connecter, index.php :

<form method="post" action="pages/login.php">
	Login : <input type="text" name="login"/>
	Mot de passe : <input type="password" name="pass"/> 
	<input id="connecter" type="submit" value="connecter"/> 
</form>


Mais même en mettant les "or die" il ne m'affiche aucune erreur et me revoie a ma page de connexion (index)... pourquoi ne veut il pas me renvoyer sur ma page admin ou membre ? :'(
En plus, quand j'enlève le header index (que j'enlève les else du coup), il me met que le chemin vers index n'existes pas O.o même sans les headers, il veut me retourner vers index ! :O
.
J'ai tenté de mettre des echo avec des nombres pour voir jusqu'à ou il allé, et il n'allait pas au delà de if (mysql_num_rows($q_login) != 0) :/
Pourtant quand je fais ma requête sur ma base de donnée, j'ai bien une ligne. Du coup, je sais plus quoi faire :(
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Salut ...

Pour débugger, tu dois mettre les header en commentaire, et mettre un echo a la place, pour savoir dans quel else il entre, et ainsi, connaitre la condition qui n'est pas vérifié ...

Mettez en résolu quand c'est résolu -.- ...
0
catsu
 
Salut JooS, oui c'est ce que j'avais fais et c'est comme cela que j'ai vu que c'était mon dernier if qui ne se faisait pas =)
Mais finalement, j'ai tout repris a zéro, et cela fonctionne ^^
Par contre, je sais pas comment j'ai fait XD


Ma page index qui me sert de page de connexion :

<?php session_start();?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>...</head>
<body>
<?php 
	if( $_SESSION["login"] == ""){echo "
		<form method=\"post\" action=\"pages/login.php\">
			<p class=\"milieu\"> Login : <input type=\"text\" name=\"login\"/>
			Mot de passe : <input type=\"password\" name=\"pass\"/> 
			<input id=\"connecter\" type=\"submit\" value=\"connecter\"/> </p>
		</form> ";}
?>
	
<?php 
	if( $_SESSION["login"] == "ADMIN"){echo "<p class=\"gauche\"> <a href=\"pages/competition.php\"> Compétitions </a><br/>
	<a href=\"pages/deconnexion.php\"> Deconnexion </a></p>
	<p class=\"efface\"> </p>"; } 
?>

</body>
</html> 



et ma page login, qui permet de vérifier les identifiants :


<?php
session_start(); 
if (isset($_POST['login']) && isset($_POST['pass'])) {
	$login = trim($_POST['login']);
	$password = trim($_POST['pass']);
	if((strlen($login)!=0) && (strlen($password)!=0)) {
		require("connect.php");
		mysql_connect(SERVEUR,NOM,PASSE);
		mysql_select_db(BASE);
		$q_login = mysql_query("SELECT login, mdp FROM Adherents WHERE login=\".$login.\" AND mdp=\".$password.\" ");
		if ($q_login) {
			$_SESSION["login"] = $login;}}
header("Location: ../index.php");exit();}
?>


Voila, si sa sert à quelqu'un, en tout cas de cette manière, pour moi, ça marche ^^
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Ok !
Est tu sure que ça fonctionne ?!
Je dirais que le problème venait du cote que t'as utiliser dans ta requête ...

$req = 'SELECT * FROM Adherents WHERE login=\''.$login.'\' AND mdp =\''.$password.'\'';  
mysql_query($req);
0
catsu
 
J'ai remarqué hier soir, que j'avais pas totalement réglé le problème, le truc c'est qu'en mettant n'importe quoi comme mdp et login, il me connecte quand même :/
Pourtant ma requête est bonne, quand je la fait dans ma base de donnée, il me ressort une ligne avec le login et le mdp...
Du coup je pense qu'en faisant if ($q_login) il me connecte vu qu'il y a une réponse et que le reste se fait alors qu'avec le (mysql_num_rows($q_login) != 0) il me bloc la et me renvoi direct sur la page index sans se connecter.... pourtant il y a une ligne a ma requête ! :O
0
catsu
 
Problème réglé (enfin, cette fois j'espère ^^)

<?php
	session_start();
	if (isset($_POST['login']) && isset($_POST['mdp'])) {
		$login = trim($_POST['login']); 
		$mdp = trim($_POST['mdp']);
		if((strlen($login)!=0) and (strlen($mdp)!=0)) {
			require("connect.php");
			mysql_connect(SERVEUR,NOM,PASSE); 
			mysql_select_db(BASE); 
			$result = mysql_query("SELECT NumAdherent, login, mdp FROM Adherents WHERE login = \"$login\" ");
			if ($result){
				if (mysql_num_rows($result) != false) { 
				$row = mysql_fetch_array($result);
				if ($_POST["mdp"] == $row["mdp"]){
					$_SESSION["mdp"] = $mdp;
					$_SESSION["login"] = $login;}}}}}
	header("Location: ../index.php"); exit(); 
?>
0