Как указано в вашем комментарии, вы выполняете запрос, который может вернуть несколько строк для человека, имеющего как администраторскую, так и обычную роль, по одной на каждую работу / роль, которую имеет пользователь, но вы запрашиваете только одну строку из результата (и вы также пропускаете проверку, если запрос возвращает хотя бы одну строку; в случае, если пользователь не существует, это создаст ошибку при выполнении mysqli_fetch_assoc($query)
для пустого результата запроса).
Я бы такжеРекомендуется использовать имена ролей вместо любых идентификаторов, так как идентификаторы могут изменяться, тогда как имя роли должно оставаться неизменным.
Код:
$isAdmin= FALSE;
$isUser= FALSE;
$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 login.Username = ?????????');
while ($gettier = mysqli_fetch_assoc($query)) {
if($gettier["Privilege"] === "Normal"){
$_SESSION['userID'] = $row['LoginID'];
$isUser= TRUE;
}
elseif($gettier["Privilege"] === "Admin"){
$_SESSION['AdminID'] = $row['LoginID'];
$isAdmin= TRUE;
}
}
// redirect the user based on the $isAdmin/$isUser flag
if ($isAdmin) {
header("Location: staffindex.php?login=ADMINsuccess");
} elseif ($isUser) {
header("Location: staffindex.php?login=USERsuccess");
} else {
// User not found.
}