PHP & JS - If 语句中的 Cookie 值导致 Bug
PHP & JS - Cookie value in If Statement causes Bug
我正在尝试使用 HTML、JS 和 PHP 创建一个函数,它执行以下操作:
- 当按下 HTML “按钮”时,它会为
$_GET
数组赋值;
- 当
$_GET
数组中存在这些值时,它会弹出 JavaScript 确认 window;
- 如果用户按下“确定”,JS 会将
true
的值提供给 $_COOKIE
数组。如果用户按“取消”,JS 将 false
; 的值赋给 $_COOKIE
数组
- 最后
$_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 语句无论如何都会发生。
- 我已经尝试
console.log(option)
这对于 CANCEL 是错误的
按钮。
- 我试过
echo $_COOKIE['option']
也是假的
对于取消按钮。
从字面上反对所有“编程物理学”是没有意义的。 . .
谁能告诉我为什么会这样?难道我做错了什么?这种功能有更好的方法吗?
您在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')
(甚至 ===
,以绝对确保没有任何歧义。)
我正在尝试使用 HTML、JS 和 PHP 创建一个函数,它执行以下操作:
- 当按下 HTML “按钮”时,它会为
$_GET
数组赋值; - 当
$_GET
数组中存在这些值时,它会弹出 JavaScript 确认 window; - 如果用户按下“确定”,JS 会将
true
的值提供给$_COOKIE
数组。如果用户按“取消”,JS 将false
; 的值赋给 - 最后
$_COOKIE
数组用 PHP 检查,如果是true
它会做一些事情。否则它什么都不做。
$_COOKIE
数组
每一步的代码在哪里:
// 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 语句无论如何都会发生。
- 我已经尝试
console.log(option)
这对于 CANCEL 是错误的 按钮。 - 我试过
echo $_COOKIE['option']
也是假的 对于取消按钮。
从字面上反对所有“编程物理学”是没有意义的。 . .
谁能告诉我为什么会这样?难道我做错了什么?这种功能有更好的方法吗?
您在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')
(甚至 ===
,以绝对确保没有任何歧义。)