【问题标题】:Why does this statement always return false? [closed]为什么这个语句总是返回 false? [关闭]
【发布时间】:2012-02-21 19:58:15
【问题描述】:

我需要找出为什么它每次都说“旧版本”,即使$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";
}

?>

【问题讨论】:

  • 哦,来吧,做一些调试......
  • 我会说你应该把你的标题改成更具描述性的东西,但是用什么来形容呢?
  • 你需要滚动的输出代码大声笑我会尝试 elseif 而不是 if,我不明白我将如何调试它。告诉它在每一行代码之后回显?大声笑
  • 如果你只写像$a = ($version == $launcherv);这样的东西,你的代码会更可读和更紧凑
  • @user1116644: 是的,类似的……(但也许,只是也许,有些行更重要)

标签: php if-statement boolean


【解决方案1】:
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"; 运行。

【讨论】:

  • 我在 url 中传递参数 s 使其成为 13
  • 你在$version = $_GET['version']; 任何地方吗?
【解决方案2】:

您已将 $a 设置为 false,这将返回布尔值 false

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

在另一个问题中,当您被告知可以执行此操作时,他们告诉您可以将 $a 设置为 $version &gt;= $launcherv,如果评估将返回 true 或 false,具体取决于语句是真还是假。不过在那之后,他们说……

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

if ($version >= $launcherv) {

【讨论】:

  • 我在发布之前将其更改为旧版本
【解决方案3】:

所以,从您在上面的 cmets 中发布的链接来看:

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

我看到您正在尝试使用 register_globals 通过 URL 传递变量

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

$version = 13

来自您 URL 中的分配,但在您调用之后

$version = ""

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

正因为如此,你的 version 的值总是 "",导致你的脚本不断的获取 $a 的值为 false,这点 Josh 已经详细解释过了。

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

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

我在自己的电脑上进行了测试,它确实有效。但是,如果这不能解决您的问题,则很可能您的服务器上的“register_globals”已关闭。

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

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

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

【讨论】:

  • 您还有问题吗?如果是,您能否更新代码以反映这一点?
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 2019-05-20
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 2021-03-31
  • 2019-05-11
  • 2020-08-09
相关资源
最近更新 更多