每次即使$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";
}
?>
答案 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中传递的变量相同。