Использование ENUM для указания сеанса пользователя или администратора в PHP и MySQL - PullRequest
0 голосов
/ 21 мая 2019

В настоящее время я пытаюсь связать два разных сеанса из процесса входа в систему: сеансы обычного пользователя и привилегированного пользователя (администратора). Я сохранил пользовательскую привилегию в типе данных ENUM, однако я не уверен, как указать мои значения ENUM в PHP. При использовании следующего PHP все пользователи проходят через первый вариант, включая администраторов (я могу сказать, потому что перенаправление заголовка одинаково)

PHP:

      else if ($pwdCheck == True){
        session_start();
  $query = mysqli_query($conn, 'SELECT staff.StaffID, role.Privilege FROM
jobs
INNER JOIN staff ON staff.StaffID = jobs.StaffID
INNER JOIN role ON role.RoleID = jobs.RoleID
WHERE staff.StaffID = "LoginID"');

  $gettier = mysqli_fetch_assoc($query);
  if($gettier["role.Privilege"] == 0){
    $_SESSION['userID'] = $row['LoginID'];
    header("Location: staffindex.php?login=USERsuccess");
  }
  elseif($gettier["role.Privilege"] == 1){
    $_SESSION['AdminID'] = $row['LoginID'];
    header("Location: staffindex.php?login=ADMINsuccess");
  }

        exit();
      }

Я знаю, что проблема в части $ gettier ["role.Privelege"]. если я изменяю содержимое в скобках, это не изменится (например, пользователи с правами администратора проходят через заголовок USERsuccess вместо ADMINsuccess.) В будущем я хочу перенаправить на другую страницу, но сейчас я просто перенаправляю на ту же стр.


Любая помощь приветствуется, спасибо

1 Ответ

2 голосов
/ 21 мая 2019

Ваш запрос будет выглядеть так:

$var['column_name']; 

Примечание: ключ массива - имя_ столбца НЕ имя_таблицы.column_name .

Вы можете ясно увидеть, что выводится, а затем найти правильный ключ массива с помощью:

error_log(print_r($gettier,true));

Дополнительные примечания:

  • Вы должны, насколько это возможно, использовать === операторы сравнения, чтобы избежать беспорядочного смешивания типов. Пример: elseif((int)$gettier['Privilege'] === 1){...

  • Ваш session_start() должен быть в верхней части вашего сценария.

  • Использование значений URL ($_GET) для определения admin (?login=ADMINsuccess) чрезвычайно подвержено риску. У вас есть сессии в вашем PHP - используйте их. Не используйте флаг URL для аутентификации администратора, поскольку это абсолютно не гарантирует, что подключающийся браузер является действительным администратором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...