Не могу разобраться! оператор isset

#php

#php

Вопрос:

Я пытаюсь использовать переменные сеанса для ограничения доступа к странице. У меня есть 3 уровня доступа: администратор, справка и технический. На страницах со справкой или техническим доступом администратор также разрешен. Я не могу понять, как написать оператор if. Вот код, который у меня есть:

 <?php
    //Start session
    session_start();

    //Check whether the session variable SESS_MEMBER_ID is present or not
    if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == ''))  {
        header("location: fail_access.php");
        exit();
    }
    if ((!isset($_SESSION['SESS_ACCESSLVL']) == 'admin') || (!isset($_SESSION['SESS_ACCESSLVL']) == 'help')) {
        header("location: fail_access.php");
        exit();
    }
?>
  

Когда у меня все так, как показано здесь, это позволяет всем уровням доступа к странице, которая должна быть ограничена «справка» (которая также включает «администратор»).
Может кто-нибудь указать на ошибку моих способов?? Любая помощь с благодарностью. Я очень новичок в этом и, очевидно, не до конца понимаю это.

Приветствия

Комментарии:

1. isset() возвращает a boolean , поэтому !isset($_SESSION['SESS_ACCESSLVL']) == 'help' не будет работать как «ожидаемый».

Ответ №1:

Попробуйте:

 if (
     !isset($_SESSION['SESS_ACCESSLVL']) || 
     !(($_SESSION['SESS_ACCESSLVL'] == 'admin') || ($_SESSION['SESS_ACCESSLVL'] == 'help'))
   ) 
{
    header("location: fail_access.php");
    exit();
}
  

Вы также можете попробовать http://php.net/manual/en/function.in-array.php

 $allowedAccessLevels = array('admin', 'help');
if (
     !isset($_SESSION['SESS_ACCESSLVL']) || 
     !in_array($_SESSION['SESS_ACCESSLVL'], $allowedAccessLevels)
   ) 
{
    header("location: fail_access.php");
    exit();
}
  

Комментарии:

1. Обратите внимание на Mate!! Спасибо за вашу помощь. Это помогает мне начать понимать, как делать то, что я хочу делать. Благодаря таким желающим людям, как вы, у тех из нас, кто пытается понять, есть, по крайней мере, шанс на победу. Приветствия!

Ответ №2:

isset проверяет, установлена ли переменная или элемент массива, и соответственно возвращает логическое значение. Он никак не учитывает и не возвращает значение.

Просто убедитесь, что он установлен, затем, если это так, проверьте значение.

 if(isset($_SESSION['SESS_ACCESSLVL']))
{
  $level = $_SESSION['SESS_ACCESSLVL'];
  // Check $level
}
  

Ответ №3:

 !isset($_SESSION['SESS_ACCESSLVL']) == 'admin'
  

Что вы пытаетесь здесь сделать? isset возвращает логическое значение. Вы сравниваете логическое значение со строкой. Подумайте об этом.

Попробуйте это:

 (isset($_SESSION['SESS_ACCESSLVL']) amp;amp; $_SESSION['SESS_ACCESSLVL']==='admin')
  

Эта isset часть не является строго необходимой, потому что последнее условие не будет выполнено, если оно не установлено, но я думаю, что в противном случае оно выдает предупреждение (если вы их не отключили).

Ответ №4:

isset возвращает true или false. Вы сравниваете это значение true / false с вашими строками доступа. В PHP true == 'some string' это TRUE, поэтому ваш код делает каждого администратором.

Комментарии:

1. Теперь я это вижу. Я пытаюсь разобраться в этих вещах, и Интернет — мой учитель, поэтому иногда это сбивает меня с толку. Спасибо, что указали мне на это. Приветствия.