Bonjour,

Cela me semble simple mais je n'arrive pas à trouver de réponse la dessus! J'aimerai modifié ma balise de connexion dans mon menu, une fois que l'utilisateur s'est identifié et la remplacer par son nom et le bouton "se déconnecter".
Je dois faire ça en PHP, Java?!

Merci le gars!

12 réponses


Xtr3me
Réponse acceptée

C'est exactement ce que j'ai fait sauf que au lieu de mettre le code html j'ai mis le code dans un fichier login.php et logout.php, si j'ai la Session non définie je mets le fichier login qui contient les formulaires de connexions sinon logout qui contient le bouton de déconnexion.

En gros tu mets ton code html dans deux fichier, l'un pour quand l'utilisateur est connecté l'autre quand il ne l'est pas:

Par exemple:

<?php if(!isset($_SESSION[User]){
require 'notconnected.php';
}else{
require 'connected.php';}
?>

C'est déjà plus propre.

Bonjour,
le mieux est de faire ça en PHP, il te suffit de détecter si une personne est connectée.
Si elle est connectée, on affiche le bouton "se déconnecter"
Sinon on affiche le bouton "se connecter"

Tout simplement!

Romanier
Auteur

D'accord. Je suis en MVC, je dois faire ça dans ma fonction je suppose?
Mais quel est le code pour remplacer ma balise du coup?
Merci!

Bonjour, je pense que dans le contrôleur, il faudrait affecter une variable de session (par exemple un booléen) : lors de la connexion il passerait de "false" à "true". Il faut ensuite faire passer la valeur à la vue. A l'endroit de l'affichage du statut de connexion, on teste : si la variable est false, on affiche le bouton "Se connecter", sinon "Se déconnecter".

Bonjour,
J'ai fait un truc similaire, j'ai une barre statique en haut de l'écran qui comporte les champs de connexions et je voulais qu'une fois connecté les informations changent et qu'il y ait seulement déconnecter.
Pour cela dans la vue/dans le layout, tu mets une condition qui vérifie si l'utilisateur est connecté si c'est le cas alors tu fais tel action sinon tu en fais une autre. Je ne sais pas comment tu as gérer tes boutons mais pour mon cas c'est un require d'un fichier login ou logout.
Voici ce que j'ai mis:

<?php if(!isset($_SESSION'User'])){

     require "portions/login.php";
}else{
     require "portions/logout.php";
}; ?>

En gros si la Session 'User' n'est pas définie c'est que l'utilisateur n'est pas connecté donc j'affiche la barre de login avec les champs pour se connecter et le lien pour s'inscrire sinon c'est qu'il est connecté et donc j'affiche la barre avec le se déconnecter.
C'est exactement le même principe pour ce que tu veux faire, tu dois vérifier si la Session 'User' est définie si elle l'est tu affiches le bouton se déconnecter et tu affiches le pseudo de l'utilisateur avec un foreach par exemple(ce qui implique de crée un tableau de données dans le controller et la méthode correspondant à la vue). Si la Session n'est pas définie dans ce cas tu afficheras le bouton se connecter.

En MVC tu n'as pas besoin de gérer ta session.
Si un utilisateur est connecté, ton controller doit te renvoyer cet utilisateur à ta vue. Tu récupéreras un tableau avec ses informations (id, nom, ...). Tu peux donc tester dans ta vue si tu as ce tableau ou non.

Si l'utilisateur n'est pas connecté il n'y aura rien d'envoyer et donc s'il fait un foreach pour afficher le pseudo utilisateur connecté ça va poser problème non ? Enfin c'est comme ça que je le conçois et personnellement ma solution fonctionne donc je ne m'en plainds pas ^^ . La Session 'User' est crée dés lors que l'utilisateur est connecté et est détruite dés qu'il se déconnecte donc on peut trés bien utilisé cette propriété en tant que test et ainsi faire les actions que l'on souhaite selon le cas.

Pourquoi faire un foreach? Tu n'as qu'un utilisateur de connecté. Il te suffit de faire un if empty($user).

En effet ^^ , dans ce cas il faut créer une variable $user dans le Controller correspondant qui récupérera les informations enfin si j'ai bien compris le procédé ^^ . Mais vu qu'une Session 'User' est déjà crée c'est pas plus utile de l'utiliser plutôt que de créer une variable qui contiendra les informations utilisateurs ?

En y réfléchissant de plus près, dans ton cas il va en effet être plus utile de la stocker dans la session car tu veux garder en mémoire les informations de l'utilisateur tant qu'il est connecté. Dans ce cas là il faut donc bien le sauvegarder dans la session.
Pour un autre élément que tu n'aurais récupéré que pour une vue, il te faudra par contre la transmettre via ton controlleur.

Romanier
Auteur

Merci pour vos réponses.
Par contre, je comprends pas quelle fonction je dois créer dans le controlleur.
Vu que je fais ça dans mon layout, dans quels controlleur je fais ma fonction?
Merci les gars.

Romanier
Auteur

J'ai fait un truc extremement moche mais qui marche :

<?php if(!isset($_SESSION'User'])){?>       
        <div id="connexion"> 
                       <div id="partiegauche"></div>
                      <div id="partiedroite">
                <form id="connexionprincipal" name="connexionprincipal" action="<?php echo Router::url( 'users/login'); ?>" method="post">
                                 <?php echo $this->Form->input('login','Identifiant'); ?>
                                 <?php echo $this->Form->input('password','Mot de passe',array('type'=>'password')); ?>
                                 <input type="submit" name="connect" id="connect" value="Ok">
                                </form>
                       </div>                
        </div>              
  <?php }else{ ?>   
        <div id="connexion">
                        <div id="partiegauche"></div>

                        <div id="partiedroite">
                                <div class="textBlancTexth"><a href="<?php echo Router::url('cockpit/posts/index');?>"><?php echo $this->Session->user('login');?></a></div>
                    <div class="textBlancTexth"><a href="<?php echo Router::url('users/logout'); ?>">Se déconnecter</a></div>
                                </div>
                         </div>      
 <?php }; ?>

C'est viable?
Merci