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

0 votes

Hallo,

wir programmieren gerade ein etwas komplexes Experiment.

Per JavaScript haben wir nun schon dynamische Filter eingebaut. Diese sind aber nur für einige Gruppen relevant. Das Problem ist, dass die Fragen die angezeigt werden als "muss beantwortet" werden eingestellt sind.

Wenn der Filter die Fragen also nicht anzeigt, bekommt der Teilnehmer trotzdem die Fehlermeldung, dass noch Fragen beantwortet werden müssen. Das ist natürlich schlecht.

In der Dokumentation haben ich nun die Option gefunden mit repeat_page() und if Abfragen zu arbeiten. Siehe: https://www.soscisurvey.de/help/doku.php/de:create:checks

Besteht aber evtl. auch die Möglichkeit mittels PHP Code eine Frage unter bestimmten Bedingungen von Pflicht aus Nicht-Pflicht zu stellen und umgekehrt?

in SoSci Survey (dt.) by s032383 (220 points)

1 Answer

0 votes

Nein, aber die manuelle Antwortprüfung mittels repeatPage() ist nicht besonders aufwändig.

Wir arbeiten daran, dass die Filter-Funktion, wie man sie direkt in der Frage definieren kann, auch die dynamische Anzeige von Fragen und damit verbunden eine dynamische Antwortpflicht unterstützt. Aber bis das fertig ist, wird es noch ein wenig dauern. Derweil ist repeatPage() das Mittel der Wahl.

by SoSci Survey (81.9k points)
Hallo,

danke wie immer für den top Support.

Habe das nun auf zwei Wegen probiert. Beide funktionieren nicht.
DV02 ist die Filterfrage. 1 heißt ja und dann werden DV03 und CO01 eingeblendet. 2 heißt nein und es geht einfach weiter. Fall 2 funktioniert. Fall 1 nicht.
DV03 ist ein Regler
CO01 ist  eine Skale mit Werten von 1-7

Idee 1:

if ($group > 6 and value('DV02') == 1) {
$items1 = getItems('DV03');
$items2 = getItems('CO01');

// Ermitteln der beantworteten Items
$answered1 = getItems('DV03', '>', 0);
$answered2 = getItems('CO01', '>', 0);
// Fehler und zurück, falls nicht alle oder keines beantwortet wurden
if ((count($answered1) > 0) and (count($answered1) < count($items2))) {
html('geht nicht 1');
//  repeatPage('finalbox');
}
elseif ((count($answered2) > 0) and (count($answered2) < count($items2))) {
  //repeatPage('finalbox');
html('geht nicht 2');
}
else {
//  goToPage('next');
html('geht nicht 3');
}
}

Idee 2:

if ($group > 6 and value('DV02') == 1) {
html('geht<br>');
$miss1 = getItems('DV03', 'is', -9);
$miss2 = getItems('CO01', 'is', -9);

// Fehler und zurück, falls nicht alle oder keines beantwortet wurden
if (count($miss1) == 0 || count($miss2) == 0) {
html('geht nicht 1');
//  repeatPage('finalbox');
}
else {
//  goToPage('next');
html('geht nicht 2');
}
}

Anscheinend mache ich irgendwas bei der Abfrage ob die DV03 oder CO01 leer sind etwas falsch. Irgendwelchje Ideen?
Versuchen Sie es bitte einmal mit

$miss1 = getItems('DV03', 'missing');
$miss2 = getItems('CO01', 'missing');

Lassen Sie sich direkt darunter mittels debug() auch gleich ausgeben, was SoSci Survey so gefunden hat:

debug($miss1);
debug($miss2);
DV03 hatte einen Wert, CO01 war leer. Ergebnis:

Debug-Information für $miss1:
Array (ohne Elemente)
Hinweis (Seite 9)
Debug-Information für $miss2:
01

Zweiter Versuch, beide Variablen leer:

Hinweis (Seite 9)
Debug-Information für $miss1:
01
Hinweis (Seite 9)
Debug-Information für $miss2:
01

*edit*

Hatte kein repeatpage() im Code. Scheint jetzt zu funktionieren. Kann man noch irgendwie die Fragen, die beantwortet werden müssen rot hinterlegen?

Kann man irgendwie den gleichen roten Kasten produzieren, der normalerweise erscheint wenn man ein Pflichtfeld nicht angibt. Also
"Bitte beantworten Sie auch diese Frage – Ihre Antwort auf die Frage ist für die Studie sehr wichtig."?

Der Textbaustein Warnung sieht etwas anders aus...
...