2012-05-09 4 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)의 기본값 인 "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> '; 
} 

편집 : 나는 각 사용자에 대한 데이터베이스의 '독특한'링크 목록을 저장하는 것입니다 내가 생각 다른 옵션을 언급하지 않았다 깨달았다. 그런 다음 에코 차단 후 각 사용자의 고유 링크를 인쇄합니다.

나는 두 개의 추가 테이블로이 구상. 표 1은 '링크'이고 3 개의 열 (id, link 및 display text)을가집니다. 표 2는 'user_links'이고 linkId와 userId라는 두 개의 열을 포함합니다.

당신은 user_links 테이블에 연결하고 디스플레이 텍스트 디스플레이 (당신의 href 인) 테이블에 가입하고 링크이있을 것이다.

관련 문제