Changement de menu en fonction de son utilisateur

Ce sujet est résolu
Default
,

Bonjour,
Voila je rencontre un petit problème avec mon code.

Ce que je fais

en gros j'ai créé une base de donné avec deux tables users car je veux 2 type d'utilisateur bien distinct sur mon site du coup j'aimerai afficher 3 type de menu diffèrent.
Le 1er quand personne n'est authentifier le menu "unset users",
le menu "users1" quand l'utilisateur de la table users1 est authentifier,
et le menu "users2" quand l'utilisateur de la table users2 est authentifier.

Ce que je veux

Donc je veut inclure sur toute mes page mon menu.php qui dit que si personne n'est authentifier il inclut le "unset users" en revanche si un utilisateur de la table users1 est authentifieril doit inclure le menu "users1" et si c'est un utilisateur de la table users2 qui est authentifier alors il inclut le menu "users2"

Ce que j'obtiens

Je suis débutant et mis appart des pages blanche remplie d'erreur fatal bah je n'ai pas obtenu grand-chose pour le moment^^ donc si quelqu'un aurai la patience et la gentillesse de me montrée comment je pourrait obtenir tout cela, ça me rendrait un grand service.

5 Réponse

17162
,

Tu devrais éviter d'utiliser des espaces dans les noms de fichiers, tel que menu unset.php et également dans les url, tel que choice registration.php.

mais dès que je me connecte en users1 ou users2 je n'ai plus de menu

Probablement parce que tu ne définis pas l'une des bonnes valeur pour la clé auth de la variable $_SESSION, du coup, comme la clé auth existe, mais qu'lle n'a comme valeur ni table users1, ni table users2, aucun condition n'est rempli est par conséquent aucun des 3 fichiers n'est inclu.
J'espère au passage que tu ne nomme aucune de tes tables avec un espace.
Par contre un petit conseil, si les liens qui sont contenus dans la balise nav sont les même pour les 3 menus, ou juste pour les menus des utilisateurs connecté, tu devrais plutôt mettre dans les fichiers distincts les liens qui peuvent changer, car là si tu veux ajouter/modifier/supprimer un des liens qui sont communs, tu devras le faire dans les 3 fichiers, ce qui serait un peu idiot, tu ne crois pas ?

40917
,

Bonjour,
Quel code as-tu déjà fait ?
As-tu déjà réaliser le système de login ?
Comment sais-tu qu'un utilisateur est connecté ?

Default
,

Bonjours carouge10,
Pour tout mon espace membre j'ai suivi le tuto de Grafikart ici "https://www.grafikart.fr/tutoriels/gestion-membre-229"

j'ai donc tout a l'identique niveau php, j'ai juste doubler toute les page et mon bouton s'inscrire redirige l'utilisateur
sur une page lui permettant de choisir s’il veut s'inscrire sur la table 1 ou sur la 2 pareille pour la connexion il choisit de se connecter soit avec la table 1 soit la 2.

pour mon menu la parti que je souhaite modifier est la suivante

<div class="topbar-menu-right">
            <?php if (isset($_SESSION['auth'])): ?>
                <a class="btn" href="account.php">Espace personnelle</a> 
                <a class="btn" href="logout.php">Se déconnecter</a>
        <?php else: ?>
            <a class="btn" href="S'inscrire.php">S'inscrire</a> 
            <a class="btn" href="Se connecter.php">Se connecter</a>
        <?php endif; ?>
        </div>

donc ce que je veut c'est que ça <?php if (isset($_SESSION['auth'])): ?> ça dise ""$_SESSION['auth' = la table""] et que j'inclus le menu pour l'utilisateur de la table en question ça donnerai un truc du genre

<?php if (isset($_SESSION['auth = la table users 1 '])): ?>  /*si la session auth correspond a la table 1*/
  <?php include("menu users 1.php"); ?>  /*il inclu le menu 1*/
<?php else: ?> /*par comptre*/
<?php if (isset($_SESSION['auth = la table users 2 '])): ?>  /*si la session auth correspond a la table 2*/
  <?php include("menu users 2.php"); ?>  /*il inclu le menu 2*/

 /*et si aucune session n'ai auth alors il inclus le menu que j'ai appeler unset qui lui comporte ces 2 bouton*/
<a class="btn" href="S'inscrire.php">S'inscrire</a> 
<a class="btn" href="Se connecter.php">Se connecter</a>
17162
,

Bonjour.
Pour commencer tu as un problème concernant les variables et principalement l'utilisation de la fonction isset, ta condition du genre if (isset($_SESSION['auth = la table users 1 '])) est totalement fausse.
Tu ne peux pas inclure une valeur dans l'index d'une variable, quand tu utilises la fonction isset, c'est pour vérifier si une variable et/ou son index existent et si'il/elle n'est pas vide.
Ta condition devrait plutôt être :

if (!isset($_SESSION['auth'])):
    // ...
elseif ($_SESSION['auth'] === 'users1'):
    // ...
else:
    // ...
endif;

lui permettant de choisir s’il veut s'inscrire sur la table 1 ou sur la 2 pareille pour la connexion il choisit de se connecter soit avec la table 1 soit la 2

Je me demande quand même pourquoi tu donnes la possibilité à l'utilisateur de choisir à quelle table il va s'enregistrer/se connecter.
Dans le cas où tes deux tables contiennent les mêmes champs, pourquoi ne pas plutôt utiliser qu'une seule table et y ajouter un champ qui permettra de différencier le type d'utilisateur ?
De cette manière au lieu d'utiliser une condition qui fera la différence entre deux tables, une fois l'utilisateur connecté, tu stockerais ses principales informations dans la clé auth de la session et tu ferais la condition par rapport à la valeur de ce champ, par exemple :

if (!isset($_SESSION['auth'])):
    // ...
elseif ($_SESSION['auth']['role'] === 'guest'):
    // ...
else:
    // ...
endif;
Default
,

Bonjour, Lartak
Oui on est d'accord ce que j'ai fait ci-dessus est totalement incorrect c'était pour imager ce que je veut obtenir,

aussi je comprend que ce que je cherche a obtenir peut paraitre assez spécial, mais c'est un autre débat^^ mes table ne contiendront pas les même champs dans un avenir que j'espère assez proche.

je vais essayer d'être plus claire je reprends donc depuis le début,

Voilà ce que j'ai

mon menu unset

<header class="topbar" id="topbar" >
    <a class="logo" href="Index.php">
        <img src="img/logo/logo.png" alt="logo">
    </a>
    <nav class="topbar-menu">
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
    </nav>
        <div class="topbar-menu-right">
          <a class="btn" href="choice registration.php">S'inscrire</a> 
          <a class="btn" href="choice connect.php">Se connecter</a>
    </div>
</header>

ma page choice registration

<!DOCTYPE html>
<html>
    <?php include("inc/header.php"); ?> 
        <body>
                <div class="home">
                    <div>
                        <h2>Inscription:</h2>
                    </div>

                    <div class="center" >
                        <a href="S'inscrire user1.php" class="choice-us"></a>
                        <a href="S'inscrire user2.php" class="choice-us"></a>
                    </div>
                </div>
            <?php include("inc/footer.php"); ?>
        </body>
</html>

ma page choice connect

<!DOCTYPE html>
<html>
    <?php include("inc/header.php"); ?> 
        <body>
                <div class="home">
                    <div>
                        <h2>Connexion:</h2>
                    </div>

                    <div class="center" >
                        <a href="connexion user1.php" class="choice-us">
                            <h3>"Clickeur"</h3>
                        </a>
                        <a href="connexion user2.php" class="choice-us">
                            <h3>"Client"</h3>
                        </a>
                    </div>
                </div>
            <?php include("inc/footer.php"); ?>
        </body>
</html>

mon menu user1

<header class="topbar" id="topbar" >
    <a class="logo" href="Index.php">
        <img src="img/logo/logo.png" alt="logo">
    </a>
    <nav class="topbar-menu">
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
    </nav>
        <div class="topbar-menu-right">
          <a class="btn" href="account user1.php">Espace personnelle</a>
          <a class="btn" href="logout user1.php">Se déconnecter</a>
    </div>
</header>

mon menu user2

<header class="topbar" id="topbar" >
    <a class="logo" href="Index.php">
        <img src="img/logo/logo.png" alt="logo">
    </a>
    <nav class="topbar-menu">
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
        <a class="btn" href="lien.php">exemple</a>
    </nav>
        <div class="topbar-menu-right">
          <a class="btn" href="account user2.php">Espace personnelle</a>
          <a class="btn" href="logout user2.php">Se déconnecter</a>
    </div>
</header>

et mon menu.php que j'inclus dans toute mes page

<?php 
if (!isset($_SESSION['auth'])):
    include("inc/menu unset.php");
elseif ($_SESSION['auth'] === 'table users1'):
    include("inc/menu user1.php"); 
elseif ($_SESSION['auth'] === 'table users2'): 
    include("inc/menu user2.php");
endif;
?>

comme je l'ai dit précédemment je suis vraiment débutant j'ai donc essayer mon menu.php comme ci ci-dessus
du coup si je ne suis pas authentifier il inclus correctement mon unset menu mais dès que je me connecte en users1 ou users2 je n'ai plus de menu, moi je veut simplement que si je suis connecter avec ma table users1 il me mettent mon menu user1 pareille pour users2.

En tout cas merci pour l'attention prêter a mon sujet.