PHP if not 语句

标签 php if-statement conditional-operator

这可能是我的服务器设置方式,但我正在用头撞墙。我想说的是,如果 $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/

相关文章:

PHP 变量变量

javascript - react 渲染逻辑 && vs 三元运算符

php - mysql_select 成功,返回 null

php - 运行 MySQL 查询时出错,寻找正确的语法

php - SimpleSamlPHP SimpleSAML_Error_NoState : NOSTATE

c - 避免大量的 if-else 检查

C 中 {0,1,2,3,4,5,6,7,8,9} 之外的条件

javascript - 带有 css 值的 jQuery/javascript if 语句

python - 使用 Python 三元条件运算符执行多个操作

我可以在 C 中使用按位运算符而不是条件运算符吗?