使用 isset 定义索引不起作用

Using isset to define an index not working

这对我来说是新事物,我已经阅读并阅读了有关如何解决此问题的信息。从那以后,我的代码已经取得了长足的进步。

当我开始这篇文章时,我打算像这样定义每个请求:

if ($_REQUEST['do'] == 'remove') {
  $theme = 'default theme applied';
    setcookie("drcstyleaccent", "", time() - 3600, '/');
}

if ($_GET['accent'] == 'light') {
  $theme = 'light';
  setcookie('drcstyleaccent', 'light', time()+60*60*24*365, '/');
}

echo $theme . 'theme applied';

每个主题都将在单独的获取请求中定义,每个请求中都有一个新的 cookie/变量。

自从开始我的未定义索引搜索以来,我已将我的脚本升级到:

$accent = isset($_GET['accent']) ? $_GET['accent'] : '';

if ($_REQUEST['do'] == 'remove') {
    setcookie("drcstyleaccent", "", time() - 3600, '/');
} else {
  setcookie('drcstyleaccent', $accent, time()+60*60*24*365, '/');
}

echo $accent . ' theme applied';

从我读过的所有内容来看,这对我来说是正确的,但我不断收到未定义索引错误。根据我的阅读,$accent = isset($_GET['accent']) ? $_GET['accent'] : ''; 正在定义索引...

我也试过用 isset 包装 do 请求,但这应该不是必需的,因为 else 对吗?

我知道我可以用 error_reporting(E_ALL & ~E_NOTICE); 禁用错误,但我确实想要一个“作弊”。

我已准备好接受反对票,我知道这里已经涵盖了这一点。关于这方面的主题太多,无法一一筛选,我所发现的一切都帮助我到达了现在的位置,但现在我被困住了。

我设置索引哪里出错了?

您将需要 if 中的 isset。不管别的。您使用的数组项可能存在也可能不存在。

if (isset($_REQUEST['do']) and $_REQUEST['do'] == 'remove') {

I have tried also wrapping the do request with an isset but this should not be necessary because of the else right?

没有。通过 运行 $_REQUEST['do'] == 'remove',您正在访问索引 'do' 处的 $_REQUEST。如果未定义此索引,则会产生 Undefined index 错误。为了解决这个问题,在相等性测试前加上 isset():

if (isset($_REQUEST['do']) && $_REQUEST['do'] == 'remove') {
    // ...
}