主にログイン/ログアウトと、ユーザーが登録後に初めてログインするときに、いくつかの関数の結果に基づいて特定のページが含まれる、メイン インデックス ページのいくつかの 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");
}
?>
問題は、2 つの関数 $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 を探します。問題は、ロジックがそれをチェックするポイントに到達するためには、 と の 2 つの関数を通過するcheckActivate();
必要checkFirstLogin();
があり、これらの基準が満たされている間は実行できないはずですが、それでも可能です。 . 私が理にかなっていることを願っています。誰でもエラーを見ることができますか?
明らかに、私のログインフォームは、ぎこちない関数が格納されている Login クラスを呼び出すため、これはログイン時にロードされますが、クラスはここに同じ方法で含まれているため、関数が表示されない理由がわかりません発砲。