PHP - результаты запроса mySQL как переменная сеанса не работают

0

Я столкнулся с проблемой при передаче результата SQL Query в виде переменной, чем как сеанс на всех страницах.

В настоящее время у меня есть "имя пользователя", которое передается как сеанс, и это работает, но я попытался настроить "уровень привилегии" как сессию точно так же, но это не работает, пока "имя пользователя".

Я протестировал mySQL-запрос в базе данных в phpmyadmin, и он отлично работает, любая помощь с этим будет оценена по мере того, как я крутился по кругу.

SELECT privledge_lvl FROM 'users' WHERE username='$username'

Результат:

|privledge_lvl|
---------------
|2            |

login.php

<?php
        require('db.php');
        session_start();
    // If form submitted, insert values into the database.
    if (isset($_POST['username'])){

                $username = stripslashes($_REQUEST['username']); // removes backslashes
                $username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
                $password = stripslashes($_REQUEST['password']);
                $password = mysqli_real_escape_string($con,$password);

        //Checking is user existing in the database or not
        $query = "SELECT * FROM 'users' WHERE username='$username' and password='".md5($password)."'";
                $result = mysqli_query($con,$query) or die(mysqli_error());
                $rows = mysqli_num_rows($result);

        $privquery = "SELECT privledge_lvl FROM 'users' WHERE username='$username'";
                $privresult = mysqli_query($con,$privquery) or die(mysqli_error());

        if($rows==1){

                        $_SESSION['username'] = $username;
                        $_SESSION['privledgelvl'] = $privresult;
                        header("Location: index.php"); // Redirect user to index.php
            }else{
                                echo "<div class='form'><h3>Username/password is incorrect.</h3><br/>Click here to <a href='login.php'>Login</a></div>";
                                }
    }else{
?>

auth.php

<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }
?>

index.php

<p>Welcome <?php echo $_SESSION['username']; ?>!</p>
<p>Privledge Level <?php echo $_SESSION['privledgelvl']; ?></p>
  • 1
    вам не нужен второй выбор, вы получите privledge_lvl в первом запросе, выбрав *
  • 2
    Пожалуйста, не храните простые текстовые пароли и не хэшируйте их со слабыми алгоритмами, используйте функции паролей, предоставляемые PHP. Проверьте: как вы используете bcrypt для хеширования паролей в PHP
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Вы должны получить предупреждение PHP о попытке преобразовать объект mysqli_result (возвращаемое значение из mysqli_query) в строку в этой строке:

<?php echo $_SESSION['privledgelvl']; ?>

Вы должны установить $ _SESSION ['privledgelvl'], используя

$row = $privresult->fetch_assoc();
// or, procedurally, $row = mysqli_fetch_assoc($privresult);
$_SESSION['privledgelvl'] = $row['privledgelvl'];

Или - как было указано - вы можете получить его из первого запроса и не беспокоиться со вторым:

$row = $result->fetch_assoc();
// or, procedurally, $row = mysqli_fetch_assoc($result);
$_SESSION['privledgelvl'] = $row['privledgelvl'];
  • 0
    ОП использует процедурный, а не ООП mysqli
  • 1
    @smith не имеет значения, возвращаемое значение из mysqli_query является объектом, поэтому его можно использовать процедурно или ООП. Но добавили процедурные вызовы в комментарии, чтобы OP мог использовать любой из них.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню