2016-07-26 17 views
0

Mein Code sieht wie folgt aus:PHP if/else Problem mit true/false

$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 
} 

Ich kann nicht meine else bekommen zu laufen. Welche Syntax vermassele ich?

In diesem Zusammenhang, ich speichere einen Wert in meiner Datenbank (das wird sein, was zu setzen in meinem realen Code) das ist entweder 'wahr', 'falsch' oder ''. In welchem ​​Datentyp sollte ich diese speichern? Derzeit verwende ich VARCHAR, aber ich vermute, dass dies alles Teil des Problems ist.

Antwort

5

$do_not_text == '' wird als wahr ausgewertet. Warum? Weil $do_not_text nicht definiert ist, was ein falscher Wert ist. Sie vergleichen es mit einer leeren Zeichenfolge, die ebenfalls einem falschen Wert entspricht. Dieser Vergleich ist also wahr, wodurch die erste if-Anweisung als wahr gewertet wird.

+0

Sinn macht. Was soll ich in meiner Datenbank speichern anstatt einer leeren Zeichenfolge, um sicherzustellen, dass dies nicht geschieht? – jonmrich

+0

* "Das entspricht auch einem." * - unvollendeter Satz dort John? lol - edit: ah, ich sehe, du hast es repariert ;-) –

+0

Ja. Paste hat mich enttäuscht! Fest. –

2

Ich bin mir nicht sicher, warum Sie Strings für das verwenden, was boolesche Werte sein sollte.

$muted = true; // no need for quotes 

Sie können auch den === Operator betrachten zu verwenden, wenn Boolesche Werte zu vergleichen.

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

Welche Datentyp soll ich da diese werden zu speichern?

Boolesche Werte in MySQL werden typischerweise als 1 oder 0.

field_name TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 
2

speichern sie als TINYINT mit einer Länge von 1 weil seine nur 1 und 0, und 0 als Standardwert gespeichert.

Dann können Sie $muted = boolval($db_muted_val); machen, wenn Sie wollen, oder $db_muted_val verwenden wie es ist, weil 1 ist true und 0false ist.

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