比较session变量和get变量PHP

比较session变量和get变量PHP,php,session,get,comparison,integer,Php,Session,Get,Comparison,Integer,我试图比较一个$\u会话变量和一个$\u GET变量 两者都是数字: $_SESSION['auth'] === $_GET['user'] 如果两个结果都等于1,则继续 由于某些原因,这无法正常工作。当使用:时,如果$\u SESSION['auth']=2,并且$\u GET['user']=1,则仍会继续 编辑: 这样,无论$u GET变量的结果是什么,它都会继续进行。即使我用(int)尝试下面的答案,它仍然给出相同的结果 我确实尝试将$\u GET variable设置为要测试的某个字

我试图比较一个
$\u会话
变量和一个
$\u GET
变量

两者都是数字:

$_SESSION['auth'] === $_GET['user']
如果两个结果都等于1,则继续

由于某些原因,这无法正常工作。当使用:
时,如果$\u SESSION['auth']=2,并且$\u GET['user']=1
,则仍会继续

编辑:

这样,无论$u GET变量的结果是什么,它都会继续进行。即使我用(int)尝试下面的答案,它仍然给出相同的结果

我确实尝试将$\u GET variable设置为要测试的某个字符串,但没有继续,因为我的$\u会话变量是
1
。不过,它只能通过带有任何数字的代码进行操作


谢谢

GET/POST/REQUEST超全局文件中的任何内容都是以字符串形式输入的,即使它只包含数字。如果在会话中存储了实际整数,则严格比较(
==
)将失败,因为您正在将字符串与int进行比较

试一试


相反,或者简单地将比较放在不比较类型的
=

GET/POST/REQUEST超全局变量中的任何内容都是作为字符串键入的,即使它只包含数字。如果在会话中存储了实际整数,则严格比较(
==
)将失败,因为您正在将字符串与int进行比较

试一试


相反,或者简单地将比较放在不比较类型的
=
上。

在没有看到其他代码的情况下,您可能使用了错误的比较运算符。条件表达式应通过的唯一方法是在以下情况下:

<?php
$a = 2;

if($a = 1 && $a = 5){
    echo 'yes';
}else{
    echo 'no';
}
?>

使用
==
可以对值和类型进行相同的比较。有关更多参考信息,请参阅上的文档

更新:


查看代码后,条件表达式传递的原因是,如果
isset($\u SESSION['auth'])
的结果为
True
isset($\u GET['user'])
的结果为
True
,那么它将传递,如果两者都为
False
,则传递的结果相同。您的条件表达式只检查
isset(VARIABLE)
的结果,而不检查其中的变量是否匹配

在没有看到其他代码的情况下,您可能使用了错误的比较运算符。条件表达式应通过的唯一方法是在以下情况下:

<?php
$a = 2;

if($a = 1 && $a = 5){
    echo 'yes';
}else{
    echo 'no';
}
?>

使用
==
可以对值和类型进行相同的比较。有关更多参考信息,请参阅上的文档

更新:


查看代码后,条件表达式传递的原因是,如果
isset($\u SESSION['auth'])
的结果为
True
isset($\u GET['user'])
的结果为
True
,那么它将传递,如果两者都为
False
,则传递的结果相同。您的条件表达式只检查
isset(VARIABLE)
的结果,而不检查其中的变量是否匹配

您正在检查
$\u SESSION['auth']
$\u GET['user']
是否都已设置或未设置,而不是实际比较它们,请重试

if(isset($_SESSION['auth'])  && isset($_GET['user'])){
    if($_SESSION['auth'] == $_GET['user'])
    // proceeding code
    }
}

您正在检查
$\u SESSION['auth']
$\u GET['user']
是否都已设置或未设置,而不是实际比较它们,请重试

if(isset($_SESSION['auth'])  && isset($_GET['user'])){
    if($_SESSION['auth'] == $_GET['user'])
    // proceeding code
    }
}

当您在
if
等于”条件中有一个函数时,您将与该函数返回的值进行比较

因此,在您的情况下,
isset()
如果设置了参数,则返回
true
,否则返回
false

这是你要比较的,不是价值观

很明显,在比较之前,您需要检查变量是否已设置。所以,先这样做,然后开始比较。像这样:

if(isset($_SESSION['auth'])  && isset($_GET['user'])){

    if($_SESSION['auth'] === (int)$_GET['user'])
    // proceeding code
    }

}

当您在
if
等于”条件中有一个函数时,您将与该函数返回的值进行比较

因此,在您的情况下,
isset()
如果设置了参数,则返回
true
,否则返回
false

这是你要比较的,不是价值观

很明显,在比较之前,您需要检查变量是否已设置。所以,先这样做,然后开始比较。像这样:

if(isset($_SESSION['auth'])  && isset($_GET['user'])){

    if($_SESSION['auth'] === (int)$_GET['user'])
    // proceeding code
    }

}

他说它确实在继续,这就是为什么我对这个问题感到非常困惑,因为没有可能的方式继续。他说它确实在继续,这就是为什么我对这个问题感到非常困惑,因为没有可能的方式继续。你现在的代码是无效的。如果您使用的是等于(严格或不严格)比较,那么您将无法继续,因为结果将为false,这将停止代码块。请将其他代码发布到以获得更好的帮助。@dagon不,我只是没有在问题中插入它来进行此简化,以在条件表达式之前回显值,以检查这些变量的实际输出。@RobB我回显了值,事实上,这些值是它应该显示的。不显示您实际使用的代码并不会使它变得简单,它使它变得毫无意义。您现在的代码是无效的。如果您使用的是等于(严格或不严格)比较,那么您将无法继续,因为结果将为false,这将停止代码块。请将其他代码发布到以获得更好的帮助。@dagon不,我只是没有在问题中插入它来进行此简化,以在条件表达式之前回显值,以检查这些变量的实际输出。@RobB我回显了值,事实上,这些值是它应该显示的。不显示实际使用的代码并不会使它变得简单,而是使它变得毫无意义。不需要第二个
if
语句。您只需将表达式添加到主
if
语句:
if(isset($\u SESSION['auth'])&&isset($_