首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP if not语句

问PHP if not语句
EN

Stack Overflow用户
提问于 2010-07-31 13:29:02
回答 7查看 195.7K关注 0票数 19

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

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

$action设置正确,如果运行像if($action =="add")这样的命令,它就能正常工作。这是在我的本地主机上,所以这可能是一个设置问题。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-31 13:31:47

你的逻辑有点不对劲。第二个||应为&&

代码语言:javascript
复制
if ((!isset($action)) || ($action != "add" && $action != "delete"))

您可以通过尝试一个样本值来了解原始行失败的原因。假设$action是"delete"。下面是条件如何一步一步减少:

代码语言:javascript
复制
// $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否定其他所有内容,即:

代码语言:javascript
复制
if ((!isset($action)) || !($action == "add" || $action == "delete"))

你可以用英语把它理解为"if action is not ( or add Or remove),then“。

票数 30
EN

Stack Overflow用户

发布于 2010-07-31 13:31:57

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

代码语言:javascript
复制
(!isset($action)) || ($action !="add" && $action !="delete"))
票数 11
EN

Stack Overflow用户

发布于 2010-07-31 13:31:55

你说的是“如果它没有被设置,或者它不同于add,或者它不同于delete”。您知道,带有x != y的a != x && a != y必然是false,因为a不能同时是两个不同的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3376945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档