这可能是我的服务器设置方式,但我正在用头撞墙。我想说的是,如果 $action
没有值或值不是“add”或“delete”,则会出现错误,否则继续运行脚本。但是,无论 $action
是什么,我都会收到错误消息。
$action = $_GET['a'];
if((!isset($action)) || ($action != "add" || $action != "delete")){
//header("location:index.php");
echo "error <br>";
}
$action
设置正确,如果运行类似 if($action =="add")
的程序,它会起作用。这是在我的本地主机上,因此可能是设置问题。
最佳答案
你的逻辑有点不对。第二个 ||
应该是 &&
:
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 (假)
。
顺便说一句,有一种方法可以使用 ||
并进行测试。您必须使用 De Morgan's law 否定所有其他内容,即:
if ((!isset($action)) || !($action == "add" || $action == "delete"))
您可以将其用英语读作“如果操作不是(添加或删除),则”。
关于PHP if not 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376945/