Redirection si non connecté [PHP]

emiliengbd Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
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.




A voir également:

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
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();


0
emiliengbd Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   43
 
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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > emiliengbd Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
ne 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'];
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Au 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

.
0