0 votes
in SoSci Survey (dt.) by s234808 (110 points)

Guten Tag,
ich habe einen PHP-Code mit vielen Bedinungen geschrieben und diesen in meinen Fragebogen eingefügt. Er soll bewirken, dass die Teilnehmer auf eine bestimmte Seite innerhalb des Fragebogens weitergeleitet werden, je nach dem welche Antworten sie zuvor bei 3 verschiedenen Fragen angegeben haben.

Hier ein Auszug aus dem PHP Code:

if (value('DG02') == 2 && value('DG03_01') < 30 && value('DG03_01') > 19 && value('DG07') == 1) {
goToPage('PM2S');
} elseif (value('DG02') == 2 && value('DG03_01') < 30 && value('DG03_01') > 19 && value('DG07') == 2) {
goToPage('PM2M');
} elseif (value('DG02') == 2 && value('DG03_01') < 30 && value('DG03_01') > 19 && value('DG07') == 3) {
goToPage('PM2L');
.....
}

Der Code funktioniert, erzeugt aber die Warnung "PHP-Code ist deutlich zu lang. Bitte lagern Sie Daten in die Datenbank für Inhalte aus".

Ich weiß, dass man über den Reiter "PHP-Funktionen" html Funktionen auslagern kann und über die "Datenbank für Inhalte" Daten im csv Format.
Aber gibt es für mich eine einfache Art und Weise meinen PHP-Code zu kürzen oder diesen irgendwohin auszulagern? Wenn das kürzen nur mit FOR Schleifen möglich ist, können Sie mir an meinem Beispiel zeigen, wie diese auszusehen hätten?
Ich persönlich bin leider PHP-Anfänger.

Sehr viel lieben Dank im Voraus für die Rückmeldung!

1 Answer

0 votes
by SoSci Survey (327k points)

Aber gibt es für mich eine einfache Art und Weise meinen PHP-Code zu kürzen

Ja, und übersichtlicher wird er dann auch. Zumindest dann, wenn Sie in jeder Bedingung dieselben Variablen prüfen. Legen sie ein Array mit den Beindungen an, z.B. für Ihren Code oben:

$conditions = [
  [2, 30, 19, 1, 'PM2S'],
  [2, 30, 19, 2, 'PM2M'],
  [2, 30, 19, 3, 'PM2L'],
  // u.s.w.
];

Das können Sie dann in einer Schleife einfach abarbeiten:

foreach ($conditions as $condition) {
    if (value('DG02') == $condition[0] && value('DG03_01') < $condition[1] && value('DG03_01') > $condition[2] && value('DG07') == $condition[3]) {
    goToPage($condition[4]);
  }
}

Ich bin mir nur zu 99% sicher, dass goToPage() eine Variable als Sprungziel erlaubt - testen Sie das bitte einmal, bevor Sie alles umstellen.

Aber: Meistens ist das Springen im Fragebogen aber keine gute Lösung. Das bedeutet vermutlich, dass Sie sehr viele Seiten haben und das Ganze ziemlich unübersichtlich ist. Meistens ist es deutlich (!) besser zu pflegen, wenn Sie die Inhalte auf derselben Seite variieren (mittels PHP-Code).

Und: Sie könnten den Code auch schon wesentlich vereinfachen, wenn Sie die Filter verschachtel, für Ihre oben stehenden Code z.B.

if (value('DG02') == 2) {
    if (value('DG03_01') < 30 && value('DG03_01') > 19) {
        if (value('DG07') == 1) {
            goToPage('PM2S');
        } if (value('DG07') == 2) {
            goToPage('PM2M');
        } if (value('DG07') == 3) {
            goToPage('PM2L');
        }
        .....
    }
    ....
}
by s234808 (110 points)
Vielen dank für die Antwort! Hat sehr geholfen :)
goToPage hat wirklich nicht mit der Variable funktioniert, aber ich habe es durch ein question() ersetzt und ich habe jetzt auch geschafft, dass alles auf einer Seite angezeigt wird.
Nochmal herzlichen 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

...