2012-05-09 2 views
0

У меня есть небольшой сайт, который имеет 200 членов. Ниже приведен код для логинов входа/выхода, которые отображают ссылку «Изменить пароль», «Отчет» и «Выход» при входе в систему. Пока вы не вошли в систему, отображаются ссылки «Вход» и «Забыли пароль».Условные ссылки на отображение на основе состояния входа в систему PHP

В последнее время мы провели конкурс, в котором было 14 победителей, и я пытаюсь сделать это, чтобы поместить ссылку в код, который могут увидеть только 14 победителей, а не остальные участники.

Я не совсем уверен, с чего начать, можно ли включить условие в этот код для 14 идентификаторов пользователей/адресов электронной почты или мне лучше помещать новое поле в базу данных пользователя? Любая помощь или толчок в правильном направлении были бы оценены!

 <?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», и в этой таблице вы бы внешний ключ для таблицы «пользователь», то столбец «победитель» в качестве TINYINT (1) по умолчанию 0. Затем вы сделаете внутреннее соединение, когда вы извлечете пользовательские данные, и сохраните целое число победителя в своем сеансе, чтобы узнать, является ли текущий пользователь победителем. Делая это долгий путь, у вас будет дополнительная таблица, которая добавит больше вещей в атрибуты пользователя в будущем. – 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

вы можете просто поместить идентификатор победителей в array, а затем проверить, если идентификатор пользователя в этом массиве для отображения ссылки.

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

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

Одним из вариантов являются добавлением условной проверки идентификатора пользователя и, если он соответствует своему списку идентификаторов, добавьте ссылку. Недостатком этого блока кода является то, что он жестко запрограммирован и может стать проблемой обслуживания, если вы планируете больше конкурсов или других ссылок, уникальных для определенных участников в будущем. (Вы бы в конечном итоге с некоторыми из этих блоков кода)

Сначала установите свои идентификаторы победителя в массив, например, так:

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

Тогда в echo блоке, где вы печатаете ссылки сделать это:

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

Edit: я понял, что я не упомянул другой вариант, я думал, что должен хранить список «уникальных» ссылок в базе данных для каждого пользователя. Затем после блока эха вы будете печатать уникальные ссылки для каждого пользователя.

Я представляю это как две дополнительные таблицы. Таблица 1 будет «ссылками» и будет содержать три столбца - идентификатор, ссылку и текст отображения. Таблица 2 будет «user_links» и будет содержать два столбца - linkId и userId.

Вы присоединились к таблицам и получили ссылки (которые являются вашими href) и отобразите текстовый дисплей, который связан в таблице user_links.

Смежные вопросы