Не работает скрипт проверки данных из бд PHP
Эта часть скрипта по идее должна из таблицы users искать пользователей у которых в столбце role указано admin и выводить эти данные в ассоциативный массив $user_info
$query = "SELECT * FROM `users` WHERE `role` = 'admin'";
if ($result = mysqli_query($connect, $query)) {
$user_info = [];
while ($row = mysqli_fetch_assoc($result)) {
$user_info[] = array_values($row);
}
}
session_start();
$_SESSION['access_role'] = $user_info['role'];
А эта часть скрипта проверяет, имеет ли пользователь в столбце role значение admin и если да, то отображает указанную в скрипте кнопку, а если у пользователя нет в столбце role значение admin, то отображается надпись "Вы обычный пользователь"
if( $_SESSION['access_role'] == 'admin'){ // проверяем или пользователь админ
echo '<a href="../admin"><button class="green">Панель администратора</button></a>';
}
else {
echo 'Вы обычный пользователь';
}
При попытке вывода данных с помощью print_r($user_info);, выводит полностью все данные о пользователе:
Array
(
[0] => Array
(
[0] => 1
[1] => admin
[2] => air_admin
[3] => [email protected]
[4] => a43cabd34541265a098842e2dddf5f74
[5] => uploads/1611139080
[6] => admin
)
Структура таблицы users:
Но проблема в том, что этот скрипт всегда выдаёт надпись "Вы обычный пользователь". Не могу понять, в чём проблема
Ответы (2 шт):
Мда. Всё смешалось, люди, кони... Зачем вам загружать всех пользователей с ролью admin? Загрузите информацию о конкретном пользователе, который обращается к сайту и положите её в $user_info (в коде ниже пропущены все необходимые проверки):
$query = "SELECT * FROM `users` WHERE `id` = ?";
$stmt = mysqli_prepare($connect, $query);
// тут нужно добавить bind данных и исполнение запроса
$user_info = mysqli_fetch_array($stmt);
$_SESSION['user'] = $user_info;
Ну а дальше проверяем пользователя
if ($_SESSION['user']['role'] == 'admin') {
Вы немного неправильно обрабатываете возвращаемый массив. Если вам просто нужно чтобы ваш код заработал, замените последнюю строчку из первого куска кода на эту:
$_SESSION['access_role'] = $user_info[0][1];
Но вообще, ответ данный выше более корректный, лучше возьмите его на заметку.
