我正在尝试将$_SESSION
变量与$_GET
变量进行比较。
两者都是数字:
$_SESSION['auth'] === $_GET['user']
如果两个结果都等于 1,则继续。
由于某种原因,这无法正常工作。使用时:if $_SESSION['auth'] = 2, and $_GET['user'] = 1
,它仍然继续。
编辑:
if(isset($_SESSION['auth'])===isset($_GET['user'])){
// proceeding code
}
这样,无论 $_GET 变量的结果如何,它仍然会继续。即使我用 (int) 尝试了下面的答案,它仍然给我相同的结果。
我确实尝试将 $_GET 变量设置为某个字符串进行测试,但这不会继续,因为我的 $_SESSION 变量1
。不过,它只通过任何数字的代码进行。
谢谢
当你有一个函数处于if
"等于"条件中时,你将与该函数返回的任何内容进行比较。
因此,在您的情况下,如果设置了参数,isset()
将返回true
,否则false
返回。
这是您要比较的内容,而不是值。
很明显,在比较之前,您要检查是否设置了变量。所以先这样做,然后开始比较。喜欢这个:
if(isset($_SESSION['auth']) && isset($_GET['user'])){
if($_SESSION['auth'] === (int)$_GET['user'])
// proceeding code
}
}
来自 GET/POST/REQUEST 超全局变量的任何内容都键入为字符串,即使它仅由数字组成。如果您在 SESSION 中存储了一个实际整数,那么您的严格比较 ( ===
) 将失败,因为您正在将字符串与 int 进行比较。
尝试
$_SESSION['auth'] === (int)$_GET['user']
相反,或者干脆放宽对==
的比较,它不比较类型。
您正在检查$_SESSION['auth']
和$_GET['user']
是否设置,而不是实际比较它们,请尝试
if(isset($_SESSION['auth']) && isset($_GET['user'])){
if($_SESSION['auth'] == $_GET['user'])
// proceeding code
}
}
没有看到其他代码,似乎您可能使用了错误的比较运算符。 条件表达式应传递的唯一方法是在以下情况下:
<?php
$a = 2;
if($a = 1 && $a = 5){
echo 'yes';
}else{
echo 'no';
}
?>
===
的用法用于值和类型的相同比较。 有关其他参考,请参阅有关比较运算符的文档。
更新:
看到您的代码后,您的条件表达式传递的原因是,如果isset($_SESSION['auth'])
的结果是True
并且isset($_GET['user'])
是True
那么它将通过,如果两者都False
,则相同。 您的条件表达式仅检查isset(VARIABLE)
的结果,而不检查其中的变量是否匹配。