0 votes
in SoSci Survey (dt.) by s160429 (210 points)
edited by s160429

Hallo Dr. Leiner

hier nochmal meine Fragen bezüglich der Punkteauswertung.
Eine einfache Auswertung hat bei mir gut funktioniert, nicht jedoch die Mehrfachauswahl.
Folgenden Code habe ich genutzt:


// Definition der Fragen und der korrekten Antworten
// Es werden nur jene Items definiert, die auch überprüft werden sollen
$fragen = [
  // In der Frage AB01 müssen 1 und 2 angekreuzt sein, 3 und 4 dürfen nicht angekreuzt sein
  'M101' => [1 => 1, 2 => 1, 3 => 2, 4 => 1, 5 => 1],
  'M102' => [1 => 1, 2 => 1, 3 => 1, 4 => 2, 5 => 1, 6 => 1],
  'M103' => [1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1, 6 => 2],
  'M104' => [1 => 2, 2 => 1, 3 => 1],
  'M105' => [1 => 1, 2 => 2],
  'M106' => [1 => 2, 2 => 1, 3 => 2, 4 => 1, 5 => 2, 6 => 2],
];
 
// Punktezähler initialisieren
$points = 0;
 
// Alle Fragen durchlaufen
foreach ($fragen as $frageKenn => $antworten) {
  // Für diese Frage den Fehlerzähler auf 0 setzen
  $fehler = 0;
  foreach ($antworten as $itemKenn => $vorgabe) {
    // Kennung des Items zusammenbauen
    $kennung = $frageKenn.'_'.$itemKenn;
    // Antwort des Teilnehmers abfragen
    $antwort = value($kennung);
    // Antwort auf Richtigkeit (eigentlich: Falschheit) prüfen
    if ($antwort != $vorgabe) {
      // Bei Abweichung einen Fehler zählen
      $fehler++;
    }
  }
  // Prüfen, ob die Frage fehlerfrei beantwortet wurde
  if ($fehler == 0) {
    // Einen Punkt vergeben
    $points++;
  }
}
 
// Das Ergebnis anzeigen oder anderweitig verarbeiten

if ( $points > 3 )
{
html('Sie haben '.$points.' Punkte erzielt und den Test bestanden. Herzlichen Glückwunsch!');
replace('%reportURL%', reportURL('report'));
text('button_report');

option('nextbutton', false);
option('breakbutton', false);
option('progress', false);
}
else
{
html('Sie haben zu wenig '.$points.' Punkte erzielt. Bitte wiederholen Sie den Test.');
}

Fehlermeldung ist stets:
Die Variablen-Kennung M101_1 gibt es in dem Befragungsprojekt nicht, stattdessen wird Variable M101_01 verwendet und für alle weiteren Fragen ebenso.

Gruss

1 Answer

0 votes
by SoSci Survey (306k points)

Im Moment wird die Kennung einfach aus Fragekennung + Unterstrich + Zahl zusammengesetzt. Da fehlt (wie die Fehlermeldung sagt) die führende Null.

$kennung = $frageKenn.'_'.$itemKenn;

Um es nicht unnötig kompliziert zu machen, baut die Funktion id() die Kennung passend zusammen:

$kennung = id($frageKenn, $itemKenn);

In der Anleitung zum Zälen von Punkten habe ich das soeben aktualisiert.

by s160429 (210 points)
das hat jetzt auch super geklappt.

eine Frage habe ich nun jedoch bezüglich der Punkte Zählung.
Die scheint irgendwie nicht korrekt zu laufen

Spielt es eine Rolle wenn ich die Reihenfolge der Antwortmöglichkeiten zufällig wähle? sollte ja eigentlich nicht.

Zumindest zählt er bei mir nicht richtig, obwohl ich die Antworten mit => 2 als richtig markiert haben und die falschen mit => 1

mit dem Code von oben berücksichtigt er lediglich die Frage M106 - alle anderern sind immer falsch - unabhängig davon was ich auswähle.
by SoSci Survey (306k points)
> Spielt es eine Rolle wenn ich die Reihenfolge der Antwortmöglichkeiten zufällig wähle?

Nein.

> Zumindest zählt er bei mir nicht richtig, obwohl ich die Antworten mit => 2 als richtig markiert haben und die falschen mit => 1

Wir sprechen doch von einer Mehrfachauswahl ... da gibt es kein >2, nur =2. Und Sie zählen mit dem Code oben auch nur, welche angekreuzt sind.

Aber Sie können sich ja einfach mal anzeigen lassen, was so gezählt wird. Ergänzen Sie dafür eine Zeile wie folgt:

if ($antwort != $vorgabe) {
      // Bei Abweichung einen Fehler zählen
      $fehler++;
      html('<p>Fehler bei '.$kennung.'</p>');
} else {
      html('<p>Korrekt bei '.$kennung.'</p>');
}

Und vielleicht noch hier:

html('<p>Fehler für '.$frageKenn.' = '.$fehler.'</p>');
if ($fehler == 0) {
by s160429 (210 points)
Ich habe das Problem, dass ich gerne eine Kombination aus "Mehrfachauswahl" und "einfachen Multiple choice" machen wollte. Das geht so ja offensichtlich nicht. Könnten Sie mir da helfen?


// Definition der Fragen und der korrekten Antworten
// Es werden nur jene Items definiert, die auch überprüft werden sollen
$fragen = [
  'M101' => 1,
  'M102' => 3,
  'M103' => 5,
  'M104' => 3,
  'M105' => 1,                           
  'M106' => [1 => 2, 2 => 1, 3 => 2, 4 => 1, 5 => 2, 6 => 2]
];
 
// 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
  }
}
by SoSci Survey (306k points)
> Das geht so ja offensichtlich nicht.

Doch, aber dann brauchen Sie zwei Codes und zwei PHP-Schnipsel, denn hinter einer Multiple-Choice-Fragen stehen eben mehrere Variablen, die man einzelnen durchgehen muss, und hinter einer einfachen Auswahl steht nur eine Variable.
by s160429 (210 points)
super, das hat nun auch geklappt.
Danke!

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

...