2012-05-09 2 views
0

J'ai un petit site qui compte 200 membres. Vous trouverez ci-dessous le code des liens de connexion/déconnexion qui affichent un lien «Changer mot de passe», «Rapport» et «Déconnexion». Les liens «Connexion» et «Mot de passe oublié» sont affichés.Liens d'affichage conditionnels basés sur l'état de connexion PHP

Récemment, nous avons organisé un concours qui comptait 14 gagnants et ce que j'essaie de faire est de mettre un lien dans le code que seuls les 14 gagnants peuvent voir et pas les membres restants. Je ne sais pas trop par où commencer, est-il possible de mettre une condition dans ce code pour les 14 identifiants d'utilisateur/adresses e-mail ou serais-je mieux de mettre un nouveau champ dans la base de données de l'utilisateur? Toute aide ou poussée dans la bonne direction serait appréciée!

 <?php # loginnav.php> 

    // Display links based upon the login status. 

    // Show LOGIN links if this is the LOGOUT page. 

     if (isset($_SESSION['user_id']) 
     AND (substr($_SERVER['PHP_SELF'], -10) 
     !='logout.php')) 

     { echo 
     '<li><a href="logout.php">Logout</a></li> 
     <li><a href="change_password.php">Change Password</a></li> 
     <li><a href="report.php">Report</a></li> 
    '; } else { 

    // Not logged in. 
    echo 
    ' <li><a href="login.php">Login</a></li> 
    <li><a href="forgot_password.php">Forgot Password?</a></li> 
     '; } ?> 
+2

Je voudrais créer une autre table appelée « user_attributes », et dans ce tableau vous auriez une clé étrangère pour la table « utilisateur », puis une colonne pour « gagnant » comme tinyint (1) par défaut de 0. Ensuite, vous effectuerez une jointure interne lorsque vous récupérerez les données d'utilisateur et stockerez l'entier «gagnant» dans votre session pour indiquer si l'utilisateur actuel est un gagnant. En faisant cela aussi longtemps, vous aurez une table supplémentaire pour ajouter plus de choses aux attributs de l'utilisateur dans le futur. – JREAM

Répondre

1
 $winners_array = array('userid1', 'userid2', 'userid3', 'userid4', ...); 
      // This array contains users IDs who are winners 
      // You can write it manualy right intj the login file, 
      //include it from external file or form from your Data Base 

    if (isset($_SESSION['user_id']) 
     AND (substr($_SERVER['PHP_SELF'], -10) 
     !='logout.php')) 
     { 
     echo 
     '<li><a href="logout.php">Logout</a></li> 
     <li><a href="change_password.php">Change Password</a></li> 
     <li><a href="report.php">Report</a></li> 
     '; 
     if(in_array($_SESSION['user_id'], $winners_array)){ 
     // If current ID is in winners list we add special link for him 
     echo '<li><a href="winer_page.php">Winner link</a></li>'; 
     } 
     } else { 
    // Not logged in. 
    echo 
    ' <li><a href="login.php">Login</a></li> 
    <li><a href="forgot_password.php">Forgot Password?</a></li> 
     '; } ?> 
+0

Cela a fonctionné, merci beaucoup pour votre aide !!! – AdamMc

1

vous pouvez simplement mettre l'id les gagnants dans un array, puis vérifiez si l'ID utilisateur est dans ce tableau pour montrer le lien.

$winners = array(1, 2, 3, 4, 5); 

if (in_array($id, $winners)) 
{ 
    echo "link"; 
} 
0

Une option est d'ajouter un contrôle conditionnel de l'ID utilisateur et si elle correspond à votre liste de ids, ajouter le lien. L'inconvénient de ce bloc de code est qu'il est codé en dur, et peut devenir un problème de maintenance si vous prévoyez plus de concours ou d'autres liens uniques à certains membres dans le futur. (Vous finiriez avec plusieurs de ces blocs de code)

d'abord définir votre vainqueur ids dans un tableau, comme suit:

$winningIds = array(1,2,3,4,5,6,7,8,...); 

Ensuite, dans le bloc echo où vous imprimez les liens font:

if (in_array($_SESSION['user_id'], $winningIds)) 
{ 
    echo '<li><a href="newlink.php">New Link</a></li> '; 
} 

Edit: je réalisais que je ne l'ai pas mentionné l'autre option que je pensais, ce qui est de stocker une liste de liens « uniques » dans la base de données pour chaque utilisateur. Ensuite, après votre bloc d'écho, vous imprimerez les liens uniques pour chaque utilisateur.

Je l'envisage comme deux tables supplémentaires. Le tableau 1 serait «liens» et aurait trois colonnes - id, lien et texte d'affichage. Le tableau 2 serait 'user_links' et contiendrait deux colonnes - linkId et userId.

Vous joignez les tables et avez les liens (qui est votre href) et l'affichage du texte d'affichage qui sont associés dans la table user_links.

Questions connexes