[英]PHP oop echo session username?
我對如何從數據庫中檢索或回顯用戶名一無所知,
我已經引用了這個
以及更多類似的問題,但是我仍然不明白如何回顯當前的用戶名。
一切正常,我可以登錄和注銷
只是找不到找到回顯當前用戶名的方法
這是代碼
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>
在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
在這里,不需要用逗號將':username'寫入。 另外,由於只需要一行,因此不需要FETCH_ASSOC。 因此,請使用fetch()PDO函數。 更多更新:
請參閱首先在應用程序中登錄用戶。 在登錄腳本本身中,設置用戶名會話變量。 然后
在個人資料頁面中,通過調用訪問會話值
session_start (); echo $_SESSION['user_session'];
如果您有疑問,請更新您的登錄腳本文件,我將向您顯示。
希望你能理解。
第三次更新:
在登錄功能中看到已經設置了會話變量
$_SESSION['user_session'] = $userRow['user_id'];
因此,您總是從會話變量中獲取我希望的用戶。
所以在登錄功能本身設置
$_SESSION['username'] = $userRow['username'];
然后在配置文件頁面中調用此變量。 無需調用get_user_sess()函數。 只需啟動會話並獲取變量即可。
另外,您的登錄腳本還必須清除用戶輸入值。
如果為會話分配值,則可以在網站的任何位置進行打印。 檢查以下代碼。
您需要添加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');?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.