-1

我正在使用这种方法来获取医生名单:

public static function getFiltered($specialist = null, $standby = null, $payedThisYear = null, $payedLastYear = null) 
{
    $mysqli = connectdbMySQLI();
    $query = "SELECT * FROM tblMember WHERE 1 = 1";

    if($specialist != null)
    {
        if ($specialist == true) 
            $query .= " AND specialist = true";
        else
            $query .= " AND specialist = false";
    }
}

使用不同的复选框设置参数(真/假)。我在 Firebug 中使用 var_dump 检查了 $specialist-value。当 $specialist 为真时,查询工作正常。当它为假时,它甚至没有进入 if 语句,所以它突然变成了 null。

然后我用 if 语句中的 echo 和 else 语句检查它,我得到了相同的结果......当 $specialist = false 时,它​​直接进入“else 语句”......

有什么问题?

4

3 回答 3

7

在 PHP 中,表达式(FALSE != NULL)将始终为FALSE,因此您的代码if块中的代码将永远不会被执行。

这可以使用var_dump(). 考虑以下表达式:

$specialist = false;
var_dump($specialist != null);
var_dump($specialist !== null);

输出将是:

bool(false) 
bool(true)

使用严格比较来解决此问题:

if($specialist !== null)
{
    if ($specialist == true) 
        $query .= " AND specialist = true";
    else
        $query .= " AND specialist = false";
}

你也可以使用is_null()函数。

于 2013-10-22T12:40:06.980 回答
2

很简单:当未选中复选框时,提交表单时该字段不包含在 POST 或 GET 请求中,因此为空。

从超全局获取该值时,您应该使用 isset() 检查复选框状态以查看其是否标记。如果您还需要“不关心”值,请考虑使用 3 个无线电输入更改复选框。复选框只有两种状态。

于 2013-10-22T12:42:25.683 回答
1

试试喜欢

if ($specialist) 
    $query .= " AND specialist = true";
else
    $query .= " AND specialist = false";  

或者直接试试like

$query .= " AND specialist = $specialist";    
于 2013-10-22T12:38:35.110 回答