我是PHP的新手,我无法理解为什么我的代码无法按预期工作。我在类控制器上有两个函数,其中一个应该在用户注销时被调用,其中一个在用户登录时被调用。但是发生的是函数从未被调用,我不知道为什么。仅调用用户注销时的功能。
//index.php
<!DOCTYPE html>
<?php
require_once 'Control/Controller.php';
session_start();
$_SESSION['logged'] = FALSE;
?>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="mid">
<div id="left">
<?php
if (User::isLogged())
{
$menu = Controller::initMenuUser();
}
else
{
$menu = Controller::initMenuGuest();
}
if (!empty($menu))
{
foreach ($menu as $item)
{
echo '<li><a href="' . $item['url'] . '">' . $item['text'] . '</a>';
}
}
</div>
</div>
</body>
</html>
应该发生的是,在id =“left”的div上,应该有一组不同的链接和名称,具体取决于用户是否登录。
//Controller.php
...
public static function initMenuGuest()
{
$menu = array(
array(
'url' => 'index.php?page=Login',
'text' => 'Login'
),
array(
'url' => 'index.php?page=Register',
'text' => 'Register'
)
);
return $menu;
}
public static function initMenuUser()
{
$menu = array(
array(
'url' => 'index.php?page=Profile',
'text' => 'Profile'
),
array(
'url' => 'index.php?page=Cart',
'text' => 'Cart'
),
array(
'url' => 'index.php?logout=true',
'text' => 'Logout'
),
array(
'url' => 'index.php?page=Administration',
'text' => 'Administration'
)
);
return($menu);
}
以下是负责将$ _SESSION ['logged']更改为TRUE的User类的方法。我在Controller.php上调用了这个函数。 if(isset($ _ POST ['login']))然后调用该函数。 $ _POST ['login']是index.php
上的一个表单 //User.php
public static function login()
{
$login = $_POST['loginl'];
$password = $_POST['passwordl'];
$u = new User($login);
$res = $u ->check();
$udb = $res->fetch_object();
if (password_verify($password, $udb->password))
{
$_SESSION['user'] = $udb->login;
$_SESSION['id'] = $udb->id;
$_SESSION['logged'] = TRUE;
$msg = 'Welcome '.$_SESSION['user'].' '.$_SESSION['logged'];
}
else
{
$msg = "Wrong Login information.";
}
$res->free();
return $msg;
}
public static function isLogged()
{
if ($_SESSION['logged'] == TRUE)
{
$res = TRUE;
}
else
{
$res = FALSE;
}
return $res;
}
答案 0 :(得分:0)
您在$_SESSION['logged'] = FALSE
的第三行设置了index.php
。无论User
的登录状态如何,此行都会将logged
的值设置为false
,从而导致后续的User::isLoggedIn()
条件失败。
删除该行。