3

PHPに次のifステートメントがあります。

if($_SESSION['usrName']!='test1'){
    header('location:login.php');
}

しかし、私はそれを次のようにしたい:

if($_SESSION['usrName']!='test1' or 'user'){
    header('location:login.php');
}

しかし、PHPコードでそれを行う方法がわかりません。私はこれを試しました:

if($_SESSION['usrName']!='test1','user'){
    header('location:login.php');
}

この:

if(($_SESSION['usrName']!='test1')||($_SESSION['usrName']!='user')){
    header('location:login.php');
}

誰でも助けてもらえますか?

4

6 に答える 6

9
if (!in_array($_SESSION['usrName'], array('test1', 'user')) {
    header('location:login.php');
}

これは、変数 $_SESSION['usrName'] が文字列のリストにないかどうかをチェックして、追加の許可されたユーザーを簡素化します。

于 2013-07-30T18:20:18.977 に答える
9

を に置き換える必要が||あり&&ます。両方の条件が真の場合にのみリダイレクトしたいからです。

if(($_SESSION['usrName']!='test1') && ($_SESSION['usrName']!='user')){
    header('location:login.php');
}
于 2013-07-30T18:19:00.263 に答える
4

他の人が言ったように、ブール論理に注意する必要があります - (NOT X) || (NOT Y)is equal toですが、必要なのNOT (X AND Y)NOT (X OR Y)which is equal to(NOT X) AND (NOT Y)です。

この特定の状況では、他にもいくつかのオプションがありますが、試した無効な構文ほどきちんとしたものはありません。

まず、 はin_array()読みやすいですが、長いリストで頻繁に使用するとあまり効率的ではありません (このような単純なケースでは、パフォーマンスについて心配する価値はありません)。

$allowed_users = array('test1', 'user');
if ( ! in_array($_SESSION['usrName'], $allowed_users ) { ... }

または、ユーザー名をキーとしてハッシュを作成できます。PHP はリスト全体をループせずにキーをチェックできるため、これはリストが大きくなるにつれてより効率的になります。

$allowed_users = array('test1' => true, 'user' => true);
if ( ! array_key_exists($_SESSION['usrName'], $allowed_users) ) { ... }
// Or, if you don't mind PHP raising a few notices about accessing undefined keys
if ( ! $allowed_user[ $_SESSION['usrName'] ] ) { ... }

switch最後に、ラベルが通過するステートメントとdefault、「else」として機能するケースを使用できます。

switch ( $_SESSION['usrName'] )
{
    case 'test1':
    case 'user':
        // These users are allowed :)
    break;
    default:
        header('location:login.php');
}

これらのうちどれを使用するかは、コードが将来どのように成長すると予想されるかによって異なりますが、知っておくと便利なトリックです。

于 2013-07-30T18:37:42.340 に答える
2

あなたの最後の試みはほぼ正しいです。

でも...

if (var != something || var != something-else)

...これらの条件のいずれかが常に一致するため、常に true になります。一方が等しくても、他方が等しくなることはありません。

&&このような 2 つのネガをテストする場合は、OR ( ) の代わりにAND ( ) を使用する必要があります||

if (($_SESSION['usrName']!='test1') && ($_SESSION['usrName']!='user'))

これは、一方と等しくなく、他方とも等しくない場合に一致します。

于 2013-07-30T18:21:05.720 に答える
1

次のようなことをする必要があります:

if($_SESSION['usrName'] != 'test1' and $_SESSION['usrName'] != 'user'){
    header('location:login.php');
}

あなたの最初の試みは以下と同等です:

if(($_SESSION['usrName']!='test1') or 'user'){
    header('location:login.php');
}

2番目は無効な構文のようです

3 番目はほぼ正しいです。 「user」または「test1」と等しくないものがあるため||andorに置き換えるだけです。&&

于 2013-07-30T18:18:52.630 に答える
1

現在、条件のいずれかが真であるかどうかを確認しています。いずれかの条件が正しい場合、最後の条件は true と評価されます。両方の条件が真であるかどうかを確認しようとしていると思います。その場合、&&代わりに||.

試す:

if( ($_SESSION['usrName'] != 'test1') && ($_SESSION['usrName'] != 'user') ) {
    header('location:login.php');
}
于 2013-07-30T18:19:06.270 に答える