2012-02-21 90 views
-3

我需要找出为什么它说“旧版本”,即使当$a = true。如果$a是真的,它应该做if块,而不是其他块。为什么此声明总是返回false?

<?php 
$launcherv = "13"; 
$gamev = "1326382442000"; 
$sessid = math.rand(1, 1000000000000000); 
$ticket = math.rand(1, 1000000000000); 
$user =  ""; 
$password = ""; 
$version = ""; 
$a = false; 
$b = false; 
$c = false; 


if ($version == $launcherv){ 
$a = true; 

} else { 
$a = false; 

} 
if ($user == ""){ 
$b = false; 

} else { 


$b = 'true'; 

} 
if ($password == ""){ 
$c = false; 

} else { 
$c = true; 

} 




if ($a && $b && $c){ 
echo ($gamev.":".$ticket.":".$user.":".$sessid); 
} 
elseif(!$a){ 
echo "Old Version"; 
} 
elseif(!$b){ 
echo "Bad Login"; 
} 
elseif(!$c){ 
echo "Bad Login"; 
} 

?> 
+3

拜托,做一些调试... – 2012-02-21 20:02:06

+1

$ B = '真';第一错误 – 2012-02-21 20:02:31

+3

我会说你应该改变你的头衔,以便更具描述性,但是可以描述这一点? – itsmequinn 2012-02-21 20:06:18

回答

0

您已设置$afalse它返回布尔false

当您检查$ a是否不等于true时,它始终不会返回true,因为$a永远不会设置为true。这是因为$version = "";$launcherv = "13";这样就不会成立,它会跳到其他设置$a再次变为false的else。

在另一个问题,当你被告知你能做到这一点,他们告诉你,你可以设置$a$version >= $launcherv其中,如果评估将返回取决于该陈述是否为真或假的真或假。虽然之后,他们说...

短变量可能会混淆未来的读者。因此,你应该写:

if ($version >= $launcherv) { 
+0

我改变它之前,我发布它,只是一个旧版本 – user1116644 2012-02-21 21:05:34

2
if ($version == $launcherv){ 
    $a = true; 
} else { 
    $a = false; 
} 

好了,$version = "";$launcherv = "13";,使$a = false

if ($a && $b && $c){ 
    echo ($gamev.":".$ticket.":".$user.":".$sessid); 
} 
elseif(!$a){ 
    echo "Old Version"; 
} 

因为$a = false,这是不言而喻的elseif,其计算结果为真(!false == true)和echo "Old Version";运行。

+0

我通过paramater s在网址,使它13 – user1116644 2012-02-21 21:04:54

+0

你在做'$ version = $ _GET ['版本'];'随时随地? – Josh 2012-02-21 21:09:03

0

所以,从链路判断你在上面发表的评论:

rerepo.tk/mcv.php?user=test&password=test&version=13 

我看到你通过URL中使用了register_globals

试图变量传递这里的问题是,虽然您最初从url传入变量,您将脚本中这些变量的值重新定义为代码中的“”。所以最初,它是例如

$version = 13 

从您的网址分配,但你叫

$version = "" 

在此之后改写你的URL指定什么$版本,因为它是事后运行。因此,您的版本值始终为“”,导致您的脚本不断获得$ a的值为false,这已由Josh详细解释过。

所以基本上,要解决这个问题,所有你需要做的就是删除您的这部分代码:

$user =  ""; 
$password = ""; 
$version = ""; 

我测试这是我自己的电脑上,和它的工作。但是,如果这不能解决您的问题,则很可能在您的服务器上关闭了“register_globals”。

编辑:如果您现在正在使用$ _ POST传递变量,然后指定你的变量如下:

$user =  $_POST["user"]; 
$password = $_POST["password"]; 
$version = $_POST["version"]; 

这是假设您发布的变量命名方式一样,当你它是否通过了URL。

+0

我现在使用$ _POST – user1116644 2012-02-21 21:06:02

+0

你还有问题吗?如果你是,你能否更新代码来反映? – MysticXG 2012-02-21 21:08:03

相关问题