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 ?

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
313
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
58
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
58
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
58
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