【问题标题】:Comparing session variable with get variable PHP将会话变量与获取变量 PHP 进行比较
【发布时间】:2012-08-05 03:58:11
【问题描述】:

我正在尝试将 $_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,因此没有继续进行。但它只能通过任何数字的代码进行。

谢谢

【问题讨论】:

  • 您现在的代码无效。如果您使用的是等于(严格与否)比较,那么您应该无法继续,因为结果将是错误的,这应该会停止您的代码块。请发布其他代码以获得更好的帮助。
  • @dagon 不,我只是没有将它插入问题中以使其简单
  • 尝试在条件表达式之前回显这些值,以检查这些变量的实际输出是什么。
  • @RobB 我确实回显了值,这些值确实是它应该是的
  • 不显示您实际使用的实际代码并不能使它变得简单,它使它变得毫无意义。

标签: php session get comparison integer


【解决方案1】:

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

试试

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

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

【讨论】:

  • 他说它确实进行了,这就是为什么我对这个问题非常困惑,因为没有可能的方法可以继续。
【解决方案2】:

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

<?php
$a = 2;

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

=== 的用法是针对值和类型进行相同的比较。请参阅comparison operators 上的文档以获取更多参考。

更新:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 不需要第二个if 语句。您只需将表达式添加到主要的if 语句:if(isset($_SESSION['auth']) &amp;&amp; isset($_GET['user']) &amp;&amp; $_SESSION['auth'] == $_GET['user']){
    【解决方案4】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2016-08-26
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多