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


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