0

我正在尝试将$_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. 它只通过任何数字的代码进行。

谢谢

4

4 回答 4

2

当您在if“等于”条件下有一个函数时,您将与该函数返回的任何内容进行比较。

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

那是您要比较的,而不是值。

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

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

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

}
于 2012-08-08T05:21:57.603 回答
1

来自 GET/POST/REQUEST 超全局变量的任何内容都被输入为字符串,即使它仅包含数字。如果您在 SESSION 中存储了一个实际整数,那么您的严格比较 ( ===) 将失败,因为您将字符串与 int 进行比较。

尝试

$_SESSION['auth'] === (int)$_GET['user']

相反,或者只是放松对 的比较==,它不比较类型。

于 2012-08-08T04:48:13.320 回答
1

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

<?php
$a = 2;

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

的用法===是针对值和类型进行相同的比较。有关其他参考,请参阅比较运算符的文档。

更新:

看到您的代码后,您的条件表达式通过的原因是因为如果isset($_SESSION['auth'])isTrueisset($_GET['user'])is的结果,True那么它将通过,如果两者都是 ,则相同False。您的条件表达式仅检查结果,isset(VARIABLE)而不检查其中的变量是否匹配。

于 2012-08-08T05:14:20.397 回答
1

您正在检查两者$_SESSION['auth']$_GET['user']是否已设置或未设置,而不是实际比较它们,请尝试

if(isset($_SESSION['auth'])  && isset($_GET['user'])){
    if($_SESSION['auth'] == $_GET['user'])
    // proceeding code
    }
}
于 2012-08-08T05:19:38.587 回答