Lorenz: If-Anweisung macht nicht, was ich will

Hallo,
ich bin am Verzweifeln.
Das folgende php hat sieben Monate lang immer das richtige Bild generiert. Den Monat 8 aber erkennt es nicht!
Ich habe bereits das if für die Zeile 7 kopiert und auf 8 geändert, in der Annahme, dass vielleicht unsichtbare Zeichen in dem If für den Monat 8 vorhanden sind - aber nein, derselbe Effekt. Immer wird das Bild für Monat 12 angezeigt.

  
<?php  
  date_default_timezone_set('Europe/Berlin');  
  if (date('m') == 01)  
   echo '<img src="/bilder/Monat01.jpg" alt="">';  
  elseif (date('m') == 02)  
   echo '<img src="/bilder/Monat02.jpg" alt="">';  
  elseif (date('m') == 03)  
   echo '<img src="/bilder/Monat03.jpg" alt="">';  
  elseif (date('m') == 04)  
   echo '<img src="/bilder/Monat04.jpg" alt="">';  
  elseif (date('m') == 05)  
   echo '<img src="/bilder/Monat05.jpg" alt="">';  
  elseif (date('m') == 06)  
   echo '<img src="/bilder/Monat06.jpg" alt="">';  
  elseif (date('m') == 07)  
   echo '<img src="/bilder/Monat07.jpg" alt="">';  
  elseif (date('m') == 08)  
   echo '<img src="/bilder/Monat08.jpg" alt="">';  
  elseif (date('m') == 09)  
   echo '<img src="/bilder/Monat09.jpg" alt="">';  
  elseif (date('m') == 10)  
   echo '<img src="/bilder/Monat10.jpg" alt="">';  
  elseif (date('m') == 11)  
   echo '<img src="/bilder/Monat11.jpg" alt="">';  
  else  
   echo '<img src="/bilder/Monat12.jpg" alt="">';  
?>  

So long
Lorenz

  1. Hallo!

    ich bin am Verzweifeln.

    Ich auch ..., aufgrund der Hitze! ;-)

    Das folgende php hat sieben Monate lang immer das richtige Bild generiert. Den Monat 8 aber erkennt es nicht!
    Ich habe bereits das if für die Zeile 7 kopiert und auf 8 geändert, in der Annahme, dass vielleicht unsichtbare Zeichen in dem If für den Monat 8 vorhanden sind - aber nein, derselbe Effekt. Immer wird das Bild für Monat 12 angezeigt.

    Das legt ja die Vermutung nahe, dass 'm' nicht gleich '08' ist.
    Welchen Wert hat 'm' denn - schon mal gecheckt?

    Gruß Gunther

    1. Das legt ja die Vermutung nahe, dass 'm' nicht gleich '08' ist.

      Ja, das war mein erster Gedanke

      Welchen Wert hat 'm' denn - schon mal gecheckt?

      Der Wert ist 08

  2. Tach!

    Das folgende php hat sieben Monate lang immer das richtige Bild generiert. Den Monat 8 aber erkennt es nicht!

    Das liegt daran, dass Zahlen mit 0 am Anfang als Oktalzahlen angesehen werden, 08 sowie 09 ungültig sind und stillschweigend zu 0 werden. Das gilt aber nicht für Zahlen in Strings. Da du hier einen String (das Ergebnis von date('m')) mit einer Zahl vergleichst, wird der String in eine Zahl konvertiert, was zu einem Vergleich von 8 (oder 9) und 0 wird.

    if (date('m') == 01)
       echo '<img src="/bilder/Monat01.jpg" alt="">';
      elseif (date('m') == 02)
       echo '<img src="/bilder/Monat02.jpg" alt="">';

    So wie du das machst, ist das viel zu umständlich. Das ganze Konstrukt kannst du auf eine Zeile eindampfen.

    printf('<img src="/bilder/Monat%s.jpg" alt="">', date('m'));  
    
    

    oder auch

    echo '<img src="/bilder/Monat' . date('m') . '.jpg" alt="">';  
    
    

    dedlfix.

    1. Hi

      Das liegt daran, dass Zahlen mit 0 am Anfang als Oktalzahlen angesehen werden, 08 sowie 09 ungültig sind und stillschweigend zu 0 werden. Das gilt aber nicht für Zahlen in Strings. Da du hier einen String (das Ergebnis von date('m')) mit einer Zahl vergleichst, wird der String in eine Zahl konvertiert, was zu einem Vergleich von 8 (oder 9) und 0 wird.

      Gerade wollte ich um eine Erklärung bitten, denn wenn ich auf 8 abfrage statt auf 08 funktioniert es.
      Danke für die Hilfe
      Lorenz