======  Bedingungen mit mehr als 2 Möglichkeiten ======

Oft gibt es nicht nur zwei Möglichkeiten, wie es nach einem Filter weitergeht, sondern mehrere.
Beispielsweise sollen Personen mit analogem Internet-Anschluss oder ISDN nach dem genutzten Tarif gefragt werden, DSL-Nutzer nach Geschwindigkeit und Anschlussanbieter. Personen mit einem anderen Anschluss bekommen Fragen zur Art des Kabels zwischen Computer und Wand.

Für solche Fälle können Sie zwei verschiedene Sprachkonstrukte verwenden: ''elseif'' und ''switch''. Ersteres knüpft an die bekannte if-else-Konstruktion an, Zweiteres wird hier eher der Vollständigkeit halber erklärt. Das ''switch'' ist mitunter etwas übersichtlicher, wenn mehrere Ausprägungen derselben Variable überprüft werden sollen.

===== IF und ELSE verschachteln =====

Wenn-Dann-Sonst-Filter kann man beliebig fortsetzen:

  * __Wenn__ der Internetanschluss Analog oder ISDN ist, dann wird Frage 1 gestellt.
  * __Wenn nicht__, dann wird eine neue Bedingung geprüft:
    * __Wenn__ der Anschluss DSL ist, dann wird Frage 2 gestellt.
    * __Wenn nicht__, dann wird eine neue Bedingung geprüft...
      * Diese Reihe lässt sich beliebig fortsetzen.

{{div.filter_elseif.data.png?nolink|Filterfrage mit 3 verschiedenen Antwortvorgaben}}

Wenn man die Frage TF03 nach dem Internetanschluss auf Seite 1 gestellt hat, sieht der Filter auf Seite 2 im PHP-Code Element dann aus wie folgt:

<code php>
if (value('TF03') == 1) {  // Analog oder ISDN?
  question('IN15');  // Frage nach Tarif
} else {
  // Im else-Teil steht (verschachtelt) ein neuer Filter
  if (value('TF03') == 2) {  // DSL-Anschluss?
    question('IN16');  // Frage zum DSL-Anschluss
  } else {
    // Im else-Teil steht (verschachtelt) ein neuer Filter
    if (value('TF03') == 3) {  // Sonstiger-Anschluss?
      question('IN17');  // Frage zum Kabel
    } else {
      html('<p>Sie haben keine Antwort gegeben!</p>');
    }
  }
}
</code>

Solche verschachtelten Konstruktionen können sinnvoll sein -- aber im vorliegenden Fall funktioniert es auch übersichtlicher.

===== IF und ELSE fortsetzen =====

Folgende Konstruktion liefert genau dasselbe Ergebnis wie das vorhergehende Beispiel. Auch sie könnte beliebig fortgesetzt werden.

<code php>
// Beispiel für else if - nicht verschachtelt
if (value('TF03') == 1) {  // Analog oder ISDN?
  question('IN15');  // Frage nach Tarif
} else if (value('TF03') == 2) {  // DSL-Anschluss?
  question('IN16');  // Frage zum DSL-Anschluss
} else if (value('TF03') == 3) {  // Sonstiger Anschluss?
  question('IN17');  // Frage zum Kabel
} else {
  html('<p>Sie haben keine Antwort gegeben!</p>');
}
</code>


===== ELSE + IF = ELSEIF =====

In PHP gibt es zur einfacheren Schreibweise den Befehl ''elseif''. Die Anweisung nach diesem Befehl wird dann ausgeführt, wenn die Bedingung nach ''elseif'' erfüllt ist, aber keine vorhergehende. Praktisch ist ''elseif'' nichts anderes als das ''else if'' im obigen Beispiel.

<code php>
// PHP-Code – Beispiel für elseif
if (value('TF03') == 1) {  // Analog oder ISDN?
  question('IN15');  // Frage nach Tarif
} elseif (value('TF03') == 2) {  // DSL-Anschluss?
  question('IN16');  // Frage zum DSL-Anschluss
} else {  // Keines der vorigen?
  // Die Prüfung der letzten Bedingung kann man sich sparen,
  // wenn für die Frage der Antwortzwang aktiviert wurde
  question('IN17');  // Frage zum Kabel
}
</code>

Man kann den Wert von TF03 auch vorab in eine Variable ([[variables#php-variablen|PHP-Variablen]]) speichern. Dadurch wird es nochmals übersichtlicher:

<code php>
// Wert in Variable speichern
$cn = value('TF03');
if ($cn == 1) {        // Analog oder ISDN?
  question('IN15');      // Frage nach Tarif
} elseif ($cn == 2) {  // DSL-Anschluss?
  question('IN16');      // Frage zum DSL-Anschluss
} else {                 // Keines der vorigen?
  question('IN17');      // Frage zum Kabel
}
</code>


===== SWITCH =====

Falls wie im Beispiel nur verschiedene Ausprägungen einer Variable abgefragt werden sollen, ist es natürlich etwas umständlich, jedes mal das ''value('TF03')'' anzuschreiben. Stattdessen gibt es in PHP die ''switch''-Konstruktion.

Dabei gibt man hinter dem ''switch'' in Klammern an, welcher Wert überprüft werden soll. Hinter jeweils einem ''case'' stehen dann die verschiedenen Möglichkeiten, gefolgt von einem Doppelpunkt.

**Wichtig:** Hinter den Befehle muss aber (im Gegensatz zur ''elseif''-Konstruktion) immer ein ''break'' stehen -- sonst wird __alles ab__ dem ''case'' ausgeführt.

<code php>
switch (value('TF03')) {
  case 1:
    question('IN15');  // Frage nach Tarif
    break;
  case 2:
    question('IN16');  // Frage zum DSL-Anschluss
    break;
  case 3:
    question('IN17');  // Fragen zum Kabel
    break;
  default:             // Default wird verwendet, wenn kein case zutrifft
    html('<p>Ungültige Antwort</p>');
    break;             // Das letzte break muss nicht sein
}
// Weitere Fragen, die alle gestellt bekommen
question('BB01');
</code>

Natürlich lässt sich dies auch platzsparender schreiben:

<code php>
switch (value('TF03')) {
  case 1: question('IN15'); break;  // Frage nach Tarif
  case 2: question('IN16'); break;  // Frage zum DSL-Anschluss
  case 3: question('IN17'); break;  // Fragen zum Kabel
  default: html('<p>Ungültige Antwort</p>');
}
// Weitere Fragen, die alle gestellt bekommen
question('BB01');
</code>