Problème Header PHP

Résolu
XecK Messages postés 386 Date d'inscription   Statut Membre Dernière intervention   -  
XecK Messages postés 386 Date d'inscription   Statut Membre Dernière intervention   -
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
 
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   Statut Membre Dernière intervention   21
 
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
 
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 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
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
 
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 386 Date d'inscription   Statut Membre Dernière intervention   54
 
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   Statut Membre Dernière intervention   21
 
Bonjour,
A mon avis c'est parce que les headers sont dans une boucle while que ça marche pas.
0
XecK Messages postés 386 Date d'inscription   Statut Membre Dernière intervention   54
 
Que puis-je mettre à la place pour que cela marche ?
0
XecK Messages postés 386 Date d'inscription   Statut Membre Dernière intervention   54
 
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   Statut Membre Dernière intervention   21
 
$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