Übersetzungen dieser Seite:
 

Direktes Feedback für Befragte

Diese Anleitung beschreibt unterschiedliche Anwendungsfälle, wenn die Befragten nach dem Klick auf „Weiter“ direkt ein Feedback bekommen sollen, ob ihre Antwort richtig oder falsch war. Solch ein direktes Feedback wird beispielsweise in Online-Schulungen eingesetzt.

Der der Ausgestaltung des Feedbacks gibt es sehr viele Möglichkeiten. Diese Anleitung deckt exemplarisch einige dieser Möglichkeiten ab. Das Grundprinzip ist aber stets dasselbe: Mittels value() wird die Antwort des/der Befragten aus dem Datensatz ausgelesen und der korrekten Antwort gegenübergestellt. Die korrekte Antwort wird direkt im PHP-Code kodiert oder (bei großen Projekten mit vielen Fragen) in der Datenbank für Inhalte abgelegt. Je nach Ergebnis des Abgleichs wird dann mittels PHP-Filter angezeigt, dass die Antwort korrekt ist oder eben nicht.

Im Fall einer falschen Antwort kann man optional die korrekte Antwort anzeigen und/oder die Befragten müssen mittels „Zurück“ zur vorherigen Seite zurückkehren und ihre Antwort korrigieren.

Diese Anleitung ist in zwei Teile gegliedert. Im ersten Teil wird erklärt, wir man die Richtigkeit der Antwort in unterschiedlichen Designs überprüft. Im zweiten Teil werden unterschiedliche Varianten des Feedbacks erklärt.

Tipp: Wenn Sie ein Gesamtergebnis ausgeben möchten, z.B. den Anteil korrekter Antworten, dann lesen Sie die Anleitung Punkte für Antworten zählen.

Prüfen der Antwort

Der Abgleich zwischen der gegebenen Antwort und der korrekten Antwort hängt von zwei Faktoren ab:

  • Zum einen das Antwortformat, hier ist besonders wichtig, ob man nur einen Wert vergleicht (z.B. in einer einfachen Auswahl) oder ob mehrere Werte verglichen werden müssen (z.B. in einer Mehrfachauswahl oder wenn die Antwort mehrere Einzelantworten beinhaltet).
  • Zum anderen ist für die Implementierung wichtig, ob das Feedback nur für eine Handvoll Fragen benötigt wird oder ob es um einen längeren Fragenkatalog geht. Im zweiten Fall ist es zielführend, mit Arrays und loopToPage() zu arbeiten, sodass man den PHP-Code nicht vielfach kopieren muss.

In den folgenden Beispiele wird jeweils nur ein Text „Ihre Antwort ist richtig“ (Text mit der Kennung „FB01“) oder „Ihre Antwort ist falsch“ (Kennung „FB02“) als Feedback angezeigt. Weiter unten in der Anleitung wird erklärt, wie ein elaboriertes Feedback implementiert wird.

Der PHP-Code wird jeweils auf einer zusätzlichen Seite nach der Seite mit der eigentlichen Frage platziert. Ausnahme ist die Lösung mit loopToPage(). Dort werden für eine ganze Reihe von Fragen nur zwei Seiten benötigt, die mehrfach angezeigt werden: Eine Seite für die Fragen (es wird in jeder Wiederholung eine andere Frage gezeigt) und eine Seite für das Feedback.

Einfache Auswahl

Dieser grundlegende Vergleich zwischen einer Antwort und dem korrekten Wert ist zugleich die Grundlage für alle weiteren Filter. Im folegnden PHP-Code wird überprüft, ob in der Auswahlfrage „AB01“ die Option mit dem Antwortcode 3 ausgewählt wurde:

if (value('AB01') == 3) {
    text('FB01'); // Antwort korrekt
} else {
    text('FB02'); // Antwort falsch
}

Mehrfachauswahl

Eine Mehrfachauswahl hat für jede Auswahloption eine Variable. Diese kann den Wert 1 (nicht angekreuzt) oder 2 (angekreuzt) annehmen. Um eine Mehrfachauswahl korrekt zu beantworten, muss für jede Auswahloption überprüft, worden, ob diese korrekte benatwortet wurde – also ob die korrekt ausgewählt oder korrekt freigelassen wurde.

Nehmen wir als Beispiel eine Mehrfachauswahl AB02 mit 4 Antwortoptionen, von denen die zweite und vierte angekreuzt werden müssen,um korrekt zu antworten:

  • (AB02_01) Apfel
  • (AB02_02) Aubergine
  • (AB02_03) Erdbeere
  • (AB02_04) Erdapfel

Für die Überprüfung gibt es nun zwei Möglichkeiten. Der erste Fall verbindet 4 einzelne Antwortprüfungen mittels logischem „Und“ (Mehrere Bedingungen verknüpfen). Dies ist relativ einfach, aber sehr unhandlich:

if ((value('AB02_01') == 1) && (value('AB02_02') == 2) && (value('AB02_03') == 1) && (value('AB02_04') == 2)) {
    text('FB01'); // Antwort korrekt
} else {
    text('FB02'); // Antwort falsch
}

Denselben Code kann man auch ein wenig übersichtlicher schreiben, das macht ihn aber nur wenig handlicher:

if (
    (value('AB02_01') == 1) &&
    (value('AB02_02') == 2) &&
    (value('AB02_03') == 1) &&
    (value('AB02_04') == 2)
) {
    text('FB01'); // Antwort korrekt
} else {
    text('FB02'); // Antwort falsch
}

Eleganter wird es, wenn man das korrekte Antwortschema als Array definiert ([1,2,1,2]) und diese Liste mit der Liste der gegeben Antworten vergleicht, wie sie valueList() liefert. Allerdings muss hier noch die Funktion array_values() verwendet werden, denn valueList() liefert auch die Variablen-Kennungen, welche den Vergleich stören würden.

$antwort = array_values(valueList('AB02'));
$korrekt = [1,2,1,2];
if ($antwort == $korrekt) {
    text('FB01'); // Antwort korrekt
} else {
    text('FB02'); // Antwort falsch
}

Falls man etwas mehr Flexibilität benötigt, kann man auch mit einer FOR-Schleife mehrere Variablen vergleichen (siehe unten).

Vergleich mehrerer Variablen

Wenn eine Seite mehrere Fragen umfasst, dann kann man auch dies mit valueList() lösen wie oben bei der Mehrfachauswahl gezeigt. Allerdings wird das aufwändiger, weil die Variablennamen u.U. einzeln angegeben werden müssen.

Als Beispiel nehmen wir die beiden Fragen „AB01“ und „AB02“, welche beide richtig beantwortet werden müssen. Also eine 3 für die Variable „AB01“ und die Werte 1, 2, 1, 2 für die Variablen „AB02_01“ bis „AB02_04“.

$antwort  = array_values(valueList(['AB01', 'AB02_01', 'AB02_02', 'AB02_03', 'AB02_04']));
$korrekt = [3,1,2,1,2];
if ($antwort == $korrekt) {
    text('FB01'); // Antwort korrekt
} else {
    text('FB02'); // Antwort falsch
}

Eine alternative Lösung ist die Verwendung einer FOR-Schleife. Dabei werden die Variablen-Kennung und die korrekten Antworten zunächst als Array definiert und dann in der Schleife einzeln überprüft. Wenn ein Vergleich falsch ist, ist die komplette Antwort falsch.

$solution = [
    'AB01' => 3,
    'AB02_01' => 1,
    'AB02_02' => 2,
    'AB02_03' => 1,
    'AB02_04' => 2
];
 
$allRight = true;
foreach ($solution as $varID => $correct) {
    if (value($varID) != $correct) {
        $allRight = false;
    }
}
 
if ($allRight) {
    text('FB01'); // Antwort korrekt
} else {
    text('FB02'); // Antwort falsch
}

Auf falsche Antworten reagieren

Die Reaktion auf eine richtige oder falsche Antwort kann ganz unterschiedlich gestaltet werden. Wesentliche Bausteine sind:

  • Die PHP-Funktion text() zur Anzeige eines vordefinierten Textes.
  • Die PHP-Funktion option('nextbutton', false) zum Ausblenden des Weiter-Knopfes, sodass Befragte erst auf die vorherige Seite zurückkehren und die Antwort korrigieren müssen.
  • Die PHP-Funktion repeatPage(), um eine Meldung zu zeigen und direkt zur vorigen Seite zurückzukehren.
  • Die PHP-Funktionen getItems(), getItemtext() und html(), um die vorherige Frage nochmal anzuzeigen und falsche/richtige Antwortoptionen zu markieren.

Einen Text anzeigen

Die einfachste Variante, nämlich einen Text „Ihre Antwort war richtig“ zu zeigen, wurde oben bereits mehrfach verwendet.

Wenn Sie im Fragenkatalog in eine Rubrik Ihrer Wahl einen Text hinzufügen und für die Darstellung die Option „Formatierter Text“ auswählen, können Sie den Text auch ein klein wenig gestalten.

Wenn Sie den Text etwas ansprichsvoller gestalten möchten, wählen bei Darstellung die Option „HTML-Code“ und verwenden Sie HTML und CSS (Texte formatieren):

<div style="border: 2px solid green; padding: 10px 16px; border-radius: 5px; background-color: #99FF99; text-align: center; Width: 50%; margin: 3em auto;">
Ihre Antwort ist richtig.
</div>

Zur weiteren Gestaltung können Sie auch Bilder verwenden, siehe Bilder im Fragebogen.

Die Einbindung des Textes erfolgt, wie oben gezeigt, mittels text(). Das folgende Beispiel geht davon aus, dass die Text für die positive Rückmeldung die Kennung „FB01“ und der Text für die negative Rückmeldung die Kennung „FB02“.

Die PHP-Variable $allRight wäre weiter oben im PHP-Code definiert worden – etwa so wie im Beispiel oben. Im IF-Filter kann natürlich auch eine andere Bedingung stehen (siehe oben).

if ($allRight) {
  text('FB01');
} else {
  text('FB02');
}

Weiter-Knopf blockieren

Mit der Funktion option('nextbutton', false) kann man bei einer falschen Antwort auch den Zurück-Knopf ausblenden.

if ($allRight) {
  text('FB01');
} else {
  text('FB02');
  option('nextbutton', false);
}

Direkt zur vorigen Seite springen

Mit der Funktion repeatPage() kann man im Fall einer falschen Antwort auch direkt die Seite mit der Frage wiederholen.

if (!$allRight) {
  repeatPage('FB02');
}

Die positive Meldung wäre in diesem Fall obsolet.

Detailliertes Feedback

Etwas aufwändiger ist es, wenn man die Frage und die falschen und richtigen Antworten direkt als Feedback zeigen möchte. Der folgende PHP-Code prüft zunächst die Antworten auf unterschiedliche Fragen „AB01“ bis „AB05“ und zeigt dann für jede Teilfrage an, ob diese korrekt beantwortet wurde oder nicht.

// Hier die Fragen und die korrekten Antworten eintragen
$antworten = [
  'AB01' => 1,
  'AB02' => 2,
  'AB03' => 2,
  'AB04' => 1,
  'AB05' => 1
];
 
// Hier folgt der PHP-Code für die Anzeige
foreach ($antworten as $frage => $correct) {
    html('
        <div class="question">
        <div class="text">'.getItemtext($frage, 'question').'</div>
    ');
    $antwort = value($frage);
    if ($antwort == $correct) {
        html('<div class="correct">✔️ '.getItemtext($frage, $antwort).'</div>');
    } else {
        html('<div class="wrong">❌ '.getItemtext($frage, $antwort).'</div>');
        html('<div class="better">⚠️ '.getItemtext($frage, $correct).'</div>');
    }
    html('</div>');
}
 
// Hier das Layout
pageCSS('
    div.question { margin-bottom: 3em; }
    div.question div.text { font-weight: bold; margin-bottom: 0.5em; }
    div.question div.correct { margin-bottom: 0.5em; color: green; }
    div.question div.wrong { margin-bottom: 0.5em; text-decoration: line-through; }
    div.question div.better { margin-bottom: 0.5em; color: green; font-weight: bold; }
');

Viele Fragen

Wenn eine größere Anzahl Fragen auf einzelnen Seiten präsentiert werden soll, dann kommt die Funktion loopToPage() zum Einsatz. Die Liste der Fragen inklusive Antworten wird in einem Array definiert.

Im Fragebogen werden zwei Seiten benötigt. Die erste Seite bekommt im folgenden Beispiel die Seitenkennung „frage“, die zweite Seite bekommt die Seitenkennung „feedback“.

Auf der Seite „frage“ wird die Liste der Fragen und korrekter Antworten definiert. Im folgenden Beispiel für Mehrfachauswahlfragen „AB02“ bis „AB06“. Mittels registerVariable() wird dieses Array auch für Seite 2 verfügbar gemacht.

$fragen = [
  'AB02' => [1,2,1,2],
  'AB03' => [2,2,1,1],
  'AB04' => [2,1,1,2],
  'AB05' => [1,2,2,1],
  'AB06' => [1,1,1,2]
];
registerVariable($fragen);
 
$i = loopToPage('feedback', count($fragen));
 
// Frage anzeigen
$frageIDs = array_keys($fragen);
$frageID = $frageIDs[$i];
question($frage);

Auf der zweiten Seite „feedback“ wird dann die Antwort überprüft und das Feedback angezeigt.

$i = loopIndex();
$frageIDs = array_keys($fragen);
$frageID = $frageIDs[$i];
 
$correct = $fragen[$frageID];
$answer  = array_values(valueList($frageID));
if ($answer == $correct) {
  text('FB01');
} else {
  text('FB02');
}
de/create/feedback-correct.txt · Zuletzt geändert: 03.03.2023 15:06 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki