Redirection si non connecté [PHP]

Bonjour,
je cherche un moyen de rediriger mon utilisateur vers ma page : "connexion.php" s'il essaye de se rendre sur une page qui a besoin d'une connexion, ex: (monprofil.php).

Actuellement ce qui se passe quand il rejoint "monprofil.php" (quand non connecter) c'est qu'une page blanche apparait puis, plus rien.

De la même manière, si mon utilisateur est connecté et qu'il essaye de rejoindre la page "connexion.php" j'aimerai qu'il soit redirigé vers la page "monprofil.php"

En gros j'essaye de trouver un moyen pour vérifier si mon utilisateur est bien connecter à mon site web.

Merci d'avance.

1 réponse

  1. Modérateur
    Bonjour,

    Il te faut utiliser les SESSION

    Lorsque l'utilisateur se connecte .. tu créés une variable de session,
    par exemple
    $_SESSION['id_user'] = $id_du_membre;
    


    puis dans tes différentes pages.. tu vérifies que cette variable existe
    sinon tu rediriges
     if(empty($_SESSION['id_user'])){
       //redirection
       header('location : index.php');
       exit();
    }
    


    NB : Tu n'oublieras pas, bien entendu, d'activer les sessions sur toutes tes pages
     session_start();
    


    1. Pour le session_start() c'est bon. Mais, la variable ID_USER est stocké sur ma base de donnée non ?
      Voici le code de "connexion.php", peut tu me donner ton code adapté à celui de ma page s'il-te-plait ?

      <?php
      session_start();
      
      $bdd = new PDO('mysql:dbname=MaBaseDeDonne;host=MonHost', monNomUtilisateur', 'MonMotdePasse');
      
      if(isset($_POST['formconnexion'])) {
         $mailconnect = htmlspecialchars($_POST['mailconnect']);
         $mdpconnect = sha1($_POST['mdpconnect']);
         if(!empty($mailconnect) AND !empty($mdpconnect)) {
            $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ?");
            $requser->execute(array($mailconnect, $mdpconnect));
            $userexist = $requser->rowCount();
            if($userexist == 1) {
               $userinfo = $requser->fetch();
               $_SESSION['id'] = $userinfo['id'];
               $_SESSION['pseudo'] = $userinfo['pseudo'];
               $_SESSION['mail'] = $userinfo['mail'];
               header("Location: profil.php?id=".$_SESSION['id']);
            } else {
               $erreur = "Mauvais mail ou mot de passe !";
            }
         } else {
            $erreur = "Tous les champs doivent être complétés !";
         }
      }
      ?>
      <html>
         <head>
            <title>Se connecter</title>
            <meta charset="utf-8">
         </head>
         <body>
            <div align="center">
               <h2>Connexion</h2>
               <br /><br />
               <form method="POST" action="">
                  <input type="email" name="mailconnect" placeholder="Mail" />
                  <input type="password" name="mdpconnect" placeholder="Mot de passe" />
                  <br /><br />
                  <input type="submit" name="formconnexion" value="Se connecter !" />
               </form>
               <?php
               if(isset($erreur)) {
                  echo '<font color="red">'.$erreur."</font>";
               }
               ?>
               <p>Vous n'avez pas de compte ? Cliquez <a href="register.php" rel="nofollow noopener noreferrer" target="_blank">ici</a></p>
            </div>
      
         </body>
      </html>
      
      
      

      Merci
      Je débute en PHP.
    2. Modérateur
      @emiliengbdne connaissant pas ton code .. moi, je ne t'avais donné qu'un exemple ....il sufft de l'adapter à tes besoins....

      et donc par exemple, utiliser les variables que tu as déjà créé
      $_SESSION['id'] = $userinfo['id'];
      
    3. Modérateur
      @jordane45Au passage... vu que tu utilises PDO, penses à y activer la gestion des erreurs
      https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      Et ne plus utiliser le rowcount mais plutôt faire un fetchAll du résultat de la requête puis un COUNT dessus.

      $sql = "SELECT * FROM membres WHERE mail = ? AND motdepasse = ?";
      $datas = array($mailconnect, $mdpconnect);
      try{
            $requser = $bdd->prepare($sql);
            $requser->execute($datas);
      }catch(Exception $e){
        echo "erreur : ".$e->getMessage();
      }
      
      //on stocke le resultat de la requete dans un array
         $resultats =   $requser->fetchAll();
      
       //on compte le combre de résultats si $resultat n'est pas vide
       $userexist = !empty($resultats) ? count($resultats) : 0;
      


      Tu peux jeter un oeil ici pour comprendre comment je fait pour "compter"
      http://www.manuelphp.com/php/language.operators.comparison.ternary.php

      .