0

我的主索引页面中的一些 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 类,因此这将在登录时加载,但是该类在这里以相同的方式包含,所以我不确定为什么这些函数似乎不是射击。

4

2 回答 2

0

您可以使用 elseif 来阻止嵌套更深。另外,为什么要调用每个函数两次?if 中只有一次就足够了。

于 2012-09-20T19:59:25.583 回答
0

我解决了。问题在 Login 类中更高 - 在 Login db 连接仅在 session_start() 被触发时创建,即在第一次登录时。创建了一个新类,其中每个函数都启动了 db 连接,并且一切都按原样运行。

感谢@arjan 和@bigman 提供重新嵌套的格式化提示。

于 2012-09-22T12:05:46.973 回答