Hallo Bernd,
da ich schon mehrfach versucht habe, Dir die Regeln von de Morgan zu erklären, und es offenbar eine Hirndrehung zuviel für Dich ist, versuche ich es einmal anders.
Was Du möchtest, kann man auch so formulieren:
wenn (dies OR jenes) {
tue nichts
}
sonst
{
mache etwas
}
oder in deinem Fall:
if ($ab_datum == "" OR $ab_datum == "0000-00-00") {
// ab_datum ist leer, nichts tun
}
else
{
// ab_datum ist gültig, verarbeiten
}
Dieses Programmiermuster ist gut lesbar. Das Problem ist nun der leere THEN Teil, den der ökonomische Sinn des Programmierers nicht gern sieht. Also vertauscht man THEN und ELSE, invertiert die Bedingung und lässt das nun leere ELSE weg:
if ( !($ab_datum == "" OR $ab_datum == "0000-00-00")) {
{
// ab_datum ist gültig, verarbeiten
}
Bis hierin geht es auch noch halbwegs. Da steht NOT (dies OR jenes) und das erkennt man ohne Hirnakrobatik als WEDER dieses NOCH jenes.
Will man nun noch die Klammern auflösen, muss man die Regeln von De Morgan beachten. Sie besagen, dass das "Ausmultiplizieren" eines NOT dazu führt, dass aus einem OR ein AND wird, und aus einem AND ein OR. Und danach wird aus dem NOT $a == $b
ein $a != $b
.
Also:
!($ab_datum == "" OR $ab_datum == "0000-00-00")
wird zu
!($ab_datum == "") AND !($ab_datum == "0000-00-00")
wird zu
$ab_datum != "" AND $ab_datum != "0000-00-00"
Das ist der Grund, warum der korrekte Code so aussieht:
if ( $ab_datum != "" AND $ab_datum != "0000-00-00" ) {
{
// ab_datum ist gültig, verarbeiten
}
Wenn Dir das zu hirnverknotet ist, um es sofort richtig hinzuschreiben, dann tu es nicht. Versuche, ein WEDER NOCH mit einer der vorher gezeigten Methoden aufzuschreiben. Es mögen 3 bis 13 Tastendrücke mehr sein, aber es funktioniert dann auf Anhieb.
Oder mach Dir ein Poster an die Wand, dass ein WEDER NOCH mit AND gebildet werden muss.
Update: Ich habe diesen Beitrag wikifiziert
Rolf
sumpsi - posui - clusi