在PHP中检查COOKIE时未定义索引

在PHP中检查COOKIE时未定义索引,php,cookies,Php,Cookies,我在访客电脑上设置了一个cookie,每24小时显示一次通知。最近,我在错误日志中开始出现以下错误: PHP: undefined index notice in ** 我使用以下代码检查cookie是否存在,是否有值,如果没有,则显示通知: if($_COOKIE['notice'] != 'yes') echo 'notice'; } 我可以使用以下方法避免PHP通知: if((isset($_COOKIE['notice']) || !isset($_COOKIE['noti

我在访客电脑上设置了一个cookie,每24小时显示一次通知。最近,我在错误日志中开始出现以下错误:

PHP: undefined index notice in **
我使用以下代码检查cookie是否存在,是否有值,如果没有,则显示通知:

if($_COOKIE['notice'] != 'yes')  
   echo 'notice';
}
我可以使用以下方法避免PHP通知:

if((isset($_COOKIE['notice']) || !isset($_COOKIE['notice'])) && $_COOKIE['notice'] != 'yes')
有没有一种方法可以像我以前做的那样一步一个检查,或者用类似的方法


谢谢

在尝试查找内部变量之前,您始终需要知道是否设置了变量,所以是的。。你需要检查一下。而且,你的逻辑是错误的。。您正在检查
通知
是否已设置(始终为true),并检查
通知
是否为“是”

代码应该是这样的:

if ( (!isset($_COOKIE['notice'])) || ( (isset($_COOKIE['notice'])) && ($_COOKIE['notice'] != 'yes') ) ) {
  //Show the notice
}

源中的索引“notice”与错误消息中报告的索引“test”不匹配。为避免引起注意,请在读取变量或索引之前对其进行验证。这里有两个验证函数

isset() 是对变量/索引已设置且不为空的肯定检查

if (isset($_COOKIE['notice']) && $_COOKIE['notice'] == 'yes') {
  // success
  echo 'Cookie equals "yes".';
}
您可以使用&&(and)作为第二个条件,这也必须是真的

空的() 是对索引/变量不存在或其值被视为空(NULL、0、、array())的否定检查


您可以使用| |(或)将其与需要为FALSE的其他条件结合起来

它不会像这样工作,因为您的代码正在检查cookie是否已设置…如果未设置,则不会显示通知…我正在检查
$\u cookie['notice']!='“是”
在收到此通知之前,此通知旨在确定cookie是否已设置,以及它是否具有值“是”。如果您查找我的第二段代码,这实际上是我的答案:D我想知道是否有较短的方法来执行此操作?不一样,请检查它。同样不,没有自定义函数是不可能使它变短的。这是我的代码
if((isset($\u COOKIE['notice']))| |!isset($\u COOKIE['notice'])和&$\u COOKIE['notice']!='yes')
除了我在
前面提到的
isset
之外,这不一样吗!ISSET
?用英语(或者类似的话,我的主要语言不是英语):您正在评估以下内容。如果存在cookie
通知
,则显示通知(
|
是短路或短路),或者如果未设置
通知
且未设置cookie,则显示通知。这是错误的,因为如果你没有cookie,你就没有cookie,也没有cookie的价值。你也会因此收到通知。通知实际上是由这个变量引起的。我只是在问题中写错了。你的答案不起作用,因为如果设置了cookie但没有值“yes”,该怎么办?我让示例更具体了一点。同样地,第一个函数是正数,所以它是不相关的…它检查cookie是否有值“yes”…关于第二个,如果cookie存在,有值,但是值不等于“是”哦…对不起…我假设空的值与相同!是的,除了!isset仅用于空值…因此您是对的:)
if (empty($_COOKIE['notice']) || $_COOKIE['notice'] != 'yes') {
   // error
  echo 'Cookie does not exists, is empty or does not equal "yes".';
}