Bro*_*ke. 15 php if-statement conditional-operator
这可能是我的服务器设置的方式,但我正在撞墙.我想要做的是说,如果$action没有值或者有一个不是"添加"或"删除"的值而不是有错误,那么继续运行脚本.但是,无论是什么,我都会收到错误$action.
$action = $_GET['a'];
if((!isset($action)) || ($action != "add" || $action != "delete")){
//header("location:index.php");
echo "error <br>";
}
Run Code Online (Sandbox Code Playgroud)
$action正在设置正确,如果运行类似的if($action =="add")工作.这是在我的本地主机上,所以可能是一个设置问题.
Joh*_*ica 26
你的逻辑略有偏差.第二个||应该是&&:
if ((!isset($action)) || ($action != "add" && $action != "delete"))
Run Code Online (Sandbox Code Playgroud)
您可以通过尝试样本值来了解原始行失败的原因.让我们说$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)
Run Code Online (Sandbox Code Playgroud)
哎呀!条件刚刚成功并打印出"错误",但它应该失败了.事实上,如果你考虑它,无论价值$action是多少,两个!=测试中的一个将返回true.切换||到&&,然后第二行到最后一行变为if (true && false),正确减少到if (false).
顺便说一句,有一种方法可以使用||并进行测试工作.你必须使用De Morgan定律否定其他一切,即:
if ((!isset($action)) || !($action == "add" || $action == "delete"))
Run Code Online (Sandbox Code Playgroud)
你可以用英语读作"如果动作不是(添加或删除),那么".
Jer*_*ten 10
无论$ action是什么,它总是不是"添加"或不是"删除",这就是if条件总是通过的原因.你想要的是使用&&而不是||:
(!isset($action)) || ($action !="add" && $action !="delete"))
Run Code Online (Sandbox Code Playgroud)