我在我的主索引頁面中遇到了一些有關php邏輯的小問題,主要包括某些基於某些函數的結果的頁面用於登錄/註銷以及用戶在註冊後第一次登錄。管理包含的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類,所以這將在登錄時加載,但類在這裏包含相同的方式,所以我不知道爲什麼這些函數不會「 t似乎在射擊。
需要這樣做的原因是,目前在views/pages/activate.php id中包含的激活表單在登錄後立即加載,但當用戶輸入錯誤的激活碼時不能重定向回自身,而是改爲加載views/pages/dashboard.php就好像該帳戶已被激活並且之前已經登錄過,兩者都不是真實的。 –
@bigman我不確定是否把這看作是對業餘編碼的恭維或輕微。 –
不要把它當作輕微的,把它當作建設性的批評。以更簡潔的方式處理代碼,並嘗試提出一個更清晰的解決方案,這通常是在您找到答案的時候。 – wesside