2012-08-08 440 views
0

我在比较$_SESSION变量与$_GET变量。将会话变量与获取变量进行比较PHP

两者都是数字:

$_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

错过**如果**或许?? – 2012-08-08 04:48:05

+1

如何发布代码。 – Musa 2012-08-08 04:49:27

+0

您的代码现在是无效的。如果您正在使用等于(严格或非严格)的比较,那么您应该无法继续执行,因为结果是错误的,应该停止您的代码块。请张贴额外的代码以获得更好的帮助。 – RobB 2012-08-08 04:51:18

回答

2

当你有内部if“等于对”条件的功能,你将与比较无论那个函数返回。

所以在你的情况下,isset()返回true,如果参数设置,并且false否则。

这就是你要比较的,而不是价值。

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

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

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

} 
+0

感谢您的解释! – hellomello 2012-08-08 05:39:36

1

任何出来的GET/POST/REQUEST超全局的类型为字符串,即使只包含数字。如果你在SESSION中存储了一个实际的整数,那么你的严格比较(===)将失败,因为你正在比较一个字符串和一个int。

尝试

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

代替,或者干脆放松比较==,不比较类型。

+3

他说* * *虽然继续,这就是为什么我对这个问题非常困惑,因为没有可能的方式继续下去。 – animuson 2012-08-08 04:48:59

1

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

<?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)的结果,而不检查匹配的变量。

1

要检查如果两个$_SESSION['auth']$_GET['user']被设置或取消,实际上没有对它们进行比较,尽量

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

不需要第二个if语句。您可以将表达式添加到主if语句中:if(isset($ _ SESSION ['auth'])&& isset($ _ GET ['user'])&& $ _SESSION ['auth'] == $ _GET [ '用户']){'。 – RobB 2012-08-08 05:26:54