1

好的,我的 mail.php 有一个 php 代码,这样如果当前用户 id 与 to 或 from id 不匹配,它将显示一条错误消息,但我测试了它,任何使用都可以查看该消息,这是代码:

if (!$mail['to_id'] == $account['id'] && !$mail['from_id'] == $account['id']) {
    $system->message(L_ERROR, L_MAIL_ERROR_PERMISSION, './?area=forum&s=mail', L_CONTINUE);
}

但是当我添加 != 而不是 == 时,它会向所有人显示错误消息,包括发送消息的人。有谁知道我该如何解决这个问题?

4

2 回答 2

2

请改用此代码。

if ($mail['to_id'] != $account['id'] && $mail['from_id'] != $account['id']) {
    $system->message(L_ERROR, L_MAIL_ERROR_PERMISSION, './?area=forum&s=mail', L_CONTINUE);
}
于 2013-05-09T21:31:37.137 回答
2

你的逻辑是:

!$mail['to_id'] == $account['id'] 
&& 
!$mail['from_id'] == $account['id']

问题源于这样做:

!$mail['to_id']

!$mail['from_id']

逆运算符 (!) 翻转它所应用的值。在这种情况下,您正在翻转 $mail ID 的值。这可能不会像你想的那样做,因为我假设这些 ID 是整数。

从积极的角度考虑这一点可能会有所帮助,然后将整个事情颠倒过来。

积极的是:

$mail['to_id'] == $account['id'] 
&& 
$mail['from_id'] == $account['id']

它的反面是将整个东西包裹在一个“!”中。(注意括号):

!(
    $mail['to_id'] == $account['id'] 
    && 
    $mail['from_id'] == $account['id']
)

我们可以使用代数规则通过乘以“!”来转换该语句。针对每个元素(包括 AND 运算符)。

!($mail['to_id'] == $account['id'])    // Note you apply the inverse of to the whole expression
!&&                                    // this isn't an actual code but for demonstration purposes
!($mail['from_id'] == $account['id'])  // Note you apply the inverse of to the whole expression

这简化为:

$mail['to_id'] != $account['id']   // Not Equal is inverse of equal
||                                 // the inverse of && (AND) is || (OR)
$mail['from_id'] != $account['id'] // Not Equal is inverse of equal

其中指出:

“如果 Mail_To OR Mail_From ID 与 Account ID 不匹配,请执行以下代码”

因此,在一天结束时,您应该能够使用:

if( $mail['to_id'] != $account['id'] ||  $mail['from_id'] != $account['id'] )
{
    // do something
}

或者

if( !( $mail['to_id'] == $account['id']   &&   $mail['from_id'] == $account['id']) )
{
    // do something
}

两者都说同样的话。

我希望这会有所帮助!

于 2013-05-09T21:47:51.500 回答