Andreas Görtz: Problem wird mysteriöser

Beitrag lesen

Hi,

$show_result = 0;

if (isset($show_result) and $show_result != 'create_db')

ergibt "false" - also sind nicht beide Bedingungen wahr

wirkt so, als würde dort statt and OR stehen *grübel*

nein. Bei einem Vergleich mittels == bzw. != ignoriert PHP die Typen und führt eine interne Umwandlung des Strings in, in diesem Fall, einen Integer durch, siehe http://de3.php.net/manual/de/language.types.string.php#language.types.string.conversion.

Was dabei passiert, siehst du, wenn du die Umwandlung mal selbst durchführst:

<?php

echo intval('create_db'); // 0

?>

Also ergibt ($show_result != 'create_db') false (denn es gilt nach der internen Umwandlung des Strings (0 == 'create_db'), und somit wird der ganze Ausdruck false. Wie du schon selbst festgestellt hast, ist bei Vergleichen, in denen es auf die Typen ankommt, === bzw. !== zu verwenden.

Gruß,
Andreas.