这可能是我的服务器设置的问题,但我现在正一头撞在墙上。我想做的是,如果 $action
没有值,或者值不是 add" 或 delete",那么就会出错,否则就继续运行脚本。但是,无论 $action
是什么,我都会出错。
$action= $_GET['a'];
if((!isset($action)) || ($action !="add" || $action !="delete") ){
//header("location:index.php");
echo "error <br>";
}
如果运行类似 "if($action =="add") "的命令,"$action "就会正常工作。这是在我的本地主机上发生的,因此可能是设置问题。
你的逻辑稍有偏差。第二个 ||
应该是 &&
:
if ((!isset($action)) || ($action != "add" && $action != "delete"))
通过尝试一个示例值,您就能知道为什么您的原始行会失败。假设 $action
是 "delete"
。下面是条件是如何一步一步减少的:
// $action == "delete"
if ((!isset($action)) || ($action != "add" || $action != "delete"))
if ((!true) || ($action != "add" || $action != "delete"))
if (false || ($action != "add" || $action != "delete"))
if ($action != "add" || $action != "delete")
if (true || $action != "delete")
if (true || false)
if (true)
哎呀!条件刚刚成功并打印了 "错误",但它本应失败。事实上,仔细想想,无论 $action
的值是多少,两个 !=
测试中的一个都会返回 true。将 ||
改为 &&
,倒数第二行就变成了 if (true && false)
,正确地简化为 if (false)
。
顺便说一下,有一种方法可以使用 ||
,并使测试生效。您必须使用 De Morgan'law 否定其他一切,即:
if ((!isset($action)) || !($action == "add" || $action == "delete"))
您可以将其理解为:"if action is not (either add or remove), then"。