2012-05-09 23 views
0

私は200人のメンバーを持つ小さなサイトを持っています。以下は、ログイン時に「パスワードの変更」、「レポート」、および「ログアウト」リンクを表示するログイン/ログアウトリンクのコードです。ログインしていない間は、「ログイン」リンクと「パスワードを忘れました」リンクが表示されます。ログインステータスに基づく条件付きの表示リンクPHP

最近私たちは14人の勝者を持つ競技を行いました。私が達成しようとしているのは、14人の勝者だけが見ることができ、残りのメンバーは見ることのできないコードにリンクを張ることです。

私は14のユーザーID /電子メールアドレスに対してこのコードに条件を付けることが可能かどうか、またはユーザーのデータベースに新しいフィールドを追加する方が良いと思いますか?正しい方向への助けやプッシュは感謝します!

 <?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

"user_attributes"という別のテーブルを作成し、そのテーブルには "user"テーブルの外部キーがあり、次にtinyint(1)のデフォルト値0の "winner"の列があります。次に、ユーザデータをフェッチするときに内部結合を行い、セッションに 'winner'整数を格納して、現在のユーザが勝者かどうかを判断します。このようにすることで、将来的にユーザー属性に多くのものを追加する余分な表があります。 – JREAM

答えて

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

これはうまくいきました。 – AdamMc

1

あなたは、単にユーザIDがリンクを示すために、その配列であるかどうかを確認、その後、arrayに受賞者のIDを置くことができます。

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

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

ユーザーIDの条件付きチェックを追加し、IDリストに一致する場合はリンクを追加します。このコードブロックの欠点は、それがハードコードされていることと、将来、特定のメンバーに固有のコンテストやその他のリンクを計画する場合、メンテナンスの問題になる可能性があることです。

(あなたは、コードのこれらのブロックのいくつかで終わるでしょう)まず、配列にあなたの勝者IDを設定するので、のように:あなたはリンクがこれを行う印刷しているechoブロックにおけるその後

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

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

編集:私は、私は、各ユーザーのデータベース「ユニークな」リンクのリストを格納することで、私が考えていた他のオプションは、言及しなかったが実現。その後、エコーブロックの後に、各ユーザーの固有のリンクを印刷します。

私は2つの追加テーブルとしてこれを想定しています。表1は「リンク」であり、ID、リンク、および表示テキストの3つの列を持ちます。表2は 'user_links'で、linkIdとuserIdという2つの列が含まれています。

テーブルを結合し、リンク(href)とuser_linksテーブルに関連付けられたテキスト表示を表示します。

関連する問題