带有逻辑运算符的if语句中的PHP函数

时间:2017-10-01 18:19:35

标签: php function if-statement

我有一个权限有限的页面。 只有'amministratore'个用户可以访问它,我希望向'dipendente'个用户授予相同的权限。

以下是控制器的工作代码:

function userHasRole($role) {
    include 'db.inc.php';
    try
    {
        $sql = "SELECT COUNT(*) FROM utenti
            INNER JOIN utentiruoli ON utenti.id = utenteid
            INNER JOIN ruoli ON ruoloid = ruoli.id
            WHERE mail = :mail AND ruoli.id = :ruoloid";
        $s = $pdo->prepare($sql);
        $s->bindValue(':mail', $_SESSION['mail']);
        $s->bindValue(':ruoloid', $role);
        $s->execute();
    } catch (PDOException $e) {
        $error = 'Errore nella ricarca del ruolo utente.';
        include 'error.html.php';
        exit();
    }

    $row = $s->fetch();

    if ($row[0] > 0) {
        return TRUE;
    } else {
        return FALSE;
    }
}
exit();
}   

if(!userHasRole('amministratore')){ 
    $error = 'Solo gli utenti registrati possono accedere a quest\'area';
    include '../accessonegato.html.php'; 
    exit();
}   

我还希望'dipendente'用户能够访问该页面,但如果我添加逻辑操作,它似乎无法工作:

if(!userHasRole('amministratore') || !userHasRole('dipendente')){ 
    $error = 'Solo gli utenti registrati possono accedere a quest\'area';
    include '../accessonegato.html.php'; 
    exit();
}   

有人能告诉我我做错了吗?

3 个答案:

答案 0 :(得分:1)

您要做的是提供错误“如果用户不是amministratore或dipendente”。这可以写成if(!(userHasRole('amministratore') || userHasRole('dipendente'))。如果我们根据De Morgan定律分配否定,可以将其重写为if(!userHasRole('amministratore') && !userHasRole('dipendente'))

每当您分发否定时,您都会从&&切换到||,反之亦然。

答案 1 :(得分:0)

而不是

  if (!userHasRole('amministratore') || !userHasRole('dipendente')) {

使用

 if (!(userHasRole('amministratore') || userHasRole('dipendente'))) {

它与检查一个角色基本相同,但现在你正在做两个角色。

答案 2 :(得分:0)

您必须更改if语句逻辑,现在它是:

((!userHasRole('amministratore')||!userHasRole('dipendente'))

它应该是:

(!(userHasRole('amministratore')|| userHasRole('dipendente'))