我是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>
应该发生的是,在div id="left"上,应该有一组不同的链接和名称,这取决于用户是否登录。
//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);
}
这是User类负责将$_SESSION['logged']更改为TRUE的方法。我在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;
}
您在index.php
的第三行设置$_SESSION['logged'] = FALSE
。无论User
的登录状态如何,这一行都将logged
的值设置为false
,从而不满足后面的User::isLoggedIn()
条件。