Engelein: Mehrere elseif-Bedingungen, ist das möglich?

Beitrag lesen

if (file_exists("filename"))
{
echo "<img src="bild1.jpg">";
}

elseif (file_exists("filename2"))
{
echo "<img src="bild2.jpg">";
}

Leider hört das Script bei Bild 2 auf zu suchen und führt das Suchen von Bild 3 nicht mehr aus. Was ist an dem Code falsch? Man darf doch mehrere elseif Bedingungen haben oder?

Der Code ist richtig und du hast auch genau den richtigen Anwendungsfall für elseif gefunden. Das Problem muss eine andere Ursache haben.

Was meinst du mit "hört auf zu suchen"? Wird immer Bild 2 ausgegeben? Wird überhaupt nichts ausgegeben? Wird Bild 4, jenes aus dem abschließenden else-Block, ausgegeben?
Beachte, dass unter Unix-Derivaten, also auf den allermeisten Webservern, die Groß- und Kleinschreibung ein Unterscheidungsmerkmal ist, anders als bei Windows; Bild1.jpg ist also eine andere Datei als bild1.jpg.

Nur nebenbei zwei Anmerkungen zu deinem Stil:

Sowas:

echo "<img src="bild1.jpg">";

lässt sich übersichtlicher folgendermaßen:

echo '<img src="bild1.jpg">';

Beginne nicht jede Zeile in der ersten Spalte, sondern rücke untergeordnete Blöcke ein:

elseif (file_exists("filename2")) {
    echo "<img src="bild2.jpg">";
}

Du wirst sonst bei Skripten, die über mehr als zwei Dutzend Zeilen gehen, sehr schnell die Übersicht verlieren.

Und noch eine Anmerkung zur grundsätzlichen Funktion:

Ich kenne den tatsächlichen Umfang nicht, aber es ist unter Umständen günstiger, die Angelegenheit in einer Schleife zu erledigen:

  $bilder = Array("bild1.jpg", "bild2.jpg", "bild3.jpg");  
  
  foreach ($bilder as $bild) {  
      if (file_exists($bild)) {  
          break;  
      }  
  }  
  echo '<img src="' . $bild '">';

Das ist nicht nur kürzer, du hast auch jede Funktionalität nur einmal im Code stehen. Sowas erweist sich immer dann als praktisch, wenn man später etwas ändern möchte. Bei einer Änderung der Dateiprüfung müsstest du in deinem elseif-Beispiel vier (oder noch mehr) Stellen ändern, in der Schleife nur eine. Entsprechend schneller ist es erledigt und vor allen Dingen entsprechend geringer ist die Fehleranfälligkeit.

Kann man das auch mit switch und case lösen?

Nein, und mich wundert doch sehr, dass suit das bejaht. switch prüft eine einzelnes Etwas auf verschiedene Werte, du prüfst hingegen verschiedene Dinge auf ihren Wert.