Bernd: if/else

Wenn in $Projekt nichts steht, soll das letztet else genommen werden. Macht es aber nicht, ich erhalte immer die erste Ausgabe, warum?

if ($Projekt == 0) {
	
	$AP_Hinweis_IN = "AP 1";
	$AP_Hinweis_EX = "AP 2";

} elseif ($Projekt == 1) {
	
	$AP_Hinweis_IN = "Intern";
	$AP_Hinweis_EX = "Extern";

} else {
	
	$AP_Hinweis_IN = "Intern";
	$AP_Hinweis_EX = "Extern";

}

Wenn ich

var_dump($Projekt);

mir ausgeben lasse, erhalte ich NULL

  1. Hab es jetzt so gelöst

    $Projekt == "";
    
    if ($Projekt == 0) {
    	
    	$AP_Hinweis_IN = "AP 1";
    	$AP_Hinweis_EX = "AP 2";
    
    }
    
    if ($Projekt == 1) {
    	
    	$AP_Hinweis_IN = "Intern";
    	$AP_Hinweis_EX = "Extern";
    
    }
    
    if ($Projekt == "") {
    	
    	$AP_Hinweis_IN = "Intern";
    	$AP_Hinweis_EX = "Extern";
    
    }
    
    1. Hallo Bernd,

      $Projekt == "0";
      

      ist ein Test, keine Zuweisung. Diese Zeile ist ohne jede Wirkung.

      Der Verzicht auf die else-s bewirkt, dass die if nacheinander abgearbeitet werden und der letzte, der TRUE meldet, gewinnt. Im Falle von "" in $Projekt ist es der letzte if. Im Falle von "0" in $Projekt ist er es aber auch. Deswegen ist dein Code falsch und deswegen habe ich ein Minus gesetzt. Was Du gebaut hast, ist nicht nur keine Lösung, es führt zu falschen Ergebnissen.

      Dein Problem ist PHPs Typangleichung, die beim == passiert. NULL, 0, und "" werden da alle als gleich angesehen. "" und "0" sind verschieden, null und "0" auch. Aber 0 und "0" sind wieder gleich.

      Um die richtige Formulierung zu finden, müsste man wissen, welchen Typ der Wert in $Projekt hat, wenn die Variable mit einem Wert gefüllt ist. Ist es eine Zahl, oder ein String? PHP erlaubt es, damit zu schludern, aber wenn man ungenau arbeitet ist die Konsequenz ein falsches Programm.

      Rolf

      --
      sumpsi - posui - clusi
  2. Tach!

    Wenn in $Projekt nichts steht,

    if ($Projekt == 0) {
    

    Wenn ich

    var_dump($Projekt);
    

    mir ausgeben lasse, erhalte ich NULL

    var_dump($Project == 0);

    PHP type comparison tables

    dedlfix.

  3. Ich frage mich seit langem warum eine Sprache, die schlamperhaften Code geradezu herausfordert, so erfolgreich werden konnte.

    Fragst du dich das inzwischen auch?