2011-10-29 7 views
1

セッション変数を使用してページへのアクセスを制限しようとしています。私はアクセスの3つのレベルがあります:管理者、ヘルプ、技術。ヘルプやハイテクアクセスのページでは管理者も許可されます。私はif文を書く方法を理解できません。それはすべてのレベルは(も「管理者」を含んでいること)[ヘルプ]に制限しなければならないページにアクセスすることができ、ここで示されているように私はそれを持っている場合問題を解決できません。issetステートメント

<?php 
    //Start session 
    session_start(); 

    //Check whether the session variable SESS_MEMBER_ID is present or not 
    if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) { 
     header("location: fail_access.php"); 
     exit(); 
    } 
    if ((!isset($_SESSION['SESS_ACCESSLVL']) == 'admin') || (!isset($_SESSION['SESS_ACCESSLVL']) == 'help')) { 
     header("location: fail_access.php"); 
     exit(); 
    } 
?> 

:ここに は、私が持っているコードです。 誰かが私の方法のエラーを指摘できますか?どんな助けでも大歓迎です。私はこれを完全に理解していないことは明らかです。

乾杯変数またはアレイのエントリが設定され、それに応じてブール値を返しているかどうか

+1

'のISSETを()' 'boolean'を返すので、'試してみることができ($ _ SESSION [ 'SESS_ACCESSLVL'])= = 'help'は "期待通り"としては機能しません。 –

答えて

2

試してみてください!

if (
    !isset($_SESSION['SESS_ACCESSLVL']) || 
    !(($_SESSION['SESS_ACCESSLVL'] == 'admin') || ($_SESSION['SESS_ACCESSLVL'] == 'help')) 
    ) 
{ 
    header("location: fail_access.php"); 
    exit(); 
} 

あなたはまた、ISSET http://php.net/manual/en/function.in-array.php

$allowedAccessLevels = array('admin', 'help'); 
if (
    !isset($_SESSION['SESS_ACCESSLVL']) || 
    !in_array($_SESSION['SESS_ACCESSLVL'], $allowedAccessLevels) 
    ) 
{ 
    header("location: fail_access.php"); 
    exit(); 
} 
+0

メイトのスポット!ご協力いただきありがとうございます。それは、私がしたいことをどうやってやるのか理解し始めるのに役立ちます。あなた自身のような喜んでいる人のおかげで、理解しようとしている私たちは、少なくとも、戦うチャンスを持っています。乾杯! – Spud

+0

喜んでそれはあなたのために働く。 – hafichuk

1

issetチェックします。どのような方法でも値を考慮したり返さない。

設定されているかどうかだけチェックし、設定されている場合は値を確認してください。

if(isset($_SESSION['SESS_ACCESSLVL'])) 
{ 
    $level = $_SESSION['SESS_ACCESSLVL']; 
    // Check $level 
} 
+0

ご協力ありがとうございます。 – Spud

1
!isset($_SESSION['SESS_ACCESSLVL']) == 'admin' 

何がここでやろうとしていますか? issetはブール値を返します。ブール値と文字列を比較しています。それについて考えてみてください。

これを試してください:あなたが持っていない限り

(isset($_SESSION['SESS_ACCESSLVL']) && $_SESSION['SESS_ACCESSLVL']==='admin') 

それが設定されていない場合、後者の条件が失敗するためisset部分は厳密に必要とされていませんが、私はそれがそうでない場合は警告をスローだと思う(彼らはオフ)。

0

issetはtrueまたはfalseを返します。この真偽値とアクセス文字列を比較しています。 PHPでは、true == 'some string'はTRUEなので、あなたのコードは皆を管理者にします。

+0

私は今それを見ることができます。私はこれらのことに手を差し伸べようとしています。インターネットは私の先生ですから、ときどき私を混乱させます。それを私に指摘してくれてありがとう。乾杯。 – Spud

関連する問題