PHP 如果不是语句

2022-08-30 20:44:19

这可能是我的服务器的设置方式,但我正在用头撞墙。我想说的是,如果没有值或值不是“添加”或“删除”,那么就会出错,否则继续运行脚本。但是,无论是什么,我都会收到错误。$action$action

 $action = $_GET['a'];
 if((!isset($action)) || ($action != "add" || $action != "delete")){
     //header("location:index.php");
     echo "error <br>";
 }

$action正在正确设置,如果运行类似的东西,它的工作原理。这在我的本地主机上,因此可能是设置问题。if($action =="add")


答案 1

你的逻辑有点偏差。第二个应该是:||&&

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)

哎呀!条件刚刚成功并打印出“错误”,但它应该失败。事实上,如果你仔细想想,无论的值是什么,两个测试中的一个都会返回true。将 切换到 ,然后倒数第二行变为 ,这适当地简化为 。$action!=||&&if (true && false)if (false)

顺便说一句,有一种方法可以使用并进行测试工作。你必须使用德摩根定律否定其他一切,即:||

if ((!isset($action)) || !($action == "add" || $action == "delete"))

你可以用英语把它读成“如果操作不是(添加或删除),那么”。


答案 2

无论$action是什么,它总是不是“添加”或不是“删除”,这就是为什么if条件总是通过的原因。你想要的是使用 && 而不是||:

(!isset($action)) || ($action !="add" && $action !="delete"))

推荐