2017-10-12 24 views
-3

我正在PHP中構建應用程序,我試圖從單個index.php文件處理路由和用戶管理(使用會話和cookie)。在單個PHP文件中使用多個switch語句

下一塊代碼是我設置的基本路由邏輯。

$request_uri = explode('?', $_SERVER['REQUEST_URI'], 2); 

switch ($request_uri[0]) { 
// Home page 
case '/': 
    require 'partial/_main.php'; 
    break; 
// About page 
case '/about': 
    // do logic 
    break; 
// Everything else 
default: 
    header('HTTP/1.0 404 Not Found'); 
    echo "<h1>Not Found</h1>"; 
    break; 
} 

我也想控制未登錄或登錄的用戶可以看到網站的其他部分。

例如:

$status = $_COOKIE['uid']; 

switch ($status) { 
case $status === '': 
    // Not logged in 
    // echo "Not logged in"; 
    break; 

default: 
    echo "Hello there, ".$status; 
    require 'partial/_user-actions.php'; 
    break; 
} 

現在的問題是我無法檢查$_COOKIE['uid']當它沒有設置。我收到一個「未定義的變量」錯誤。

+2

首先運行if(isset($ _ COOKIE ['uid'])),然後將其分配給$ status –

+0

@DhavalChheda做到了。現在,我的switch語句中的情況變得多餘。 –

回答

0

$ status = isset($ _ COOKIE ['uid'])?$ _ COOKIE ['uid']:'';

+1

儘管此代碼可能回答這個問題,但提供關於此代碼爲何和/或如何回答此問題的其他上下文可提高其長期價值。一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。正如Mungo所說,*「代碼只會回答不好!」* –

+2

我無法理解這個質量非常低的問題。 –

+0

來吧,這是一個簡單的自我解釋的代碼行,它真的需要一個解釋嗎? – Webdesignamite

2

問題是您的價值尚未設置,並且與多個case語句無關。在嘗試使用它之前,您需要檢查該值。

if(isset($_COOKIE['uid'])) { 
    $status = $_COOKIE['uid']; 
} else { 
    $status = ''; 
} 
+0

那我不需要switch語句嗎?請注意,我正在使用switch語句,以便可以設置默認行爲。 –

+0

@JerryEjonavi你不會的。你可以把所有這些值放在一個if/else中,然後使用它。基本上只是擴展我的帖子中的例子。 – KaffineAddict