Header location ne fonctionne pas

Par Jeremy60500, il y a 10 ans


Bonjour,

Je développe actuellement un site en architecture MVC.
Localement, je développe sous MAC et avec une architecture MAMP PRO. J'ai activé l'option "output_buffering = 4096", dans le fichier php.ini.

Le problème étant que les redirections "header("Location:XXXX.XXX");" ne fonctionne pas lorsque le site est hébergé en ligne (mon hébergeur étant 1&1).
Je dispose d'un bref formulaire de login :

<img src="images/logologin.png"/><br><br> <form class='login-form' action='index.php?page=connexion' method='POST'> <input type="text" placeholder="Identifiant" id="login" name="login"> <input type="password" placeholder="Mot de passe" id="password" name="password"> <button>Se connecter</button>[]()

Et ma fonction "connexion.php" :

<?php /*connexion.php*/ ?> <?php if(isset($_GET['out'])){$_SESSION=array(); header('Location:index.php'); exit; } if(empty($_POST['login']) AND !empty($_POST['password'])) { $password=$_POST['password']; $_SESSION['__MESSAGE__'][] = "Identifiant manquant."; header ("Location:index.php"); } else if(!empty($_POST['login']) AND empty($_POST['password'])) { $login=$_POST['login']; $_SESSION['__MESSAGE__'][] = "Mot de passe manquant."; header ("Location:index.php"); } else if(empty($_POST['login']) AND empty($_POST['password'])) { $_SESSION['__MESSAGE__'][] = "Identifiant et mot de passe manquant."; header ("Location:index.php"); } else { if(!empty($_POST['login']) && !empty($_POST['password'])){ $login=$_POST['login']; $password=$_POST['password']; $sql = 'SELECT IdUtilisateur,Password,Nom,Prenom FROM utilisateur WHERE Login= :login'; $stmt = $db->prepare($sql); $stmt->execute(array(':login'=>$login)); //y a-t-il un utilisateur ayant ce login ? if($stmt->rowCount()==1){ $utilisateur = $stmt->fetch(PDO::FETCH_ASSOC); if(md5($password)==$utilisateur['Password']){ //stocke les valeurs dans la session $_SESSION['id']=$utilisateur['IdUtilisateur']; $_SESSION['nom_connexion']=$login; $_SESSION['nom']=$utilisateur['Nom']; $_SESSION['prenom']=$utilisateur['Prenom']; //cherche les rôles attribués à l'utilisateur $sql = 'SELECT * from role JOIN attribution ON attribution.idR = role.idRole WHERE attribution.idU = :id'; $stmt=$db->prepare($sql); $stmt->execute(array(':id'=>$_SESSION['id'])); //on attribue le role "connecté" par défaut $_SESSION['roles'][]=1; //on ajoute les rôles dans la session while($r = $stmt->fetch(PDO::FETCH_ASSOC)){ $_SESSION['roles'][] = $r['idRole']; }header("Location:index.php"); exit; }//if mot de passe }// if nom utilisateur }//if paramètres passés $_SESSION['__MESSAGE__'][] = "Identifiants incorrects..."; header("Location:index.php"); exit; } ?>

Merci de votre aide.

1 réponse

miniapple, il y a 10 ans

@Jeremy60500
N'oublie pas de metter un exit; après tes header pour qu'il arête d'exécuter le reste du script.