PHP oop echo会话用户名?

时间:2017-06-01 17:11:08

标签: php session pdo

我对如何从数据库中检索或回显用户名非常不知道,

我引用了this

和更类似的问题,但是我仍然不明白如何回显当前的用户名。

一切正常,我可以登录和退出

无法找到回应当前用户名的方法

这是代码

user.php的

public function get_user_sess()
{
    try{

        $query = $this->db->prepare("SELECT * FROM users WHERE user_name=':username'");
        $query->execute(array(':username'=>$username));
        $userRow = $query->fetch(PDO::FETCH_ASSOC);

        return $_SESSION['user_session'] = $userRow['username'];

    }

    catch(PDOExeception $e)
    {
        echo $e->getMessage();
    }
}

public function login($username, $password)
{
    try{
        $stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:username OR user_pass=:password LIMIT 1");
        $stmt->execute(array(':username'=>$username, ':password'=>$password ));
        $userRow = $stmt->fetch(PDO::FETCH_ASSOC);
        if ($stmt->rowCount() > 0)
        {
            if(password_verify($password,$userRow['user_pass']))
            {
                $_SESSION['login'] = TRUE;
                $_SESSION['user_session'] = $userRow['user_id'];
                return true;

            }

            else{
                return false;
            }
        }
    }


    catch(PDOExeception $e)
    {
        echo $e->getMessage();
    }
}

Profile.php

<?php
session_start();
error_reporting(-1);
require_once 'User.php';

$user = new User();
if(isset($_GET['q'])){
   $user->logout();
   $user->redirect('login');
}


require_once 'layouts/header.php';
?>
<h1>Welcome 
<?php 

$user = new User();
echo $user->get_user_sess();
?>
</h1>

<ul>
    <li><a href="profile.php?q=logout">LOGOUT</a></li>
</ul>

<?php require_once ('layouts/footer.php');?>

的login.php

<?php
session_start();
error_reporting(-1);
require 'Db.php';
require 'User.php';



if(isset($_POST['btn_login'])){


    $username = $_POST['txt_username'];
    $password = $_POST['txt_pass'];


    $guest = new User();
    if($username == "")
    {
        echo "Enter username please";

    }

    if($password == "")
    {
        echo "Enter password please";
    }



    if($guest->login($username, $password)){
        $guest->redirect('profile');      
    }


    else{
        echo "Invalid Entry";
    }





}

require_once 'layouts/header.php';

?>

<div class="container">
    <div class="row">
        <h1>Sign In</h1>


        <form action="" method="POST">
            <div class="form-group">
                <label>Username</label>
                <input type="text" name="txt_username" class="form-control" required/>
            </div>


            <div class="form-group">
                <label>Password</label>
                <input type="password" name="txt_pass" class="form-control" required/>
            </div>


         <button type="submit" name="btn_login" class="btn btn-primary">Log In</button>

        </form>
    </div>
</div>

2 个答案:

答案 0 :(得分:1)

在user.php文件中只需设置会话变量。 例如,在你的函数中:

  $_SESSION['user_session'] = $userrow['username'];

这里不返回任何东西。只需设置会话变量。

现在在您希望显示用户名的任何页面中 写

 session_start ();
 echo $_SESSION['user_session'];

希望它能解决您的问题。 同样在您的PDO声明中更改

user_name=':username' // in select statement 

user_name=:username   // without inverted commas

此处不需要&#39;:用户名&#39;用引号书写。 也不需要FETCH_ASSOC,因为您只获得一行。所以使用fetch()PDO函数。 更多更新:

请先在应用程序中登录用户。在登录脚本本身中设置用户名会话变量。然后

  1. 在个人资料页面中,通过调用

    来访问会话值
     session_start ();
      echo $_SESSION['user_session'];
    

    如果您有疑问,请更新您的登录脚本文件,我会告诉您。

  2. 希望你明白。

    第三次更新:

    1. 在您的登录功能中查看您已设置会话变量

      $_SESSION['user_session'] = $userRow['user_id'];
      

      因此,您始终会从会话变量中获取用户值。

    2. 所以在登录功能本身设置

      $_SESSION['username'] = $userRow['username'];
      

      然后在配置文件页面中调用此变量。无需调用get_user_sess()函数。只需启动会话并获取变量。

    3. 此外,您的登录脚本必须清理用户输入值。

答案 1 :(得分:-1)

如果您为会话分配值,则可以在网站的任何位置打印。请检查以下代码。

  

您需要添加session_start();在User.php中

user.php的

public function get_user_sess()
{
    try{

        $query = $this->db->prepare("SELECT * FROM users WHERE user_name=':username'");
        $query->execute(array(':username'=>$username));
        $userRow = $query->fetch(PDO::FETCH_ASSOC);

        $_SESSION['user_session'] = $userRow['username'];
        return true;

    }

    catch(PDOExeception $e)
    {
        echo $e->getMessage();
    }
}

Profile.php

    <?php
if (session_status() == PHP_SESSION_NONE){
    session_start();
}
error_reporting(-1);
require_once 'User.php';

$user = new User();
if(isset($_GET['q'])){
   $user->logout();
   $user->redirect('login');
}


require_once 'layouts/header.php';
?>
<h1>Welcome 
<?php echo $_SESSION['user_session']; ?>
</h1>

<ul>
    <li><a href="profile.php?q=logout">LOGOUT</a></li>
</ul>

<?php require_once ('layouts/footer.php');?>