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

Wir versuchen schon länger ein Problem zu lösen und hoffen, dass ihr uns dabei helfen könnt.

Unser Fragebogenprojekt besteht im wesentlichen aus 8 Begriffen, zu denen via Texteingabe zunächst angegeben werden soll, was den TeilnehmerInnen dazu einfällt (dazu gibt es 5 Eingabefelder). Anschließend soll (auf den nächsten Seiten) jede der genannten Antworten auf einer Skala (-/0/+) bewertet werden (eine Bewertungsseite pro Antwort).

Die Vorgabe der Begriffe ist randomisiert, wobei jeweils die Seite mit dem Begriff (und 5 Texteingabefeldern) sowie die folgenden Seiten, auf denen die genannten Antworten bewertet werden sollen (maximal 5 - eine Seite pro Antwort) als Blöcke definiert sind.

Der Code für die Randomisierung ist:

if (!isset($blocks)) {
  $blocks = array('B1Start-B1End','B2Start-B2End','B3Start-B3End','B4Start-B4End','B5Start-B5End','B6Start-B6End','B7Start-B7End','B8Start-B8End'); 
  shuffle($blocks);
  //Reihenfolge speichern
  for ($i=0; $i<count($blocks); $i++) {
    $id = id('BI01', $i + 1);
    put($id, $blocks[$i]);
  }
  $blocks[] = 'Anleitung Frageboegen';
  registerVariable($blocks);
}
setPageOrder($blocks);

Der Code für die Bewertung der genannten Antworten ("Ass1-AssX") ist:

// Create a list of all items in the question
$items = getItems('FA01');
// Determine items answered
$answered = getItems('FA01', '>', 0);

if (count($answered) == 1) {
    goToPage('B1End');
}
if (count($answered) == 2) {
    goToPage('Ass2');
}
if (count($answered) == 3) {
    goToPage('Ass3');
}
if (count($answered) == 4) {
    goToPage('Ass4');
}
if (count($answered) == 5) {
    goToPage('Ass5');
}

sodass (beginnend bei der letzten genannten Antwort), nur jene Zeilen auf den nächsten Seiten zur Bewertung angezeigt werden, in denen eine Antwort genannt wurde.

Der Code für die Bewertungsseiten sieht so aus (hier die Bewertung der 5. Antwort zum 1. Begriff):

$ass05 = value('FA01x05');
html('<H2><p align="center"><b>'.$ass05.'</b></p></H2>');

(darunter ist ein Eingabefeld mit den Optionen -/0/+)

Hierbei gibt es zwei Probleme:

1.) Wenn beispielsweise nur eine Antwort genannt wird, wird diese auf der nächsten Seite korrekt zur Bewertung vorgegeben. Allerdings wird auf der nächsten Seite eine "leere Antwort" zur Bewertung vorgegeben (es erfolgt also ein Verweis auf ein Texteingabefeld, das nicht ausgefüllt wurde). Wir können nicht nachvollziehen, woher dieser Fehler stammt. Im Debug Mode tritt dieser Fehler auch nicht auf, in allen anderen Modi allerdings schon.

(Anmerkung dazu: Der Fehler tritt nicht konsistent auf: auf manchen PCs funktioniert es im Debug Modus problemlos, auf manchen nicht. Gestern trat der Fehler auf manchen PCs auch im normalen Modus nicht auf, ohne das etwas am Code geändert worden wäre.)

2.) Wenn auf der Bewertungsseite auf "weiter" geklickt wird, ohne dass eine Bewertung abgegeben wurde (markierte Fragen müssen beantwortet werden), wird als nächste Seite wieder eine Bewertungsseite einer "leeren Antwort" angezeigt (gleiches Problem wie oben). Wenn sofort eine Bewertung angeklickt wurde und dann auf "weiter" geklickt wird, besteht dieses Problem nicht.

Wir sind über alle Vorschläge zur Behebung der Probleme sehr dankbar.

LG

in SoSci Survey (dt.) by s149488 (130 points)
edited by SoSci Survey
> Allerdings wird auf der nächsten Seite eine "leere Antwort" zur Bewertung vorgegeben (es erfolgt also ein Verweis auf ein Texteingabefeld, das nicht ausgefüllt wurde).

Was sagt denn die Debug-Information in diesem Fall?

Generell empfehle ich, goToPage() sparsam einzusetzen - und vorzugsweise mittels goToPage('next') in Ihrem Fall. Also z.B.

if (count(...)) < 3) {
  goToPage('next');
}

Ich möchte auch nicht ausschließen, dass goToPage() und setPageOrder() in Kombination unerwünschte Effekte verursachen. Aber das müssten wir, wie gesagt, einmal anhand der Debug-Information genauer ansehen.

1 Answer

0 votes

Danke!

$answered = getItems('FA01', 'valid');

statt

$answered = getItems('FA01', '>', 0);

löst das Problem (hoffe ich).

by s149488 (130 points)
...