Php 从数据库获取信息,无需注销和重新登录
我希望在刷新站点时从数据库获取更新的信息,而不必注销和重新登录 当他们登录时,我从user.php获得信息,然后他们被重定向到memberpage.php。当他们刷新memberpage.php时,如果数据库中有任何更改,memberpage上也会更改。因此,如果他们使用isbanked_reason=0登录,然后我在数据库中将其更改为1,我希望在memberpage上也将其更改为1 这是我的密码: user.phpPhp 从数据库获取信息,无需注销和重新登录,php,html,mysql,sql,phpmyadmin,Php,Html,Mysql,Sql,Phpmyadmin,我希望在刷新站点时从数据库获取更新的信息,而不必注销和重新登录 当他们登录时,我从user.php获得信息,然后他们被重定向到memberpage.php。当他们刷新memberpage.php时,如果数据库中有任何更改,memberpage上也会更改。因此,如果他们使用isbanked_reason=0登录,然后我在数据库中将其更改为1,我希望在memberpage上也将其更改为1 这是我的密码: user.php <?php include('password.php'); class
<?php
include('password.php');
class User extends Password{
private $_db;
function __construct($db){
parent::__construct();
$this->_db = $db;
}
private function get_user_hash($username){
try {
$stmt = $this->_db->prepare('SELECT password, username, memberID, isBanned_reason, Rank FROM members WHERE username = :username AND active="Yes" ');
$stmt->execute(array('username' => $username));
return $stmt->fetch();
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}
public function login($username,$password){
$row = $this->get_user_hash($username);
if($this->password_verify($password,$row['password']) == 1){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $row['username'];
$_SESSION['memberID'] = $row['memberID'];
$_SESSION['Rank'] = $row['Rank'];
$_SESSION['isBanned_reason'] = $row['isBanned_reason'];
return true;
}
}
public function logout(){
session_destroy();
}
public function is_logged_in(){
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
$_SESSION['Rank'];
$_SESSION['isBanned_reason'];
return true;
}
}
}
?>
您可以使用jQuery Ajax
函数在服务器或数据库上检查更改的值,也可以使用setInterval
函数每隔5秒触发一次Ajax
像这样尝试:
Jquery Ajax:(在您希望连续触发检查的页面上)
另外,确保加载jquery
库,以便在页眉顶部运行jquery
函数
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
如果您不想将页面重定向到login并要求重新登录,那么在这个AJAX调用的success方法中,您需要编写另一个AJAX来设置会话变量并隐藏禁止区域。需要更新会话变量,因为如果用户刷新页面,则if语句必须正常工作以检查禁用的会话变量
这就是为什么清楚地学习AJAX更好的原因 您不必使用jquery。以下是同样有效的本机javascript:
var objXhttp = new XMLHttpRequest();
objXhttp.open("POST", "http://YourServer.com/CheckForBadUser.php, false);
objXhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
objXhttp.send("nUserID=" + gnUserID);
if (objXhttp.response == 1) {
ThrowUserOut()
}
要使此代码正常工作,请执行以下步骤:
创建CheckForBadUser.php,它检查用户标识是否已标记为错误
在javascript中创建一个名为gnUserID的全局变量
创建一个名为ThrowUserOut()的javascript函数,该函数在CheckForBadUser.php返回1时执行
function ThrowUserOut () {
document.all.idDivMain.innerHTML = "You've been thrown out!"
}
在body标记的开头添加一个名为idDivMain的div。记住在身体末端之前关闭那个div
您可以使用jquery ajax
检查服务器或数据库上的信息,而无需刷新客户端的页面。在每个页面中,或者在需要更新的位置,对PHP文件运行ajax调用,该文件将始终从数据库返回值。每秒钟或每2秒钟使用计时器执行一次AJAX。如果成功,请调用另一个ajax以使用php设置会话。@MaheshSinghChouhan好的,谢谢。@webDev您可以发布一个示例答案吗?首先尝试自己的答案,这是更好的学习方法,首先发出ajax请求以获取值,然后设置会话。请参阅谷歌提供的jqueryajax示例代码。你想学习还是解决你的问题?复制并粘贴你的代码到我的会员页面。没有发生任何事。。我应该将url更改为我的网站url,将userid更改为memberID吗?请参阅更新的代码,但在您学习AJAX之前,这不会起作用。没有复制和粘贴将不起作用。如果你想隐藏或禁止某个基于DB的页面区域。您需要启动两个AJAX,并且在第二个AJAX成功时,您需要使用JS和CSS隐藏禁用区域。刷新会话变量会起作用。你说得对,伙计,这就是为什么发布一些ajax链接和相关主题,如使用ajax etci设置会话变量,没有任何名为checkdb的文件@webDev@UnboxingTutorials这就是为什么我的朋友,我告诉你,请使用谷歌进行一次基本的AJAX培训,然后你将100%地得到这个答案。花一天的时间学习AJAX buddy。你能解释一下如何使用你的答案自动禁止网页的一部分吗?我不明白这怎么会禁止我页面上的用户?我需要做很多修改才能使之生效?请参阅我修改后的答案,其中描述了此代码如何禁止用户访问整个页面。
var objXhttp = new XMLHttpRequest();
objXhttp.open("POST", "http://YourServer.com/CheckForBadUser.php, false);
objXhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
objXhttp.send("nUserID=" + gnUserID);
if (objXhttp.response == 1) {
ThrowUserOut()
}
function ThrowUserOut () {
document.all.idDivMain.innerHTML = "You've been thrown out!"
}