Не удается правильно назначить пользователя (администратора) для посещения / доступа к adminpage.php - PullRequest
0 голосов
/ 05 февраля 2019

Когда я использую код в admin.php, он просто не дает мне ожидаемого эхо, пока у меня есть правильное значение в моей базе данных

Я уже пытался найти его в google / stackoverflow, но не могу найти какой-либоРешение это просто не соединяется правильно.пытался поместить код ISSET в начало, но также не сработало.

База данных:

Имя пользователя / Пароль / Электронная почта / Роль Admin / test123 / @ html.com / admin

При входе в систему (сеанс) он по-прежнему практически ничего не дает.

         <?php

  include_once 'includes/db_connect.php';
  include_once 'includes/functions.php';

  session_start();

  if ($stmt = $mysqli->prepare("SELECT id, username, password, salt, role
  FROM members
                          WHERE username = ? LIMIT 1")) {
 $stmt->bind_param('s', $username);  // Bind "$email" to parameter.
 $stmt->execute();    // Execute the prepared query.
 $stmt->store_result();

// get variables from result.
 $stmt->bind_result($user_id, $username, $db_password, $salt, $role);
 $stmt->fetch();

            $role = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $role);

            $_SESSION['role'] = $role;
        }


     $role = "admin";

    if(isset($_SESSION['role'])) {
     if($_SESSION['role'] == $role) {
      echo "welcome adminisn";
         } else {
       echo ("Acces Denied");
      exit();
       }

             } else {
         echo "Session not set";
               }

он запрещает мне доступ, пока у меня есть администратор в столбце моей роли

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я предполагаю, что это не работает, потому что вы не присвоили $ _SESSION ['role'] значение, когда пользователь вошел в систему, и у вас нет оператора, чтобы проверить, не назначено ли оно.

В любом случае этот код будет работать:

    <?php
session_start(); // If we remove this then we get error Session not set

$role = "admin"; // If we change the role to something else we get access not granted


if(isset($_SESSION['role'])) {

  if($_SESSION['role'] == $role) {
    echo "Welcome admin";
  } else {
    echo("Access not granted");
    exit();
  }
} else {
  echo "Session not set!";

}

Нам нужно сначала инициализировать session_start ().Я вручную назначаю роль, но вы должны взять ее из запроса базы данных, чтобы проверить, есть ли у пользователя права администратора или нет.Затем мы проверим, установлена ​​ли сессия.Если это не так, мы будем отображать сообщение сеанс не установлен.

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

Я предлагаю немного проверить руководство php, чтобы больше посмотреть на сессии.Это действительно легко забыть что-то, и тогда все это просто не работает.По крайней мере, это было из моего предыдущего опыта.

0 голосов
/ 05 февраля 2019

Используйте заглавные буквы для _SESSION!?

if(isset($_session['role'])) {

Правильно ли это назначение?Что такое $role?Если $role установлено на "admin", то админский мод включен для всех.Для всех остальных значений он отключен для всех.

$_SESSION['role'] = $role;
...