Problème Header PHP

Résolu/Fermé
XecK Messages postés 385 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 - 12 juil. 2012 à 16:52
XecK Messages postés 385 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 - 13 juil. 2012 à 14:06
Bonjour,
mon code PHP ne marche pas comme je le souhaite :

$reponse = $bdd->prepare('SELECT * FROM Adherent WHERE nom = :nom AND prenom = :prenom');
$reponse->execute(array('nom' => $nom, 'prenom' => $prenom));

while ($donnees = $reponse->fetch())
{
if ($donnees['mdp']==$mdp)
{

$_SESSION['statut']=$donnees['fonction'];

$_SESSION['nom']=$nom;

$_SESSION['prenom']=$prenom;

$_SESSION['id']=$donnees['idAdherent'];

$_SESSION['connecte']="on";

header("Location: message.php?err=Connecté");
}
else
{
header("Location: message.php?err=Mot%20de%20passe%20incorrect");
}
}
$reponse->closeCursor();
header("Location: message.php?err=Utilisateur%20inexistant");


Ce n'est pas un problème de variable, ni de condition, mais un problème de redirection : Si je rentre les bonnes données, la session ($_SESSION) est bien mise à jour, On rentre donc bien dans le if, je devrais être redirigé vers la page message.php?err=Connecté.
Pourtant, je suis redirigé vers la page Location: message.php?err=Utilisateur%20inexistant.

Une idée ?
A voir également:

1 réponse

Utilisateur anonyme
12 juil. 2012 à 22:15
Bonsoir

Deux idées.

La premières, sans rapport direct avec ton problème, serait de faire aussi AND mdp=:mdp dans ta requête. C'est un peu incohérent de faire vérifier certaines informations (nom et prenom) par mysql, et d'autres (le mot de passe) par une boucle php.

La seconde, pour ton problème proprement dit. Tu n'as pas mis de exit() après chacun de tes headers. Résultat, le dernier est toujours envoyé au client.
Car il ne faut pas perdre de vue que ce n'est pas l'instruction header qui fait la redirection. L'instruction header envoie des en-têtes au navigateur du visiteur. S'il y a plusieurs en-têtes qui disent de faire une redirection, le navigateur du client va retenir la dernière. Il faut dont toujours faire un exit après un header('Location: pour être sûr qu'il n'y en aura pas d'autre.
1
XecK Messages postés 385 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 55
Modifié par XecK le 13/07/2012 à 14:07
Merci beaucoup pour cette réponse, j'ai finalement fais un double if :
if ($donnees['mdp']==$mdp)
{
header("Location: message.php?err=Connecté");
}
else if (isset($donnees['mdp']))
{
header("Location: message.php?err=Mot%20de%20passe%20incorrect");
}
else
{
header("Location: message.php?err=Utilisateur%20inexistant");
}

Mais je pense que cela marche aussi avec exit, je pensais à ce genre de problème, mais je ne savais pas comment le résoudre, donc merci pour exit...

PS Désolés pour le double poste, celui-ci n'est pas dans le bon forum^^
0