为什么这个语句总是返回false?

时间:2012-02-21 19:58:16

标签: php if-statement boolean

每次即使$a = true,我也要找出为什么它会说“旧版本”。如果$a为真,则应该执行if块而不执行其他操作。

<?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 个答案:

答案 0 :(得分: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,其评估为true(!false == true),并运行echo "Old Version";

答案 1 :(得分:0)

您已将$a设置为false,并返回bool false

当您检查$ a是否不等于true时,它始终不会返回true,因为$a永远不会设置为true。这是因为$version = "";$launcherv = "13";所以不会是真的,它会跳到另一个将$a设置为false的地方。

在另一个问题,当你被告知你可以这样做时,他们告诉你,你可以将$a设置为$version >= $launcherv,如果评估将返回true或false,具体取决于该陈述是否为真或者是假的。在那之后,他们说......

  

短变量可能会使未来的读者感到困惑。因此,你应该写:

if ($version >= $launcherv) {

答案 2 :(得分:0)

因此,根据您在上述评论中发布的链接判断:

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

我看到您正在尝试使用register_globals

通过URL传递变量

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

$version = 13

来自您网址中的分配,但是在您致电

之后
$version = ""

这覆盖了您在URL中分配$ version的内容,因为它之后运行。

因此,你的版本值总是“”,导致你的脚本经常得到$ a的值为false,这已由Josh详细解释。

基本上,要解决这个问题,您只需删除代码的这一部分:

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

我在自己的计算机上测试了它,并且它有效。但是,如果这不能解决您的问题,则可能是服务器上的“register_globals”已关闭。

编辑:如果您现在使用$ _POST传递变量,请按以下方式分配变量:

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

这假设您发布的变量的命名方式与在URL中传递的变量相同。