首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP If (!isset(...) || !isset(...))

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

Stack Overflow用户
提问于 2016-11-27 06:44:05
回答 4查看 12.4K关注 0票数 1

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

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

代码语言:javascript
复制
if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {
    header('Location: ./');
} else {
    ...
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-27 06:48:07

这是一个简单的反转逻辑的例子。正如Mark指出的,您需要使用布尔&& (AND)运算符。您正在尝试查看两者是否都不存在,然后发送标头。目前,如果其中之一存在,则无论如何都要发送标头。

只需更改if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {

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

如果语句的左侧或右侧为true,则返回true。只有当语句的两个部分都为真时,And (&&)才返回true。Not(!)运算符颠倒true->false和false-> true。

isset会告诉您cookie是否存在。如果cookie存在,则返回true。您使用not on this是正确的,因为您希望它告诉您cookie是否不存在(相反)。但是,您只想在两个cookie都不存在的情况下发送标头。或者在不存在的情况下发送。

票数 4
EN

Stack Overflow用户

发布于 2016-11-27 07:06:19

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

你说过的

你正在尝试检查

是否为

这是一个if条件。

the first $_COOKIE['one'] exists

为此,您使用了isset,您确实做到了,而且它是正确的。

第二个$_COOKIE['two'] exists

还是

因此,您将使用OR运算符( || )

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

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

将您的文字转换为文字代码,您将得到以下代码:

代码语言:javascript
复制
if (isset($_COOKIE['one']) || isset($_COOKIE['two'])) {
    //... Do your thing
} else {
    header('Location: ./');
}

您的代码也可以使用Mark在注释中提供的修复,但在将来可能会让您感到困惑……

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

代码语言:javascript
复制
if (!(isset($_COOKIE['one']) || isset($_COOKIE['two']))) {
{
    header('Location: ./'); exit;
}

//... Do your thing
票数 2
EN

Stack Overflow用户

发布于 2016-11-27 06:47:50

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

更改&&||

代码语言:javascript
复制
if (!isset($_COOKIE['one']) && !isset($_COOKIE['two'])) {
  header('Location: ./');
} else {
  // 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40823914

复制
相关文章

相似问题

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