Php 从数据库获取信息,无需注销和重新登录

Php 从数据库获取信息,无需注销和重新登录,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

我希望在刷新站点时从数据库获取更新的信息,而不必注销和重新登录

当他们登录时,我从user.php获得信息,然后他们被重定向到memberpage.php。当他们刷新memberpage.php时,如果数据库中有任何更改,memberpage上也会更改。因此,如果他们使用isbanked_reason=0登录,然后我在数据库中将其更改为1,我希望在memberpage上也将其更改为1

这是我的密码: user.php

<?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!"
    }