0 votes
in SoSci Survey (dt.) by s183177 (230 points)

Hallo,

ich habe einen PHP-Code geschrieben, der verschiedene Bedingungen prüfen soll und dann bestimmte Textbausteine (s. unten, FehlerFach, FehlerTag, etc.) ausgeben soll.
In dem geschriebenen Code habe ich das Problem, dass immer nur ein Textbaustein (der der ersten zutreffenden Bedingung) angezeigt wird, auch wenn mehrere Bedingungen zutreffen. Ich gehe davon aus, dass das daran liegt, dass immer aufgehört wird zu prüfen, sobald eine Bedingung zutrifft.

Ich hätte allerdings gerne, dass wenn Bedingungen 1 und 4 beide zutreffen, dass dann auch beide Textbausteine angezeigt werden. Theoretisch könnte ich die späteren Bedingungen jeweils noch mit else verschachtelt in die vorherigen Bedingungen mit aufnehmen. Das wird allerdings sehr lang und kompliziert. Gibt es noch eine andere, leichtere Möglichkeit?

Hier folgt mein Code:

if ($failr0s1_1a1 || $failr0s1_1a2 || $failr0s1_1a3 || $failr0s1_1a4) {
         if (time() < $timeout) {
                if (!isset($rPGr0s1)) {
                    $rPGr0s1 = true;
                    registerVariable($rPGr0s1);
                    put('F001_01', 0);
                    repeatPage('FehlerFach');
                    }
                else {
                    repeatPage('FehlerFach');
                    }
            }
        else { 
           put('F001_02', 0);
        }
}

elseif ($failr0s1_2a1 || $failr0s1_2a2 || $failr0s1_2a3 || $failr0s1_2a4) {
         if (time() < $timeout) {
                if (!isset($rPGr0s1)) {
                    $rPGr0s1 = true;
                    registerVariable($rPGr0s1);
                    put('F001_01', 0);
                    repeatPage('FehlerTag');
                    }
                else {
                    repeatPage('FehlerTag');
                    }
            }
        else { 
           put('F001_02', 0);
        }
}

elseif ($failr0s1_3a1 || $failr0s1_3a2 || $failr0s1_3a3 || $failr0s1_3a4) {
         if (time() < $timeout) {
                if (!isset($rPGr0s1)) {
                    $rPGr0s1 = true;
                    registerVariable($rPGr0s1);
                    put('F001_01', 0);
                    repeatPage('FehlerZeit');
                    }
                else {
                    repeatPage('FehlerZeit');
                    }
            }
        else { 
           put('F001_02', 0);
         }
}
elseif ($failr0s1_4a1 || $failr0s1_4a2 || $failr0s1_4b1 || $failr0s1_4b2) {
         if (time() < $timeout) {
                if (!isset($rPGr0s1)) {
                    $rPGr0s1 = true;
                    registerVariable($rPGr0s1);
                    put('F001_01', 0);
                    repeatPage('FehlerLab');
                    }
                else {
                    repeatPage('FehlerLab');
                    }
            }
        else { 
           put('F001_02', 0);
        }
}

elseif ($failr0s1_5a1 || $failr0s1_5a2 || $failr0s1_5a3 || $failr0s1_5a4) { 
         if (time() < $timeout) {
                if (!isset($rPGr0s1)) {
                    $rPGr0s1 = true;
                    registerVariable($rPGr0s1);
                    put('F001_01', 0);
                    repeatPage('FehlerSprache');
                    }
                else {
                    repeatPage('FehlerSprache');
                    }
            }
        else { 
           put('F001_02', 0);
        }
}
elseif ($failr0s1_7a1 || $failr0s1_7a2 || $failr0s1_7a3 || $failr0s1_7a4) { 
         if (time() < $timeout) {
                if (!isset($rPGr0s1)) {
                    $rPGr0s1 = true;
                    registerVariable($rPGr0s1);
                    put('F001_01', 0);
                    repeatPage('FehlerNawi');
                    }
                else {
                    repeatPage('FehlerNawi');
                    }
            }
        else { 
           put('F001_02', 0);
        }
}

else {
     if (time() < $timeout) {
            put('F001_02', 1);
    }
    else { 
           put('F001_02', 0);

        }

}

Vielen Dank im Voraus!

1 Answer

+1 vote
by SoSci Survey (328k points)
selected by s183177
 
Best answer

In dem geschriebenen Code habe ich das Problem, dass immer nur ein Textbaustein (der der ersten zutreffenden Bedingung) angezeigt wird

Das liegt daran, dass Sie mit elseif arbeiten. elseif heißt: "Wenn keine der vorigen Bedingungen zutrifft, und diese hier zutrifft".

Ersetzen Sie Ihre elseif bitte durch if, wenn Sie alle Bedingungen prüfen möchten, und entfernen Sie den else-Teil ganz am Ende.

by s183177 (230 points)
Vielen Dank für die schnelle Antwort!

Leider klappt es auch nicht, wenn ich die elseifs ersetze und den else Teil am Ende wegnehme. Könnte es vielleicht auch damit zu tun haben, dass ich die Textbausteine als "Warnung"angelegt" habe und zum Beispiel immer nur eine Warnung pro Seite gezeigt werden kann?
by SoSci Survey (328k points)
Ich sehe gerade erst, dass Sie die Texte ja nicht mittels text() einbinden, sondern mittels repeatPage().

Wenn Sie diese Befehl verwenden, springt SoSci Survey direkt zur vorigen Seite, und führt keinen weiteren PHP-Code mehr auf der Seite aus.

Lösung: Ersetzen Sie repeatPage() durch text() und ergänzen Sie am Ende noch einen Filter mit repeatPage() und ohne Text.

if ($rPGr0s1) {
  repeatPage();
}
by s183177 (230 points)
Das hat geklappt, vielen Dank!!

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...