2017-10-12 8 views
-3

私はPHPでアプリケーションを構築しており、単一のindex.phpファイルからルーティングとユーザー管理(セッションとCookieを使用)を処理しようとしています。複数のswitch文を1つのPHPファイルで使用する

次のコードブロックは、私が設定した基本的なルーティングロジックです。

$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

(isset($ _ COOKIE ['uid']))を実行して$ statusに割り当てます。 –

+0

@DhavalChhedaがそれを行いました。今度はswitch文の中のケースが冗長になります。 –

答えて

0

$ステータス= ISSET($ _ COOKIE [ 'uidの'])$ _ COOKIE [ 'uidの']: '';?

+1

このコードは質問に答えるかもしれませんが、なぜこのコードが質問に答えるか、および/またはどのようにして追加の文脈を提供するかによって、長期的な価値が向上します。 ***良い答え***は、何が行われたのか、それがOPのためだけでなく、将来の訪問者のためにそうした方法で行われた理由について、常に説明します。マンゴーが言っているように、「コードは答えが悪いだけです!」* –

+2

この非常に質の低い回答のアップボトムを理解することができません。 –

+0

みんなで、それは簡単な自己説明的なコード行です、それは本当に説明が必要ですか? – Webdesignamite

2

あなたの値はまだ設定されておらず、複数のケースステートメントに関連していないという問題があります。値を確認してから使用する必要があります。

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

switch文は必要ありませんか?私はデフォルトの動作を設定できるようにswitch文を使用していることに注意してください。 –

+0

@JerryEjonaviあなたはそうしないでしょう。これらの値をすべてif/elseに入れて、それを使うことができます。基本的に私のポストの例を拡張するだけです。 – KaffineAddict

関連する問題