ChrisL: If..then..else Verschachtelung

Hallo

Ich weiss das Problem ist für Profis banal, aber ich probiere schon seit einer Stunde und bekomme es einfach nicht hin.

Beispiel:

if ($kriterium1 == 0)

if ($kriterium2 == 0) {
Codezeile;
Codezeile;
}

else {
Codezeile;
Codezeile;
}

Wie setzte ich die Klammern richtig, damit sich 'else' auf $kriterium1 bezieht und nicht auf $kriterium2 wie im Moment.

Logisch fände ich...

if ($kriterium1 == 0) {

if ($kriterium2 == 0) {
Codezeile;
Codezeile;
}

} else {
Codezeile;
Codezeile;
}

... aber so geht es gar nicht.

Danke schonmal im Voraus und sorry falls ich Euch mit der Frage langweile ;)

cu
Chris

  1. gudn tach!

    Wie setzte ich die Klammern richtig, damit sich 'else' auf $kriterium1 bezieht und nicht auf $kriterium2 wie im Moment.

    Logisch fände ich...

    if ($kriterium1 == 0) {

    if ($kriterium2 == 0) {
    Codezeile;
    Codezeile;
    }

    } else {
    Codezeile;
    Codezeile;
    }

    ... aber so geht es gar nicht.

    dann liegt der fehler woanders, denn dein logikverstaendnis truegt dich nicht. am beispiel wird's klarer:

    if(A){  
      // A  
      if(B){  
        // A && B  
      }else  
        // A && not B  
      }  
    }else  
      // not A  
    }
    

    die else-zweige koennen unabhaengig voneinander weggelassen werden, also z.b. (in deinem fall)

    if(A){  
      // A  
      if(B){  
        // A && B  
      }  
    }else  
      // not A  
    }
    

    oder (was du nicht willst)

    if(A){  
      // A  
      if(B){  
        // A && B  
      }else{  
        // A && not B  
      }  
    }
    

    prost
    seth

    1. Hallo seth

      Vielen Dank!

      War einer von der Sorte 'vor lauter Bäume den Wald nicht sehen'.

      PHP und VBA verträgt sich schlecht, eine der Codezeilen war...
      $ts = now();

      Thx again und gute Woche
      Chris

      1. Hi ChrisL,

        PHP und VBA verträgt sich schlecht, eine der Codezeilen war...
        $ts = now();

        Tipp: Schalte error_reporting auf E_ALL oder E_STRICT, dann bekommst du beim Entwickeln auch vernünftige Fehlermeldungen, in diesem Fall wäre etwas à la "Fatal Error: call undefined function now" oder so gekommen. Unter den Datums- und Zeitfunktionen im PHP-Manual findet sich dann schnell die gewünschte Funktion ;-)

        Viele Grüße,
          ~ Dennis.

        1. echo $begrüßung;

          Tipp: Schalte error_reporting auf E_ALL oder E_STRICT, dann bekommst du beim Entwickeln auch vernünftige Fehlermeldungen,

          E_STRICT ist ein einzelnes Bit, E_ALL hingegeben steht (derzeit = PHP5) für alles andere außer E_STRICT. Beide Konstanten sind also nichts das alternativ verwendet werden könnte, was dein "oder" aber normalerweise ausdrückt. Hinzu kommt noch, dass E_STRICT nur für OOP relevant wird, also für einen Großteil der PHP-Anwender nicht relevant wird.

          Zusammengefasst: E_ALL für das error_reporting ist beim Entwickeln immer eine gute Idee, auch schon unter PHP4. E_STRICT kann man meist unbeachtet lassen. Außerdem braucht es noch ein eingeschaltetes display_errors, wenn man die Meldungen in der Ausgabe sehen möchte.

          echo "$verabschiedung $name";

          1. Nachmals Danke für die Hilfe allerseits. Ist echt nett und ich weiss die Unterstützung zu schätzen.

          2. Tach.

            Hinzu kommt noch, dass E_STRICT nur für OOP relevant wird, also für einen Großteil der PHP-Anwender nicht relevant wird.

            Mir fallen spontan noch Meckereien zu date.timezone/TZ/date_default_timezone_set() und "only variables should be assigned by reference" ein, die ebenfalls als E_STRICT laufen aber nicht direkt mit OOP zu tun haben.

            --
            Once is a mistake, twice is Jazz.
            1. echo $begrüßung;

              Hinzu kommt noch, dass E_STRICT nur für OOP relevant wird, also für einen Großteil der PHP-Anwender nicht relevant wird.

              Mir fallen spontan noch Meckereien zu date.timezone/TZ/date_default_timezone_set() und "only variables should be assigned by reference" ein, die ebenfalls als E_STRICT laufen aber nicht direkt mit OOP zu tun haben.

              Danke für die Ergänzung. Die Übergabe von Nicht-Variablen per Referenz ist mir nur bei PHP 4.4.x auf die Füße gefallen, und da war/ist das eine E_NOTICE-Meldung. E_STRICT gibt es ja erst in PHP 5.

              Bei date() & co. ist es mir auch noch nicht aufgefallen, denn ich hatte E_STRICT wegen des Einsatzes von alter Fremdsoftware zunächst nicht aktiviert. Die Date and Time Functions wären dann also nach meinem jetzigen Erkenntnisstand etwas, bei dem auch weniger fortgeschrittene Programmierer mit E_STRICT in Berührung kommen.

              Für mich bleibt E_STRICT dennoch ein Nice-to-have, das keine so gravierenden Vorteile wie E_ALL bringt.

              echo "$verabschiedung $name";