0 votes
ago in SoSci Survey (dt.) by u085794 (200 points)

Lieber Online-Support,

ich habe mal wieder ein Brett vorm Kopf.

Der Code soll auf ein beantwortetes Item zurückgreifen. Da das relevante Item eine Freitexteingabe ist, will ich wenigstens Groß- und Kleinschreibung ignorieren, Tippfehler sind dann halt so. Dabei soll der Code die Frage wiederholen, die richtige Antwort in grün, die falsch in rot darstellen. Bei falscher Antwort soll die richtige Antwort und ein Hinweis folgen.

Die Zeile 'Die richtige Antwort: ' . $richtig; wird mit allen Versuchen, die ich bisher gestartet habe, nie richtig angezeigt. Wo liegt der Fehler? Ich danke schonmal in Voraus für Aufklärung!

Da ich für ein Itemset einfaches Feedback geben möchte (20 Vokabeln, für das andere elaboriertes Feedback), bin ich auch gerade am Überlegen, wie man sowas schlau automatisieren kann. Es handelt sich um persische Vokabeln, daher habe ich sie aktuell in Textfelder zu den Items geschrieben. Das ganze wird nur sehr aufwändig einzupflegen. Falls es dafür eine elegantere Lösung gibt, wäre ich über Vorschläge dankbar.

Beste Grüße & vielen Dank für die Unterstützung!

$html = '<table>';
$itemtext = getItemtext('T102', 'question');
$antwort = value('T102_01', 'text');
$richtig = value('T101'); // Wert von T101 wird zugewiesen

// Überprüfen, ob die Antwort "pflaume" (case-insensitive) ist
if (strtolower($antwort) == 'pflaume') {
    $antwortFarbe = 'green';
} else {
    $antwortFarbe = 'red';
}

$html .= 
    '<tr>
       <td>' . $itemtext . '</td>
     </tr>
     <tr>
       <td>Ihre Antwort:</td>
     </tr>
     <tr>
       <td style="color: ' . $antwortFarbe . ';">' . $antwort . '</td>
     </tr>';

$html .= '</table>';
html($html);

// Überprüfen, ob die Antwort korrekt ist
if (strtolower($antwort) == 'pflaume') {
    text('FB_cor'); // Antwort korrekt
} else {
    text('FB_incor'); // Antwort falsch
    'Die richtige Antwort: ' . $richtig; // richtige Antwort korrekt ausgegeben
    text('T104');  // Elaboriertes Feedback
}

1 Answer

0 votes
ago by SoSci Survey (342k points)

Leerzeichen am Anfang und Ende werden Sie mit trim() los, die Groß-Kleinschreibung können Sie mit strtolower() nivellieren - allerdings kann das keine Umlaute, aber die sollten die Nutzer:innen hoffentlich nicht groß schreiben. Falls doch, müsste man noch eine Umschreibung von Umlauten vornehmen (ö -> oe etc.).

Okay, also, wenn wir die beiden Dinge haben, dann

if (strtolower(trim($a)) == strtolower(trim($b))) { ... }

So, woher kommen die beiden Dinge? Ich würde da ein Array mit richtigen verwenden, wenn wir im Bereich 5-20 sind. Bei deutlich mehr Wörtern würde ich eher die Datenbank für Inhalte nutzen. Wenn man also nun das Array hätte, sähe es so aus:

$richtig = [
  1 => 'Apfel',
  2 => 'Birne', 
  3 => 'Clementine',
  4 => 'Dattel'
];

Wenn Ihre Abfrage nun in TX01_01 bis TX01_04 steht, könnte das mit loopToPage() wie folgt aussehen.

// Erste Seite
$i = loopToPage('second', 4);
question('TX01', [$i + 1]);

// Zweite Seite
$richtige = [
  1 => 'Apfel',
  2 => 'Birne', 
  3 => 'Clementine',
  4 => 'Dattel'
];
$i = loopIndex();
$antwort = value(id('TX01', $i + 1));
$richtig = $richtige[$i + 1];
u.s.w.
ago by u085794 (200 points)
Ah, super, das werde ich morgen mal ausprobieren. Bleibt nur noch das Problem mit {'Die richtige Antwort: ' . $richtig;} -> warum wird hier nichts ausgegeben? Wie müsste ich das im Code implementieren? Danke im Voraus.
ago by SoSci Survey (342k points)
Ich würde darauf tippen, dass $richtig = value('T101') in Ihrem Code einfach nicht die richtige Antwort geliefert hat. Deshalb mein Gegenvorschlag mit dem Array. Was ist T101 denn?
ago by u085794 (200 points)
T101 ist ein Textfeld, das ich bei der Frage angelegt habe. Vorher stand da $richtig = text('T101'), was ebenso wenig funktioniert hat. Ebenso habe ich schon mit Textbausteinen rumexperimentiert. Alle drei Sachen, die ich probiert habe, das heißt $richtig = value('Kennung'), $richtig = 'Kennung' oder $richtig = Text('Kennung'). Seit $richtig = 'Pflaume'; auch nicht funktioniert hat (Minimalbeispiel), weiß ich nicht, welche Tomaten ich auf den Augen habe... :)
ago by SoSci Survey (342k points)
> T101 ist ein Textfeld, das ich bei der Frage angelegt habe.

Woher würde das die richtige Antwort bekommen?

>  Seit $richtig = 'Pflaume'; auch nicht funktioniert hat (Minimalbeispiel), weiß ich nicht, welche Tomaten ich auf den Augen habe... :)

Platzieren Sie direkt darunter ein debug($richtig) und ein html('<p>Richtig: '.$richtig.'</p>');

Wenn das funktioniert, können wir uns weiter vorarbeiten :) Der PHP-Code, den ich vorgeschlagen habe kommt ja im Prinzip nur oberhalb Ihres PHP-Codes, und Sie lassen dann nur die beiden folgenden Zeilen weg:

$antwort = value('T102_01', 'text');
$richtig = value('T101'); // Wert von T101 wird zugewiesen

Oh ja, und Ihrem Code fehlte einfach nur die Info, was mit dem zusammengesetzten String passieren soll, also der html()-Befehl, damit es zur Ausgabe wird:

} else {
    text('FB_incor'); // Antwort falsch
    html('Die richtige Antwort: ' . $richtig); // richtige Antwort korrekt ausgegeben
    text('T104');  // Elaboriertes Feedback
}

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

...