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 à 18:03
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:03
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:

3 réponses

Utilisateur anonyme
13 juil. 2012 à 00:09
Bonjour

Tu as posté 2 fois. Je t'ai répondu là-bas :
https://forums.commentcamarche.net/forum/affich-25583275-probleme-header-php#top
Remarque : il n'y a absolument aucune raison pour qu'un header ne marche pas dans une boucle while. Ou alors il faut m'expliquer pourquoi.
1
julien1451 Messages postés 168 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 13 juillet 2012 21
13 juil. 2012 à 00:12
J'ai supposé que cela venait de ça car tu casses la boucle. Après je n'ai jamais essayé de le faire car c'est une façon de programmer que j'aime pas trop (mon ancien prof de C qui déteint sur moi :p )
0
Utilisateur anonyme
13 juil. 2012 à 09:45
La fonction header ne casse pas de boucle, car elle n'interrompt pas l'exécution du script. Pour interrompre une boucle, il faut un break ou à la rigueur un return ou un exit, ou provoquer une erreur d'exécution...
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
13 juil. 2012 à 09:56
je pense qu'il faudrais rajouter un exit après chaque header non ?
comme dit le père, si le header n'interrompt pas l'execution du script, alors le script execute bien le bon header, mais une fois sorti de la boucle, il execute le dernier header.

personnellement je n'aurais pas mis de header dans la boucle, ça ne fait pas très propre.

tu devrais séparer le coté sauvegarde des données avec le coté redirection grâce à un if($trouve) par exemple
0
Utilisateur anonyme
13 juil. 2012 à 10:14
C'est ce que je lui ai déjà dit, avec quelques autres remarques, mais il ne semble pas avoir lu ma réponse.
0
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 à tous pour vos réponses, ça marche, j'ai finalement doublé le if pour que cela fonctionne, mais je ne connaissais pas la fonction exit, donc merci beaucoup...

PS Désolés pour le double post, l'autre n'étais pas dans le bon forum
0
julien1451 Messages postés 168 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 13 juillet 2012 21
12 juil. 2012 à 18:16
Bonjour,
A mon avis c'est parce que les headers sont dans une boucle while que ça marche pas.
0
XecK Messages postés 385 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 55
12 juil. 2012 à 19:29
Que puis-je mettre à la place pour que cela marche ?
0
XecK Messages postés 385 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 55
12 juil. 2012 à 19:58
J'ai essayé d'enlever le while : je l'ai remplacé par $donnees = $reponse->fetch();
Ca ne marche toujours pas... (Cela me connecte mais avec le mauvais message toujours).
0
julien1451 Messages postés 168 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 13 juillet 2012 21
Modifié par julien1451 le 13/07/2012 à 00:05
$valid=false; 
$utilisateur_existant=false; 

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

 $utilisateur_exitstant=true; 
} 
$reponse->closeCursor(); 

if($utilisateur_existant==false) 
 header("Location: message.php?err=Utilisateur%20inexistant"); 

if($valid==true) 
{ 
 $_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"); 
}


EDIT : Mettre des espaces dans les urls c'est pas vraiment le top utilise plutôt des _
0