2011-12-07 39 views
0

我不是很有经验的PHP。我面临的问题是:在php中的数据类型和它们的比较

print "post: {$_POST['var']} session: {$_SESSION['var']}\n"; 

比方说,这打印出2个相等的输出。

然后

if($_POST['var'] == $_SESSION['var']){ 
... 
} 

永远评估为真。我该怎么做才能解决它?

+0

你能准确地复制它输出的内容并把它放在这里吗? – jprofitt

+1

什么打印出来?你有没有看过它与一个hexeditor?仅仅因为它看起来相同并不意味着没有任何额外的空间或NUL字节。 – mario

+2

就像@mario说的那样,'var'两边可以立即存在空格,所以你的比较永远不会返回true。尝试在$ _SESSION ['var']'和$ _POST ['var']'上运行'trim'。 – Cyclonecode

回答

2

尝试以下操作:

if (trim($_POST['var']) == trim($_SESSION['var'])) { 
    // ... 
} 

你也可以检查$_SESSION['var']$_POST['var']的内容使用var_dump,看看它们是否匹配:

var_dump($_POST['var']); 
var_dump($_SESSION['var']); 
1

我不认为它可能是一个数据类型问题(除非它们是浮点数然后它可能),但如果你想检查它们是否是相同的类型,那么使用===。我的猜测是,在你打印出来的时候,你无法检测到其中的一个空间。你能举出打印出来的例子吗?

0
<?php 

$_SESSION['var'] = "Variable"; 
$_POST['var'] = "Variable"; 

if($_POST['var'] == $_SESSION['var']) 
    print 1; 
else 
    print 2; 

?> 

结果1.什么是你比较的变量的值是多少?

0

我不认为这是一个数据类型的问题,但如果你想在PHP比较的数据类型,你可以做到以下几点:

if($_POST['var'] === $_SESSION['var']){ 
    ... 
} 

或者你可以通过做投的数据类型如下:( int)(array)(object)

$a = (int)$_POST['var']; 
$b = (int)$_SESSION['var']; 

if($a === $b) { 
    ... 
} 
+0

这没有工作 – Pyjong

+0

等待actualy我用==运营商,所以它可能工作得很好 – Pyjong