我试图创建一个成员页面,但是当我以用户身份登录时 我需要一个注销按钮,如果我以(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");
}
?>
USERS.FUNCTIONS.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();
}
}
答案 0 :(得分:1)
根据您的代码
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
,它甚至不会转到其他部分。如果我忽略了你的其他部分你没有检查当前用户是否是登录的同一用户,你应该这样做:
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
条件并使用上述条件。
编辑:如果您想要在用户存在或不存在的情况下进行打印,可以有多种方式,我只是编辑以显示示例,但根据多种情况可能会有所不同。 这只是一个想法
答案 1 :(得分:0)
我认为你使用这个类来创建所有用户的所有个人资料页面。
如果您在访问其他用户的个人资料时没有显示退出按钮,那么您有一些解决方案:
1)创建一个不同的php文件来显示其他用户配置文件; 2)控制会话中注册的用户ID是否与您要显示的配置文件相同,如果没有,请不要显示按钮
当用户登录时,您可以在会话中存储:
$_SESSION['uid'] = $user_data['uid'];
现在,您已记录CURRENT用户的ID,需要您要显示个人页面的用户的ID。我认为在您的数据库中,用户的ID是唯一的或主键具有自动增量。
示例,X登录并希望查看用户Y的个人页面。
在$ _SESSION ['uid']中,您存储了用户X的ID。 当用户单击链接以查看Y的个人页面时,您必须使用查询检索用户Y的uid。
HTML PAGE示例
<html>
<body>
<a href="personal_page.php?var=usernameY> Y </a>
</body>
</html>
PHP页面示例
<?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
}
?>