Problème de redirection

Petit nouveau ! | 3 Messages

17 juin 2011, 13:56

Bonjour,
j'ai un problème de redirection, j'ai mis un contrôle sur mon système de connexion mais il me redirige sur la page d'erreur alors que les identifiants sont bons.. Je pense que ca doit être une erreur d'implémentation.. help :?

La page traitement_login :
<?php
if(!empty($_POST["login"]) && (!empty($_POST["mdp"]))) 
{	
	include('inc_connexion.php');
	$maConnexion=connexion();
	if($maConnexion != 0) 
	{
		$login=$_POST["login"]; //On récupere le login entré par l'utilisateur..
		$mdp=$_POST["mdp"]; //On récupere le mdp entré par l'utilisateur..
		$requete1 = "select * from utilisateur where login='$login' and mdp='$mdp'"; //On exécute une requete pour vérifier si les ID rentré sont bien présents dans la base..
		$resultat= mysql_query($requete, $maConnexion);
		$nbResultat= mysql_num_rows($resultat);
		$requete2 = "select actif from utilisateur where login='$login'"; //On exécute une requete pour voir si le compte est actif ou non
		$res = mysql_query($requete2) or die('Erreur SQL !<br>'.$requete2.'<br>'.mysql_error());
		$row = mysql_fetch_array($res);
			if ($nbResultat != 0)
			{
				if ($row['actif'] = 0)
				{
					header("location:Erreur.php?message3=noActif");
				}
				else
				{
				session_start();		
				session_register("login");
				header("location:index.php");
				}
			}
			else
			{
				header("location:Erreur.php?message4=erreurId");
			}
	}
	else
	{
		header("location:Erreur.php?message1=erreurConnexion");
	}
}
else
{
	header("location:Erreur.php?message2=champVide");
}
?>
Et la page d'erreur :
						<?php
							if(isset($_GET["message4"]))
							{
								echo "<center><font color='red'>Les identifiants sont incorrects</font></center><br />";
							}
							if(isset($_GET["message2"]))
							{
								echo "<center><font color='red'>Veuillez remplir tous les champs</font></center><br />";
							}
							if(isset($_GET["message1"]))
							{
								echo "<center><font color='red'>Erreur de connexion</font></center><br />";
							}
							if(isset($_GET["message3"]))
							{
								echo "<center><font color='red'>Votre compte n'est pas activé.</font></center><br />";
							}
						?>

ViPHP
ViPHP | 2577 Messages

17 juin 2011, 14:22

Bonjour,

Malheureusement tu n'indiques pas l'erreur affichée dans la page d'erreur.

Il n'y a pas d'erreur visible au premier coup d'oeil.
Par contre :
- pourquoi faire 2 accès à la table utilisateur alors que le premier te fournit déjà le top actif
- pourquoi faire une select * alors qu'un select actif suffirait.
- il faut utiliser la fonction mysql_real_escape_string. (cf php-debutant/modification-son-propre-mo ... 59215.html)
- pourquoi mettre des noms différents message1... alors que tu pourrais tester le contenu pour voir quelle est l'erreur.

Petit nouveau ! | 3 Messages

17 juin 2011, 14:38

Je n'ai pas bien compris votre lien, je ne vois pas trop le rapport avec mon problème.
Je ne cherche pas à modifier mon mot de passe, je veux juste me connecter.
La base de données contient les ID, mais lorsque je veux me connecter, il me redirige sur la page d'erreur avec l'erreur numéro 4.
Je ne comprend pas pourquoi, je rempli pourtant bien les conditions émises :
	<?php
if(!empty($_POST["login"]) && (!empty($_POST["mdp"])))  //Si les champs ont bien été remplis..
{	
	include('inc_connexion.php');
	$maConnexion=connexion();	//On se connecte à la base..
	if($maConnexion != 0) 
	{
		$login=$_POST["login"]; //On récupere le login entré par l'utilisateur..
		$mdp=$_POST["mdp"]; //On récupere le mdp entré par l'utilisateur..
		$requete1 = "select actif from utilisateur where login='$login' and mdp='$mdp'"; //On exécute une requete pour vérifier si les ID rentré sont bien présents dans la base..
		$resultat= mysql_query($requete, $maConnexion);
		$nbResultat= mysql_num_rows($resultat);
		$row = mysql_fetch_array($resultat);

			if ($nbResultat != 0 && $row['actif'] != 0) //Si les ID sont présents dans la base..
			{
				{
				session_start();		
				session_register("login");
				header("location:index.php");
				}
			}
			else
			{
				header("location:Erreur.php?message4=erreurId");
			}
	}
	else
	{
		header("location:Erreur.php?message1=erreurConnexion");
	}
}
else
{
	header("location:Erreur.php?message2=champVide");
}
?>
J'ai également modifié mon code comme vous me l'avez fais remarquer, deux accès à la table utilisateur était inutile.

ViPHP
ViPHP | 2577 Messages

17 juin 2011, 15:06

Dans un premier temps, ajoute :
echo $nbResultat,'/',$row['actif'];
avant :
if ($nbResultat != 0 && $row['actif'] != 0)

Cela va provoquer une erreur sur l'appel à header(), mais tu sauras pourquoi tu ne rentre pas dans le if.

Pour le lien, c'est pour que tu constates le problème liés à la non utilisation de mysql_real_escape_string() avec la possibilité de te connecter sans connaitre le mot de passe.