2016-07-26 2 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 в моем реальном коде), это либо «истина», «ложь», либо «». Какой тип данных я должен хранить как? В настоящее время я использую VARCHAR, но я подозреваю, что все это часть проблемы.

ответ

5

$do_not_text == '' оценивает как истинный. Зачем? Потому что $do_not_text не определен, что является фальшивым значением. Вы сравниваете его с пустой строкой, которая также соответствует значению фальши. Таким образом, сравнение истинно, потому что выражение first if должно быть оценено как true.

+0

Имеет смысл. Что я должен хранить в своей базе данных вместо пустой строки, чтобы этого не произошло? – jonmrich

+0

* «который также приравнивается к». * - незаконченное предложение там, Джон? lol - edit: ах, я вижу, вы исправили его ;-) –

+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

сохранять их как TINYINT с длиной 1, потому что его только 1 и 0, а 0 как значение по умолчанию.

Тогда вы можете сделать $muted = boolval($db_muted_val);, если вы хотите, или использовать $db_muted_val как есть, потому что 1 является true и 0 является false.

if ($db_muted_val) { 
    // do this first thing 
} else { 
    // do something else 
} 
Смежные вопросы