2016-07-26 90 views
0

我的代码/其他问题是这样的:PHP如果使用真/假

$muted = 'true'; //Note this is only for testing 
if ($muted == 'false' || $muted == '' || $do_not_text == '' || $do_not_text =='false'){ 
//do this first thing 
} 
else{ 
//do something else 
} 

我不能让我的else运行。我搞乱了什么语法?

与此相关的是,我在我的数据库中存储了一个值(在我的真实代码中将这个值设置为$muted),它可以是'true','false'或''。我应该将这些数据类型存储为什么?目前,我正在使用VARCHAR,但我怀疑这是问题的一部分。

回答

5

$do_not_text == ''的计算结果为true。为什么?因为$do_not_text未被定义,这是一个虚假价值。你将它与一个空字符串进行比较,这也等于一个虚假值。所以这种比较是真实的,导致第一个if语句被评估为真。

+0

有道理。我应该在我的数据库中存储什么而不是空字符串以确保不会发生? – jonmrich

+0

*“这也等同于一个。”* - 那里约翰的未完成的句子?大声笑 - 编辑:啊,我看到你修好了;-) –

+0

是的。粘贴失败了我!固定。 –

2

我不知道你为什么应该使用字符串布尔值。

$muted = true; // no need for quotes 

您还可以考虑在比较布尔值时使用===运算符。

if ($muted === false || // etc... 

哪些数据类型,我应该存储这些为?在MySQL

布尔值通常被存储为1或0。

field_name TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 
2

存储它们作为TINYINT1长度,因为它的唯一的1和0,并且作为0的默认值。

然后你就可以$muted = boolval($db_muted_val);如果你愿意,也可以使用$db_muted_val原样,因为1true0false

if ($db_muted_val) { 
    // do this first thing 
} else { 
    // do something else 
}