我正在使用此方法获取医生名单:
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";
}
}
使用不同的复选框设置参数(true / false)。 我在Firebug中用var_dump检查了$ specialist-value。当$ specialist为true时,查询工作正常。如果它是假的,它甚至不会输入if语句,因此它显然会突然变为空。
然后我用带有else语句的if语句中的echo来检查它,我得到了相同的结果......当$ specialist = false时,它直接进入'else-statement'......
有什么不对?
答案 0 :(得分:6)
在PHP中,表达式(FALSE != NULL)
始终为FALSE
,因此if
块中的代码将永远不会被执行。
这可以使用var_dump()
来演示。请考虑以下表达式:
$specialist = false;
var_dump($specialist != null);
var_dump($specialist !== null);
output将是:
bool(false)
bool(true)
使用strict comparison解决此问题:
if($specialist !== null)
{
if ($specialist == true)
$query .= " AND specialist = true";
else
$query .= " AND specialist = false";
}
您也可以使用is_null()
功能。
答案 1 :(得分:1)
尝试
if ($specialist)
$query .= " AND specialist = true";
else
$query .= " AND specialist = false";
或直接尝试
$query .= " AND specialist = $specialist";
答案 2 :(得分:1)
简单: 取消选中复选框时,在提交表单时,该字段不包含在POST或GET请求中,因此它为空。
从superglobal获取该值时,应使用isset()检查复选框状态,以查看是否标记了它。 如果您还需要“不关心”值,请考虑使用3个无线电输入更改复选框。复选框只有2种状态。