他の人が言ったように、ブール論理に注意する必要があります - (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');
}
これらのうちどれを使用するかは、コードが将来どのように成長すると予想されるかによって異なりますが、知っておくと便利なトリックです。