PHP - mySQL 查询传递结果作为 session 变量不起作用

标签 php mysql

在将 SQL 查询的结果作为变量而不是作为跨所有页面的 session 传递时,我遇到了问题。

我目前将“用户名”作为 session 传递并且可以工作,但我尝试将“权限级别”设置为完全相同的 session ,但这在“用户名”可以工作时不起作用。

我已经在 phpmyadmin 中的数据库上测试了 mySQL 查询,它工作正常,任何有关此问题的帮助都将不胜感激,因为我一直在兜圈子。

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

结果:

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

登录.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>

最佳答案

您应该会因尝试转换 mysqli_result 而收到 PHP 警告。对象( 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'];

关于PHP - mySQL 查询传递结果作为 session 变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49764206/

相关文章:

php - 根据当前配置没有映射的 Doctrine ORM 实体

php - 在 Javascript 中模仿 $_GET

php - 从 ASP.NET C# 应用程序使用 PHP web 服务(SOAP、WSDL)-数组问题

php - paypal Adaptive Payment-您无权限制资金来源

php - 如何从 MySQL 获取 JSON 信息

php - Magento:将所有产品分配给默认类别

PHP 关于查询

java - 需要多少 Java 才能有效地使用 Hadoop 和 Mahout?

php - Easyphp 工作,linux 服务器返回对非对象上的成员函数的调用

c# - 从一个选择查询中获取多个结果