【问题标题】:PHP & JS - Cookie value in If Statement causes BugPHP & JS - If 语句中的 Cookie 值导致错误
【发布时间】:2020-05-11 21:38:37
【问题描述】:

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

  1. 当一个 HTML“按钮”被按下时,它给一个 $_GET 数组赋值;
  2. $_GET 数组中存在这些值时,它会弹出一个 JavaScript 确认窗口;
  3. 如果用户按下“确定”,JS 将向$_COOKIE 数组提供true 的值。如果用户按下“CANCEL”,JS 会将$_COOKIE 数组的值传递给false
  4. 最后使用 PHP 检查$_COOKIE 数组,如果是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 确认窗口“确定”,一切正常,很棒,没有问题。

如果按下 JS 确认窗口“CANCEL”,STEP 4 if 语句仍然发生。

  • 我已尝试console.log(option),这对于 CANCEL 是错误的 按钮。
  • 我试过echo $_COOKIE['option'] 也是假的 取消按钮。

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

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

【问题讨论】:

  • PHP 在服务器上运行,JavaScript 在客户端上运行,它们不会同时运行。那么第 2 步和第 3 步的运行情况如何?
  • 好的,当你知道你在做什么需要将表单提交回服务器时,你就会明白了。 PHP 将执行代码,然后加载页面。它不会坐在那里等待 JavaScript 执行。 (而且我没有投反对票)
  • 我会回到绘图板上,了解AJAX 并分离您的 PHP、HTML 和 Javascript。由于 PHP 是在 Javascript 发送到浏览器运行之前处理的,因此您将获得意想不到的结果。因此,学习如何将它们分开将使您能够学习最佳实践,并限制将它们组合在一起时会弹出的奇怪错误。
  • @Grinnex。我不懂 PHP,但不确定 cookie 字符串如何匹配布尔值 true。
  • 你在JS中设置的cookie值是always一个字符串。但是您在 PHP 中的比较是错误的 - 因为在那里,您 not 与字符串进行比较。 text'true''false' 在 PHP 中是 both 真实值 - 'true' == true'false' == true 都产生 true。您在这里需要的是if ($_COOKIE['option'] == 'true')(甚至是===,以确保没有任何歧义。)

标签: javascript php html setcookie confirm


【解决方案1】:

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

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

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

text'true''false' 在 PHP 中都是真值 - 'true' == true'false' == true 都产生真值。

你需要的是if ($_COOKIE['option'] == 'true')(或者甚至是===,以确保没有任何歧义。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多