布尔检查给出错误答案

Boolian check giving incorrect answer

我正在尝试建立一个声誉系统:

if($upvotetruedownvotefalse == false){
    if(strpos($lines[2],$username.",") !== false){
        echo "you've already downvoted";
    }
    else{
        echo "you haven't downvoted yet";
        $lines[2] = $username.",".$lines[2];
        $lines[0] = $lines[0]-1 . "\n";
        file_put_contents( $filename , $lines);

    }
}
if($upvotetruedownvotefalse == true){
    if(strpos($lines[1],$username.",") !== false){
        echo "you've already upvoted";
    }else{
        echo "you haven't upvoted yet";
        $lines[1] = $username.",".$lines[1];
        $lines[0] = $lines[0]+1 . "\n";
        file_put_contents( $filename , $lines);
    }

}

$upvotetruedownvotefalse的值是通过AJAX

确定的

但是这些比较运算符给我的结果是错误的。

例如,如果 $upvotetruedownvotefalse = false$upvotetruedownvotefalse == true 将被触发。 我通过回显 $upvotetruedownvotefalse 的值并使用成功函数接收回显结果(包括 if 语句中的结果)来测试它:

echo $upvotetruedownvotefalse;
success: function(response){
          alert(response);
}

然后我 console.log 结果,我会得到这个:

Falseyou haven't upvoted yet

我得到了相互矛盾的结果。 我也试过在不同的地方使用不同类型的 === !===,但我得到的结果要么是相反的,要么我的成功函数失败了

关于布尔运算符,我有什么不了解的吗? 任何帮助将不胜感激

如果您正在执行 echo,并在输出中得到 False,那么听起来您的变量保存的是字符串 "False",而不是布尔值 false。非空字符串是一个 "truth-y" 值,这意味着当您执行 if ($some_string) 时它会返回 true。

最快的解决方法似乎是在您的其余代码之前添加此内容:

if (strtolower($upvotetruedownvotefalse) === 'false') {
    $upvotetruedownvotefalse = false;
}
//the rest of your code here