} Else {语句不读取布尔值?

时间:2014-06-23 23:58:11

标签: php

所以我再次使用php,并且我已经将变量设置为false,但是,无论我做什么,当它到达IF语句时,它都会返回TRUE版本应该回应FALSE版本。

    $loginauth= $_POST['loginauth'];
    $errormain = false; // I've clearly set $errormain to false

if(!empty($loginauth)){
    if(!empty($username)){
        if(!empty($pass)){

        }else{$errormain = false;}// In an effort to fix this issue, I've set each one 
        }else{$errormain = true;}// of these $errormain = true; statements to false
        }else{$errormain = true;}// systematically one by one, yet somehow it still echos as if it was true.

  if($errormain = true){
      $errormain1 = "<h1>Error</h1><em>Login Failed</em>";
  }else{
      $errormain1 = "<h1>Welcome</h1><em>BadgesCoding.com</em>";
  } 

3 个答案:

答案 0 :(得分:2)

使用=时,您正在分配值。因此,逻辑$errormain始终为true

if ($errormain = true) {

应该使用==进行真正的比较测试:

if ($errormain == true) {

现在,如果您将其设置为===,那么它会将$errormain评估为true,但也要确保变量类型相同:

if ($errormain === true) {

但你知道吗?让您的生活更轻松这样做:

if ($errormain) {

你知道为什么吗?最后一行上的这个简单逻辑基本上检查$errormaintrue是否== true,而不必对=== true或{{1}}多余。

答案 1 :(得分:1)

编辑(正确和删除嫌疑人)

根本不需要$errormain变量。逻辑上,如果$loginauth$username$password为空,则错误为真。因此,代码的更好但仍然有缺陷的版本如下。

$loginauth= $_POST['loginauth'];
if(!empty($loginauth) && !empty($username) && !empty($password)) {
    //perform extra validation here please.
    $errormain1 = "<h1>Welcome</h1><em>BadgesCoding.com</em>";
}else{
    $errormain1 = "<h1>Error</h1><em>Login Failed</em>";
}

上面的答案(留给答案的宝贵智慧) 您正在使用错误的比较运算符。要正确比较布尔值,您必须使用===运算符,因此: 不要使用==来比较布尔值。它没有键入juggle,这意味着它基本上不能确保两个比较是相同的类型,意味着1可以等于true或任何字符串值也可以。 0将等于false。

您的代码应如下所示:

if($errormain === true){

|| (或)

if($errormain){

答案 2 :(得分:0)

如果你想比较你必须使用==运算符......我看到的另一件事是你将 $ errormain 变量设置为false ...为什么?如果密码为空 $ errormain 必须为true ...我发表评论,看看它并将变量更改为true如果你认为它是正确的。这是代码:

$loginauth = $_POST['loginauth'];
$errormain = false; // I've clearly set $errormain to false

if(!empty($loginauth)){
    if(!empty($username)){
        if(!empty($pass)){
            //pass is not empty
        }
        else{
            $errormain = false;//WHY IS THIS SET TO FALSE? if password is empty errormain must be false or true?
        }// In an effort to fix this issue, I've set each one 
    }
    else{
        $errormain = true;
    }// of these $errormain = true; statements to false
}
else{
    $errormain = true;
}// systematically one by one, yet somehow it still echos as if it was true.

if($errormain == true){
    $errormain1 = "<h1>Error</h1><em>Login Failed</em>";
}
else{
    $errormain1 = "<h1>Welcome</h1><em>BadgesCoding.com</em>";
}