我正在尝试将$_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
,因此无法继续。它只通过任何数字的代码进行。
由于
答案 0 :(得分:2)
当你在if
“等于”条件中有一个函数时,你将与该函数返回的函数进行比较。
因此,在您的情况下,isset()
如果设置了参数则返回true
,否则返回false
。
这就是你要比较的,而不是价值。
很明显,您需要在比较之前检查是否设置了变量。所以先做,然后开始比较。像这样:
if(isset($_SESSION['auth']) && isset($_GET['user'])){
if($_SESSION['auth'] === (int)$_GET['user'])
// proceeding code
}
}
答案 1 :(得分:1)
来自GET / POST / REQUEST超级全局的任何内容都被输入为字符串,即使它只包含数字。如果您在SESSION中存储了一个实际的整数,那么您的严格比较(===
)将失败,因为您正在将字符串与int进行比较。
尝试
$_SESSION['auth'] === (int)$_GET['user']
相反,或者只是将比较放宽到==
,而不是比较类型。
答案 2 :(得分:1)
如果没有看到其他代码,您可能会使用错误的比较运算符。条件表达式应该通过的唯一方法是在以下情况中:
<?php
$a = 2;
if($a = 1 && $a = 5){
echo 'yes';
}else{
echo 'no';
}
?>
===
的用法是对值和类型进行相同的比较。有关其他参考,请参阅comparison operators上的文档。
<强>更新强>
看到你的代码之后,你的条件表达式传递的原因是因为isset($_SESSION['auth'])
的结果是True
而isset($_GET['user'])
是True
那么它会通过而且如果两者都是False
,则相同。您的条件表达式仅检查isset(VARIABLE)
的结果,而不检查匹配内的变量。
答案 3 :(得分:1)
您正在检查$_SESSION['auth']
和$_GET['user']
是否已设置或未设置,而不是实际比较它们,请尝试
if(isset($_SESSION['auth']) && isset($_GET['user'])){
if($_SESSION['auth'] == $_GET['user'])
// proceeding code
}
}