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

时间:2013-11-25 23:48:25

标签: php cookies

我在访客的PC上设置了一个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')

有没有办法像我一样或以类似的方式一步完成检查?

由于

2 个答案:

答案 0 :(得分:15)

源中的索引'notice'与错误消息中报告的索引'test'不匹配。为避免出现通知,请在读取变量或索引之前对其进行验证。以下是验证的两个功能。

isset()函数

是否正确检查变量/索引是否设置而不是NULL

if (isset($_COOKIE['notice']) && $_COOKIE['notice'] == 'yes') {
  // success
  echo 'Cookie equals "yes".';
}

你可以使用&& (和)对于第二个条件,也必须为真。

空()

是否检查索引/变量不存在或者具有被视为空的值(NULL,0,'',array())。

if (empty($_COOKIE['notice']) || $_COOKIE['notice'] != 'yes') {
   // error
  echo 'Cookie does not exists, is empty or does not equal "yes".';
}

你可以使用|| (或)将其与需要为FALSE的其他条件相结合。

答案 1 :(得分:1)

在尝试查找内部的内容之前,您始终需要知道是否设置了变量,所以是..您需要进行检查。另外,你的逻辑是错误的......你正在检查notice是否设置(总是如此)并检查notice是否为“是”。

代码应该是这样的:

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