我对如何从数据库中检索或回显用户名非常不知道,
我引用了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>
答案 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函数。 更多更新:
请先在应用程序中登录用户。在登录脚本本身中设置用户名会话变量。然后
在个人资料页面中,通过调用
来访问会话值 session_start ();
echo $_SESSION['user_session'];
如果您有疑问,请更新您的登录脚本文件,我会告诉您。
希望你明白。
第三次更新:
在您的登录功能中查看您已设置会话变量
$_SESSION['user_session'] = $userRow['user_id'];
因此,您始终会从会话变量中获取用户值。
所以在登录功能本身设置
$_SESSION['username'] = $userRow['username'];
然后在配置文件页面中调用此变量。无需调用get_user_sess()函数。只需启动会话并获取变量。
此外,您的登录脚本必须清理用户输入值。
答案 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');?>