这可能是我的服务器的设置方式,但我的头撞到了墙上。我想说的是,如果$action没有值,或者有一个值不是“添加”或“删除”,那么就有一个错误,否则继续运行脚本。但是,无论$action是什么,我都会得到一个错误。
$action = $_GET['a'];
if((!isset($action)) || ($action != "add" || $action != "delete")){
//header("location:index.php");
echo "error <br>";
}$action设置正确,如果运行像if($action =="add")这样的命令,它就能正常工作。这是在我的本地主机上,所以这可能是一个设置问题。
发布于 2010-07-31 13:31:47
你的逻辑有点不对劲。第二个||应为&&
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)糟了!条件刚刚成功并打印了"error",但它应该失败。实际上,如果您仔细想想,无论$action的值是多少,两个!=测试中的一个都会返回true。将||切换为&&,然后倒数第二行变为if (true && false),这将正确地缩减为if (false)。
顺便说一句,有一种方法可以使用||并让测试工作。您必须使用De Morgan's law否定其他所有内容,即:
if ((!isset($action)) || !($action == "add" || $action == "delete"))你可以用英语把它理解为"if action is not ( or add Or remove),then“。
发布于 2010-07-31 13:31:57
无论$action是什么,它总是要么不是“添加”,要么不是“删除”,这就是为什么if条件总是通过的原因。您想要的是使用&&代替||:
(!isset($action)) || ($action !="add" && $action !="delete"))发布于 2010-07-31 13:31:55
你说的是“如果它没有被设置,或者它不同于add,或者它不同于delete”。您知道,带有x != y的a != x && a != y必然是false,因为a不能同时是两个不同的值。
https://stackoverflow.com/questions/3376945
复制相似问题