我的主索引页面中的一些 php 逻辑有一点问题,这将包括基于某些功能结果的某些页面,主要与登录/注销以及用户在注册后第一次登录有关。管理包含的 php 如下:
更新:(根据@arjan 和@bigman 的建议,我将代码更新如下。最终结果仍然相同)。
<?php
if ($login->checkForRegisterPage()) {
include("views/pages/home.php");
// are we logged in ?
} elseif ($login->isLoggedIn()) {
// check whether account is activated
if (!$login->checkActivated()) {
include("views/pages/activate.php");
// check whether user has logged in before
} elseif ($login->checkFirstLogin()) {
include("views/pages/build_profile.php");
// check action in URL and redirect accordingly
} elseif ($checkaction->checkForBuildProfilePage()) {
include("views/pages/build_profile.php");
} elseif ($checkaction->checkForViewProfilePage()) {
include("views/pages/profile.php");
// if all else fails, load the dashboard
} else {
include("views/pages/dashboard.php");
}
} else {
// not logged in, showing the login form
include("views/pages/home.php");
}
?>
问题在于两个函数 $login->checkActivated(); 和 $login->checkFirstLogin(); 包括以下:
public function checkFirstLogin() {
$checkfirstlogin = $this->db->query("SELECT first_login FROM users WHERE first_login = 'Y' AND user_name = '".$this->user_name."';");
if($checkfirstlogin->num_rows == 1) {
return true;
} else {
return false;
}
}
public function checkActivated() {
$checkactivated = $this->db->query("SELECT activated FROM users WHERE activated = 'N' AND user_name = '".$this->user_name."';");
if($checkactivated->num_rows == 1) {
return false;
} else {
return true;
}
}
当用户第一次登录时,这些函数会返回正确的结果,并且我会收到我想要的页面。但是,登录后,我仍然可以单击并转到页面上的其他链接,例如checkForViewProfilePage();
在 URL 中查找 view=profile。事情是为了让逻辑达到它甚至检查的地步,它必须通过两个函数checkActivate();
和checkFirstLogin();
. 我希望我说得通。任何人都可以看到错误吗?
显然,我的登录表单调用了存储笨拙函数的 Login 类,因此这将在登录时加载,但是该类在这里以相同的方式包含,所以我不确定为什么这些函数似乎不是射击。