0 votes
in SoSci Survey (dt.) by s148579 (215 points)
edited by SoSci Survey

Hallo liebes SoSci Survey-Team,

ich habe einen Fragebogen mit 54 Aufgaben, wobei jede Aufgabe auf einer Seite dargestellt ist. Die Aufgabe ist so gestellt, dass die Vpn die Aufgabe erst selbst beantwortet (Multiple Choice Frage mit 4 Antwortmöglichkeiten und einer korrekten Antwort). Anschließend kriegt sie einen Rat und soll dieselbe Aufgabe nochmals bearbeiten.

Ich würde mir gerne Folgendes automatisiert in einer internen Variable ausgeben lassen:

  1. Ob die Beantwortung der Frage im ersten Durchlauf richtig war
  2. Ob die Beantwortung der Frage im zweiten Durchlauf richtig war

Ist es möglich einen PHP Code hierfür zu generieren, der dann für alle Aufgaben durchläuft oder muss ich für jede Seite einen PHP Code generieren?

// Definition der Fragen und der korrekten Antworten
$fragen = [
  ' T137' => 1,  // In Frage T158 ist die richtige Antwort die 1
  'T158 ' => 1
];
 
// Initialisierung einer Zähler-Variable
$points = 0;
 
// Prüfung aller Fragen in einer Schleife
foreach ($fragen as $variable=>$correct) {
  // Die Antwort des Teilnehmers abrufen
  $answer = value($variable);
  // Überprüfen und ggf. einen Punkt zählen
  if ($answer == $correct) {
    $points++;  // Gleichbedeutend mit $points = $points + 1
  }
}
 
// Das Ergebnis in einer internen Variable speichern
put('IV01_01', $points);

Ich hatte es mit diesem Code hier versucht, allerdings erhalte ich folgende Fehlermeldungen:

Questionnaire Error (page 11) Variable T137 is unknown to this project
(see listing of variables). Therefore no result can be retrieved.
Questionnaire Error (page 11) Variable T158 is unknown to this project
(see listing of variables). Therefore no result can be retrieved.
Questionnaire Error (page 11) The command put() has been used with the
label IV01_01. There is no label with this ID. If this is the ID of an
"internal variables&qupt; question, please give the ID of one of its
variables.

Über eine Rückmeldung und Hilfe würde ich mich sehr freuen!

Danke und viele Grüße

1 Answer

0 votes
by SoSci Survey (305k points)

Variable T137 is unknown to this project

Wenn Sie eine Mehrfachauswahl haben, dann hat jede entsprechende Frage mehrere Variablen. Prüfen Sie bitte (a) ob der Fragetyp passt und (b) im Karteireiter "Variablen" in der Frage, wie die Variablen heißen.

Meine Vermutung wäre, dass Sie einfch nur den Fragetyüü auf eine einfache "Auswahl" ändern möchten. Und bitte lassen Sie das Leerzeichen in der ersten Zeile der Liste weg ' T137'.

by s148579 (215 points)
Hallo,

ich habe den Fragetyp von Horizontale Auswahl auf Auswahl geändert und zudem auch den Variablennamen überprüft, der mir auch als T137 angezeigt wird. Das Leerzeichen wurde auch entfernt, dennoch erhalte ich dieselbe Fehlermeldung.

Ich hatte es auch mit T137 mit der Kennung der Antwortoptionen versucht, dennoch hat es nicht geklappt.
by SoSci Survey (305k points)
Die horizonale Auswahl ist auch vollkommen in Ordnung, nur nicht die "Mehrfachauswahl". Würden Sie bitte in der "Variablenübersicht" nochmal prüfen, dass Sie dort die Variable T137 finden?
by s148579 (215 points)
Ja, T137 wird mir auch in der Variablenübersicht angezeigt:


[T137] !Horizontal Selection

Task - Trial

"What emotion are the eyes expressing?"

T137 Task - Trial

1 = a) jealous
2 = b) panicked
3 = c) arrogant
4 = d) hateful
-9 = Not answered
by SoSci Survey (305k points)
Dann dürfte diese Fehlermeldung aber nicht angezeigt werden. Bitte posten Sie doch nochmal Ihren aktuellen PHP-Code und (!) den exakten Wortlaut der Fehlermeldung. Danke.
by s148579 (215 points)
PHP Code:

// Definition der Fragen und der korrekten Antworten
$fragen = [
  'T137' => 1,  // In Frage T137 ist die richtige Antwort die 1
  ];
 
// Initialisierung einer Zähler-Variable
$points = 0;
 
// Prüfung aller Fragen in einer Schleife
foreach ($fragen as $variable=>$correct) {
  // Die Antwort des Teilnehmers abrufen
  $answer = value($variable);
  // Überprüfen und ggf. einen Punkt zählen
  if ($answer == $correct) {
    $points++;  // Gleichbedeutend mit $points = $points + 1
  }
}
 
// Das Ergebnis in einer internen Variable speichern
put('IV01_01', $points);


Fehlermeldung:


Questionnaire Error (page 5)
Variable T137 is unknown to this project (see listing of variables). Therefore no result can be retrieved.
Questionnaire Error (page 5)
The command put() has been used with the label IV01_01. There is no label with this ID. If this is the ID of an "internal variables&qupt; question, please give the ID of one of its variables.
by SoSci Survey (305k points)
Die Meldung mit IV01_01 ist schnell geklärt - die passende interne Variable müssen Sie bitte anlegen und dann deren Kennung im PHP-Code eintragen: https://www.soscisurvey.de/help/doku.php/de:create:questions:internal

Die andere Fehlermeldung irritiert mich ein wenig. Wenn Sie ganz zu Beginn der PHP-Codes noch folgendes einfügen, wird die Fehlermeldung dann doppelt angezeigt?

$test = value('T137');
debug('T137');
debug($test);

Und wenn Sie die Seite mit der Frage T137 beantworten, was wird denn dann in der Debug-Information angezeigt? https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s148579 (215 points)
Ich habe nun bemerkt, dass ich den Code an der falschen Stelle (unmittelbar nach dem Item T137) platziert hatte und es deswegen nicht geklappt hat. Der Code funktioniert nun. Tausend Dank!

Zwei Fragen hätte ich noch bezüglich des Codes: Verstehe ich es richtig, dass die interne Variable eine Summe von Punkten generiert , die durch jede korrekte Antwort um 1 Punkt ansteigt? D.h. wenn ich bei 54 Aufgaben in der internen Variable eine Zahl von 36 erhalte, kann ich daraus schließen, dass 36/54 Aufgaben richtig beantwortet wurden?

Somit könnte ich einen Code über alle 54 Aufgaben schreiben, der dann nach den 54 Aufgaben zu platzieren ist, richtig?

Kann man den Code noch so anpassen, dass ich eine interne Variable erhalte, die mir beispielsweise ausgibt, ob die Antwort zu Item 1 mit der Antwort von Item 2 übereinstimmt?
by SoSci Survey (305k points)
> Verstehe ich es richtig, dass die interne Variable eine Summe von Punkten generiert

Mit der Zeile
$points++
zählen Sie pro korrekter Antwort um 1 hoch und mit dem put() wird der Wert am Ende in die interne Variable geschrieben. Also: ja.

> Somit könnte ich einen Code über alle 54 Aufgaben schreiben, der dann nach den 54 Aufgaben zu platzieren ist, richtig?

Ja, entweder das. Oder Sie speichern den Code unter "PHP-Funktionen" in eine Funktion, und rufen diese dann nach jeder Seite auf. Dann haben Sie auch Punktwerte von Abbrechern. Aber in aller Regel ist das nicht notwendig.

> Kann man den Code noch so anpassen, dass ich eine interne Variable erhalte, die mir beispielsweise ausgibt, ob die Antwort zu Item 1 mit der Antwort von Item 2 übereinstimmt?

Natürlich ... aber da bräuchten Sie dann 54-1=53 interne Variablen, um die Gleichheit immer zu speichern, oder?

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

...