Php 用户注销显示在所有用户中

Php 用户注销显示在所有用户中,php,mysql,oop,pdo,Php,Mysql,Oop,Pdo,我试图创建一个成员页面,但当我以用户身份登录时 我需要一个注销按钮,如果我以(X)用户的身份登录,并且我尝试访问(Y)用户的个人资料,我仍然会得到注销按钮。基本上,只有当我以我的用户身份登录时,我才尝试获取注销按钮,如果我想查看另一个配置文件,我想查看它,但不想在登录时在另一个配置文件页面上显示注销按钮 PROFILE.php <?php session_start(); include_once 'php/classes/class.user.php'; //echo 'GET:';

我试图创建一个成员页面,但当我以用户身份登录时 我需要一个注销按钮,如果我以(X)用户的身份登录,并且我尝试访问(Y)用户的个人资料,我仍然会得到注销按钮。基本上,只有当我以我的用户身份登录时,我才尝试获取注销按钮,如果我想查看另一个配置文件,我想查看它,但不想在登录时在另一个配置文件页面上显示注销按钮

PROFILE.php

<?php 
session_start();
include_once 'php/classes/class.user.php';

//echo 'GET:'; 
//var_dump($_GET); 
//echo '$_SESSION:'; 
//echo var_dump($_SESSION); 

$user = new User();

$uid = $_GET['uid'];

if(isset($_SESSION['uid']) && $_GET['uid'] == $_SESSION['uid']){

    if ($user->check_user($uid)) {

        echo " " . $user->get_fullname($uid) . " ";
        echo "<a href='profile.php?q=logout'>Log Out</a>";

    }

}else if(isset($_SESSION['uid']) && $_GET['uid'] != $_SESSION['uid']){

    echo " " . $user->get_fullname($uid) . " ";

}else if(!isset($_SESSION['uid']) && $_GET['uid'] != $_SESSION['uid']){
    echo " " . $user->get_fullname($uid) . " ";
}else if($user->check_user($count_row1) > $uid){
    echo "User Doesn't exist";
}

if (isset($_GET['q'])) {
    $user->user_logout();
    header("location: index.php");
}
?>
<?php 
include "db_config.php";

class User{

    public $db;

    public function __construct(){
        $this->db = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

        if(mysqli_connect_errno()) {
            echo "Error: Could not connect to database.";
                exit;
        }
    }

    /*** for login process ***/
    public function check_login($emailusername, $password){

        $password = md5($password);
        $sql2="SELECT uid from users WHERE uemail='$emailusername' or uname='$emailusername' and upass='$password'";

        //checking if the username is available in the table
        $result = mysqli_query($this->db,$sql2);
        $user_data = mysqli_fetch_array($result);
        $count_row = $result->num_rows;

        if ($count_row == 1) {
            // this login var will use for the session thing    
            session_start();
            $_SESSION['login'] = true;
            $_SESSION['uid'] = $user_data['uid'];
            return true;
        }
        else{
            return false;
        }
    }
    /*** for showing the username or fullname ***/

    public function get_fullname($uid){
    $sql = "SELECT * FROM users WHERE uid = $uid";
    $result = mysqli_query($this->db, $sql);
    $user_data = mysqli_fetch_array($result);

        echo $user_data['fullname'], "<br/>";
        echo $user_data['uemail'], "<br/>";
        echo $user_data['uid'], "<br/>";
    }

    public function check_user($uid){

    $sql5 = "SELECT uid from users WHERE uid='$uid'";
    $result1 = $this->db->query($sql5);
    $count_row1 = $result1->num_rows;

    return ($count_row1 ==1);


    }

    /*** starting the session ***/
    public function get_session(){
        return $_SESSION['login'];
    }

    public function user_logout() {
        $_SESSION['login'] = FALSE;
        session_destroy();
    }

}

我认为您可以使用这个类来创建所有用户的所有配置文件页面

对于在访问其他用户的配置文件时不显示注销按钮,您有一些解决方案:

1) 创建不同的php文件以显示其他用户配置文件; 2) 控制会话中注册的用户id是否与要显示的配置文件相同,如果不相同,则不显示按钮

当用户登录时,您将存储在此会话中:

$_SESSION['uid'] = $user_data['uid'];
现在,您已经记录了当前用户的ID,需要显示个人页面的用户ID。我认为在您的数据库中,用户的id是唯一的,或者是自动递增的主键

例如,X已登录并希望查看用户Y的个人页面

在$\u会话['uid']中,您已经存储了用户X的id。 当用户单击某个链接以查看Y的个人页面时,您必须通过查询检索用户Y的uid

HTML页面示例

<html>
<body>
<a href="personal_page.php?var=usernameY> Y </a>
</body>
</html>
<?php
$username_Y = $_REQUEST['var'];
$query = "SELECT uid FROM table WHERE username = $username_Y";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
  $user_Y_id = $row['uid'];
}

    if($_SESSION['uid'] != $user_Y_id) {
      //show button
    } else {
      // don't show button but other you want
    }
?>

PHP页面示例

<html>
<body>
<a href="personal_page.php?var=usernameY> Y </a>
</body>
</html>
<?php
$username_Y = $_REQUEST['var'];
$query = "SELECT uid FROM table WHERE username = $username_Y";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
  $user_Y_id = $row['uid'];
}

    if($_SESSION['uid'] != $user_Y_id) {
      //show button
    } else {
      // don't show button but other you want
    }
?>
根据您的代码

if (isset($_GET['uid'])) {
// Your Code of Check user exist? I don't get it
}
else if (isset($_SESSION['uid'], $_SESSION['login'])) {
// Your Code to print Logout
}
else
echo "Session not set";
这实际上没有意义,您首先要检查
uid
。我猜这是用户的唯一id。如果设置了
uid
,它甚至不会转到其他部分。如果我忽略了在您的else部分中,您没有检查当前用户是否与登录的用户相同,您应该执行以下操作:

if(isset($_SESSION['user'],$_GET['uid']))
 {
   if($_GET['uid']==$_SESSION['uid'])
    {
     //Your Code to Print Logout
    }
  else if($user->check_user($uid))
   {
    //User Exist and Not Logged in User
   }
  else if(!$user->check_user($uid))
   {
   //User Doesn't Exist
   }
 }
您必须使用GET参数检查登录用户的当前配置文件。我建议您先消除
if
条件,然后使用上述条件


编辑:如果你想打印用户是否存在,可以有多种方式,我只是编辑了一个例子,但它可以根据不同的情况有所不同这只是一个想法

有点帮助。但现在我似乎无法在用户不存在时设置错误。介意看一下更新的代码吗?\实际上,如果用户不存在,他将如何登录?我作为用户登录。但是假设我搜索一个不在数据库中的id,它会给我一个错误,即该用户配置文件不存在。EX(DB上只有2个用户配置文件)id=1,id=2,如果我键入id=3(错误,用户不存在)EDIT>WORKING@Prateek。但是,如何仅在profile.php(不带id)页面上获取错误消息只有在设置了
uid
session
变量时,此选项才起作用。尝试使用
echo
检查是否正在执行条件?