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");
}
?>

問題は、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 クラスを呼び出すため、これはログイン時にロードされますが、クラスはここに同じ方法で含まれているため、関数が表示されない理由がわかりません発砲。

4

2 に答える 2

0

elseif を使用して、ネストが深くなるのを止めることができます。また、なぜすべての関数を2回呼び出すのですか? if で 1 回だけで十分です。

于 2012-09-20T19:59:25.583 に答える
0

私はそれを解決しました。問題は Login クラスの上位にありました。Login db 接続は、session_start() が起動されたとき、つまり最初のログイン時にのみ作成されます。各関数で起動されたdb接続で新しいクラスを作成し、すべてがそのまま機能しました。

@arjan と @bigman に、ネストに関する書式設定のヒントを提供してくれてありがとう。

于 2012-09-22T12:05:46.973 に答える