我正在尝试检查第一个$_COOKIE['one']
是否存在或第二个$_COOKIE['two']
是否存在,如果不存在则重定向用户。
此脚本运行时,这两个cookie中只有一个存在。
if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {
header('Location: ./');
} else {
...
}
我尝试了很多东西,但是每次我进入这个,如果其中一个饼干总是存在的话。
答案 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}},
&&