【问题标题】:How to pass data from mysql database to $_SESSOIN如何将数据从 mysql 数据库传递到 $_SESSOIN
【发布时间】:2014-03-03 11:05:29
【问题描述】:

大家好,我是 PHP 新手,我正在尝试在 php 中创建一个非常小的应用程序 我正在尝试使用 php 中的会话访问用户的用户 ID,为此我正在执行这些步骤

我在我的应用程序中创建这些类

我的第一堂课是我放在模型文件夹中的数据库管理器

public function executeQuery($query) {
        $result = mysql_query($query);
        if ($result === false) {
            $this->closeConnection($this->conn);
            exit;
        }
            // extract data from results, returning an associative array
            $rows = Array();
            while ($row = mysql_fetch_assoc($result)) {         
                $rows[] = $row;
            }
            return $rows;
}

然后我创建这两个类

首先是登录管理器

class LoginManager
{

    function checkLogin($arr)
    {
        require_once(FRONT_ROOT_PATH.'DatabaseManager.php');
        $query ="Select * from tbusers where username='".$arr['username']."' and password='".$arr['password']."'";
        $db= new DatabaseManager();
        $result=$db->executeQuery($query);
        return $result;
    }
}

第二个是LoginInit

<?php
session_start();
include(LIB_PATH."Login/LoginManager.php");

    if(isset($_POST['addlogin']))
    {
        $obj= new LoginManager();
        $userlist=$obj->checkLogin($_POST);
    if(Count($userlist)>0)
    {   
       $_SESSION['uid']=$userlist['userid'];
        header('location:/ProjectDream/view/home/home.php');
    }
    else 
    {
        echo "Login Failed";
    }
    }
}

在这个类中我添加会话,然后我在这个 php 页面上调用这些类

<?php
include('Include/config.inc.php');
include(LIB_PATH."Login/Logininit.php");

?>
<html>

<head>


    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    <title>Login</title>

    <!-- CSS -->

    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/animate.css">
    <link rel="stylesheet" href="css/styles.css">

</head>

    <!-- Main HTML -->

<body>

    <!-- Begin Page Content -->

    <div id="container">

    <form action="" method="post">
        <input type="hidden" name="addlogin"/>
        <label for="name">Username:</label>

        <input type="name" name="username">

        <label for="username">Password:</label>

        <p><a href="#">Forgot your password?</a>

        <input type="password" name="password">

        <div id="lower">

        <input type="checkbox"><label class="check" for="checkbox">Keep me logged in</label>

        <input type="submit" value="Login">

        </div>

        </form>

    </div>


    <!-- End Page Content -->

</body>

</html>

当用户登录时,我将用户发送到 home.php 页面,我在 home.php 上编写此代码

<?php

    session_start();
    if(isset($_SESSION['uid'])) 
    {

        echo  $_SESSION['uid'];
    }
    else 
    {
        echo "No Session ";
    }
?>

现在,当我运行这个应用程序时,它在我的 $_SESSION 变量中没有显示任何值 是否可以在 php.ini 中调用类级别的会话。请告诉我如何在这里使用会话 谢谢

【问题讨论】:

  • 您在哪里为 $_SESSION['uid'] 赋值?
  • 在我的代码中检查我的 loginmanager 类,我从那里得到它@Ashish
  • 您没有在代码中的任何位置设置任何 $_SESSION 变量,您试图从中获取值,但没有将任何值放入其中
  • 在 LoginManager 类中成功执行查询后,您需要分配它..
  • @CodeBird 我更正了它,之后我什么也没有得到

标签: php mysql session


【解决方案1】:

像这样尝试它应该可以工作:

   $_SESSION['uid']=$userlist[0]['userid'];

在您的代码中:

     while ($row = mysql_fetch_assoc($result)) {         
         $rows[] = $row;
     }

您将$row 添加到$rows,因此您拥有$rows[0]=$row;然后$rows[1]=$row;

所以实际上$rows['userid'] 没有设置,而是$rows[0]['userid'] 设置了

【讨论】:

    【解决方案2】:

    赋值的变量应该在等式的左边。 所以 改变

    $userlist['userid']=$_SESSION['uid'];
    

    $_SESSION['uid']=$userlist['userid'];
    

    【讨论】:

    • 你在哪里使用这个 $_SESSION['uid'] ?
    【解决方案3】:

    从数据库读取值时,您必须为$_SESSION['uid'] 分配一些值。比如:

    $_SESSION['uid'] = $row['uid'];
    

    另请注意,当您想使用来自$_SESSION 变量的数据时,您必须调用session_start()

    【讨论】: