PHP If(!isset(...)||!isset(...))

时间:2016-11-26 22:44:05

标签: php if-statement cookies isset

我正在尝试检查第一个$_COOKIE['one']是否存在或第二个$_COOKIE['two']是否存在,如果不存在则重定向用户。

此脚本运行时,这两个cookie中只有一个存在。

if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {
    header('Location: ./');
} else {
    ...
}

我尝试了很多东西,但是每次我进入这个,如果其中一个饼干总是存在的话。

3 个答案:

答案 0 :(得分:3)

这是倒置逻辑的简单情况。正如马克指出的那样,你需要使用布尔&& (AND)运营商。您正试图查看两者是否都不存在,然后发送标题。目前,如果存在,则无论如何都要发送标题。

只需更改cat file.txt | grep -E "(@|[0-9]+)"

即可

if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {

如果语句的左侧或右侧为真,则(||)返回true。并且(&&)仅在语句的两个部分都为真时才返回true。 Not(!)运算符反转true-> false和false->真正。

if (!isset($_COOKIE['one']) && !isset($_COOKIE['two'])) {会告诉您Cookie是否存在。如果cookie存在,则返回true。你没有使用它是正确的,因为你希望它告诉你cookie是否不存在(相反)。但是,如果BOTH cookie不存在,您只想发送标题。或者如果不存在则发送它。

答案 1 :(得分:2)

你写了一个与你真正想要的相反的逻辑。

你说那个

  

您正在尝试检查

这是一个if条件。

  

第一个 $_COOKIE['one']存在

为此你使用isset,你做了,这是对的。

  

第二个 $_COOKIE['two'] exists

所以你要使用OR运算符(||)

  

如果不存在则重定向用户。

这是else,然后使用header重定向。

将您的单词转换为文字代码,您将拥有:

if (isset($_COOKIE['one']) || isset($_COOKIE['two'])) {
    //... Do your thing
} else {
    header('Location: ./');
}

您的代码也适用于Mark在评论中提供的修复,但将来可能会让您感到困惑......

您也可以这样做以避免嵌套:

if (!(isset($_COOKIE['one']) || isset($_COOKIE['two']))) {
{
    header('Location: ./'); exit;
}

//... Do your thing

答案 2 :(得分:1)

如果只设置了一个cookie,那么您的if条件将始终为真,因此重定向将会发生。

更改||的{​​{1}},

&&