PHP如果逻辑在第一次运行时返回一个结果,在所有后续运行中返回不同的结果

时间:2012-09-20 19:39:41

标签: php class function

我的主索引页面中有一些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-&gt; checkActivated();和$ login-&gt; 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();在网址中查找view =个人资料。事情是为了使逻辑达到甚至检查它的程度,它必须通过两个函数checkActivate();checkFirstLogin();,它不应该这样做虽然满足了这些标准,但它仍然可以。我希望我有意义。任何人都可以看到错误吗?

显然我的登录表单调用了存储笨拙函数的Login类,因此这将在登录时加载,但是这里的类包含方式相同所以我不确定为什么这些函数没有似乎在解雇。

2 个答案:

答案 0 :(得分:0)

你可以使用elseif来阻止嵌套深入。 另外,为什么要调用每个函数两次?只有一次在if应该足够了。

答案 1 :(得分:0)

我解决了。 Login类中的问题更高 - 在Login数据库连接中,只有在触发session_start()时才会创建,即首次登录时。创建了一个新的类,每个函数都启动了数据库连接,一切都按原样运行。

感谢@arjan和@bigman的格式提示r.e.嵌套。