PHP & JS - If 语句中的 Cookie 值导致 Bug

PHP & JS - Cookie value in If Statement causes Bug

我正在尝试使用 HTML、JS 和 PHP 创建一个函数,它执行以下操作:

  1. 当按下 HTML “按钮”时,它会为 $_GET 数组赋值;
  2. $_GET 数组中存在这些值时,它会弹出 JavaScript 确认 window;
  3. 如果用户按下“确定”,JS 会将 true 的值提供给 $_COOKIE 数组。如果用户按“取消”,JS 将 false;
  4. 的值赋给 $_COOKIE 数组
  5. 最后 $_COOKIE 数组用 PHP 检查,如果是 true 它会做一些事情。否则它什么都不做。

每一步的代码在哪里:

// STEP 1
<a href="page.php?remove=true&id-organ=1">Remove</a>

// STEP 2 AND 3
if (isset($_GET['remove']) && isset($_GET['id-organ'])) {
       echo '
           <script>
                var option = confirm("REMOVE?");
                if (option == true) {
                    document.cookie = "option = true";
                } else {
                    document.cookie = "option = false";
                }
           </script>
       ';
}

// STEP 4
if ($_COOKIE['option'] == true) {
    echo '
        <script>
            window.alert("ORGAN WAS REMOVED!\n");
        </script>
    ';
    
} 

如果 JS 确认 Window 按下“确定”,一切正常,太棒了,没问题。

如果 JS 确认 Window“取消”被按下,步骤 4 if 语句无论如何都会发生。

从字面上反对所有“编程物理学”是没有意义的。 . .

谁能告诉我为什么会这样?难道我做错了什么?这种功能有更好的方法吗?

您在JS中设置的cookie值始终是一个字符串。 (根据定义,Cookie 内容 纯文本。没有人会阻止您 解释 该值,after 您以字符串形式收到它 - 例如,您可以将 JSON 编码的对象设置为 cookie 值。但这并没有改变 cookie 本身的值是并且将始终如此的事实是文字。)

if ($_COOKIE['option'] == true)

您在 PHP 中的比较在这里是错误的 - 因为在这里,您 不是 与字符串进行比较。

text'true''false' 在 PHP - 'true' == true 和 [=14 中都是 truth-y =] 两者都为真。

这里您需要的是 if ($_COOKIE['option'] == 'true')(甚至 ===,以绝对确保没有任何歧义。)