0 votes
in SoSci Survey (dt.) by s139417 (130 points)

Hallo,

ich habe eine Zuordnungsaufgabe erstellt, in der den Teilnehmer eine Auswahl von Wörtern vorgelegt wird, die zum Teil tatsächlich existieren, zum Teil aber frei erfunden sind. Die Teilnehmer müssen nun mit einer Ja-Nein-Option bewerten welche Wörter existieren und welche nicht existieren.

Ist es möglich intern abzuspeichern welche der Wörter richtig sind und welche falsch, um so die Datenauswertung zu vereinfachen?

Vielen Dank im Voraus.

1 Answer

0 votes
by SoSci Survey (328k points)

Ja, im Prinzip müssen Sie nur mittels PHP-Code eine Liste anlegen und auf der nächsten Seite die Antworten gegne die Liste vergleichen. Das Ergebnis speichern Sie für jedes Item in einer internen Variable.

Hier eine Anregung, in welche Richtung der PHP-Code gehen kann:
Punkte für Antworten zählen

by s139417 (130 points)
edited by s139417
Ich habe nun eine if clause erstellt.

$punkt=0;

if (value('DH18_01') == 1) {$punkt=$punkt+1;}
if (value('DH18_02') == 1) {$punkt=$punkt+1;}
if (value('DH18_03') == 1) {$punkt=$punkt+1;}
if (value('DH18_04') == 1) {$punkt=$punkt+1;}
if (value('DH18_05') == 2) {$punkt=$punkt+1;}
if (value('DH18_06') == 2) {$punkt=$punkt+1;}
if (value('DH18_07') == 2) {$punkt=$punkt+1;}

 else {$punkt=$punkt+0;
}
$punkt = valueSum('DH18');


Leider ist das Problem, dass das Program für Ja den Wert 1 hat und für Nein den Wert 2, dies müsste ich für jeden einzelnen Item ändern.
==1, funktioniert also nicht.

Wie kann ich nun vorgehen?
by SoSci Survey (328k points)
Vorsicht: Diese Zeile ...

$punkt = valueSum('DH18');

... überschreibt alles, was Sie vorher gezählt haben.

> Leider ist das Problem, dass das Program für Ja den Wert 1 hat und für Nein den Wert 2, dies müsste ich für jeden einzelnen Item ändern.

Richtig. Oder Sie legen eine Liste (Array) an, welches jeweils die richtige Antwort ist. Dann müssen Sie nicht 7 IF-Filter schreiben, sondern nur die Liste und eine Schleife, die diese Liste abarbeitet.
by s139417 (130 points)
Oh danke, ich dachte diese Zeile ...
$punkt = valueSum('DH18');
zählt mir dann alle Punkte zusammen.

Ich habe es bereits auch mit einer Lister (array) versucht, aber da passiert nichts. Mir werden weder extra Werte angezeigt noch die alten ersetzt.

$points = 0;
$items = array(
'DH18_01' => array(1 => 1, 2 => 0),  // In Item DH18_01 hat die Antwort 1 den Wert 1, 2 hat den Wert 0
'DH18_02' => array(1 => 1, 2 => 0),  
'DH18_03' => array(1 => 1, 2 => 0),
'DH18_04' => array(1 => 0, 2 => 1),
'DH18_05' => array(1 => 1, 2 => 0),
);

Was mach ich falsch?
by SoSci Survey (328k points)
Nun - unter der Liste fehlt noch die FOR-Schleife, die die Liste abarbeitet und Punkte zählt.
by s139417 (130 points)
edited by s139417
$points=0;
$item = array(
'DH18_01' => array(1 => 1, 2 => 0),  // Im Item 'DH18_01' hat die Antwort 1 den Wert 1, 2 hat den Wert 0
'DH18_02' => array(1 => 1, 2 => 0),  
'DH18_03' => array(1 => 1, 2 => 0),
'DH18_04' => array(1 => 0, 2 => 1),
'DH18_05' => array(1 => 1, 2 => 0)
);


foreach ($item as $variable => $values) {
  $answer = value($variable);
 if (isset($values[$answer])) {

    $points += $values[$answer];
  }

  }

Auch mit der for-Schleife, ändert sich nichts, der Wert für Ja ist immernoch  1 und für Nein ist der Wert 2.

Verstehe nicht was ich noch machen soll.
by s139417 (130 points)
edited by s139417
oder auch für die for-schleife


for ($i=0; i>5; i++){

}

wenn ich echo eingebe, kommt "Warnung: Das PHP Konstrukt echo darf im PHP-Code nicht verwendet werden."
Ist die for-schleife falsch? Wie lautet Sie denn richtig? :(

oder können Sie mir sagen, warum mein if-clause nicht funzioniert?
by SoSci Survey (328k points)
Nehmen Sie doch einfach den Code ganz oben von der Seite
https://www.soscisurvey.de/help/doku.php/de:create:points

// Definition der Fragen und der korrekten Antworten
$fragen = array(
  'DH18_01' => 1,
  'DH18_02' => 1,
  'DH18_03' => 1,
  'DH18_04' => 2,
  'DH18_05' => 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 anzeigen ...
html('<p>Sie haben '.$points.' Punkte erzielt.</p>');
// ... oder in einer internen Variable speichern
put('IV01_01', $points);
by s139417 (130 points)
Danke, das habe ich bereits versucht, es funzioniert aber nicht. Er unterscheidet nicht zwischen richtig und falsch. Er sagt mir lediglich welche Option gewählt wurde.
Zudem, zeigt er mir für jede internen Variabel den Wert 3 an  obwohl unerschiedliche Optionen angeklickt wurden, warum?

value("DH18_01") = 1
value("DH18_02") = 2
value("DH18_03") = 1
value("DH18_04") = 2
value("DH18_05") = 2
Die interne Variable DH21_01 wird mit dem Wert 3 belegt.
Die interne Variable DH21_02 wird mit dem Wert 3 belegt.
Die interne Variable DH21_03 wird mit dem Wert 3 belegt.
Die interne Variable DH21_04 wird mit dem Wert 3 belegt.
by SoSci Survey (328k points)
In dem PHP-Code oben kommt die Variable DH21_01... nicht vor. Ohne Kenntnis des Codes, den Sie verwendet haben, kann ich keine Antwort liefern.

Aber fügen Sie doch unter der FOREACH-Schleife einfach mal folgendes ein, um den Inhalt der Variblen $points zu sehen:

debug($points);

Posten Sie auch den Inhalt der Debug-Information (https://www.soscisurvey.de/help/doku.php/de:create:debugging), denn diese verrät, was value() jeweils liefert.
by s139417 (130 points)
edited by s139417
Ich habe gedacht ich muss eine interne Variabel erstellen, die mir den Wert der jeweiligen aufgaben zeigt, aber das war wohl falsch.

Mein php-code lautet:

// Definition der Fragen und der korrekten Antworten
$fragen = array(
  'DH18_01' => 1,
  'DH18_02' => 1,
  'DH18_03' => 1,
  'DH18_04' => 2,
  'DH18_05' => 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
  }
}
 
debug($points);


[Information     value("DH18_01") = 1
[Information]    value("DH18_02") = 1
[Information]    value("DH18_03") = 1
[Information]    value("DH18_04") = 1
[Information]    value("DH18_05") = 1
debug()    Inhalt: $points = 4 (integer)

also das value zeigt mir, wie immer nur die gewählte Option.

Verstehe ich das richtig, der ...
debug($points);
geht jede Antwort desTeilnehmers durch und rechtnet die richtigen Antworten (mit jeweils 1 Punkt) zusammen? Aber ist er dann für jeden Teilnehmer zu sehen?

Kann das sein, dass mir lediglich, dieser kleine Teil gefehlt hat bzw. dass och falsch nachgeschaut habe? Ich dachte die debug-information zeigt mir die Datenauswertung wie sie mir später dann angezeigt wird.
by SoSci Survey (328k points)
Ja, das value() ermittelt jeweils die gewählte Antwort (s. https://www.soscisurvey.de/help/doku.php/de:create:functions:value), die Sie dann in der FOR-Schleife mit Ihrem Array korrekter Antworten vergleichen.

In der Variable $points zählen Sie. Und mit einem put() könnten Sie diese Summe korrekter Antworten dann in eine interne Variable speichern:

put('DH21_01', $points);

Wenn Sie den Wert anzeigen möchten, verwenden Sie replace() und einen dazugehörigen Platzhalter.
by s139417 (130 points)
edited by s139417
Suuuuuper, vieeeeelen herzlichen Dank.

Ich möchte den Wert nicht anzeigen lassen, ich möchte nur, dass er später bei der Datenauswertung erscheint.

Ist debug($points); für jeden Teilnehmer sichtbar? Wenn ich debug($points); weglasse, wo kann ich dann die Punkte sehen und verifizieren, dass sie stimmen bzw. das es funktioniert? Ist die Anlegung einer internen variabel notwendig?
by SoSci Survey (328k points)
Nein, das debug() erzeugt nur im Debug-Modus eine Ausgabe. Es speichert aber auch nichts im Datensatz - dafür ist das put() verantwortlich.

> Ist die Anlegung einer internen variabel notwendig?

Ja, sonst funktioniert put() nicht ;)
https://www.soscisurvey.de/help/doku.php/de:create:functions:put
by s139417 (130 points)
edited by s139417
In ordnung, danke.

Ich habe es mit dieser put-funktion versucht und habe eine interne Variabel mit einer neuen Frage erstellt.

debug($points);
$index = debug($points);
put('DH20_01',$index);

Es erscheint nun das:
debug()    Inhalt: $points = 26 (integer)
debug()    Inhalt: $points = 26 (integer)
[Information]    Die interne Variable DH20_01 wird mit dem Wert belegt.

Ist jetzt der Wert von 26 (in diesem Fall) im Datensatz gespeichert? Das heißt wird mir bei der Datenauswertung dann auch angezeigt?
by SoSci Survey (328k points)
Das debug() zeigt nur etwas an, es ist nicht dafür gedacht, einen Wert zurückzugeben. Deshalb hat die Variable $index auch keinen Wert.

Machen Sie es bitte wie in meinem Beispiel oben und übergeben Sie $points direkt an put()

put('DH20_01',$points);

Ob Sie das debug() dann noch im Code lassen oder nicht, ist Geschmackssache.
by s139417 (130 points)
edited by s139417
In Ordnung.
Vieeeeelen herzlichen Dank

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

...