0 votes
in SoSci Survey (dt.) by s109880 (200 points)
edited by SoSci Survey

Hallo Zusammen,
ich werde demnächst eine Tagebuchstudie durchführen und möchte am Ende dieser Studie (nach 14 Tagen) den Probanden ein Zertifikat senden, womit sie sich dann die Versuchspersonen Stunden gut schreiben können. Man könnte das natürlich einfach in den letzten gesendeten Fragebogen einarbeiten, jedoch muss ich gewerleisten, dass alle 14 Fragebögen vorher beantwortet wurden und man nicht einfach bis zum letzten gewartet hat.
Hätte jemand eine Idee, wie man das lösen könnte?

Vielen Dank

PS: der Code für die Serienmails:

if (value('A102') == 1) {
  $id = value('A101');
  for ($i=1; $i<=14; i++) {
    $mail = $i + 1;
    mailSchedule($id, $mail, strtotime('+'.$i.' day'));
  }

(value('A102') kommt von der Gruppenzuweisung)

1 Answer

0 votes
by SoSci Survey (327k points)

Sie benötigen eine Lösung, welche überprüft, ob ein Teilnehmer alle 14 Fragebögen ausgefüllt hat?

Sie können es einmal mit statistic() vesuchen. Dafür müssten Sie die Teilnehmer-Kennung (caseSerial()) in einer internen Variable speichern und würden dann im letzten Fragebogen abzählen, wie viele Fragebögen mit diesem Code vorliegen.

Sollte das nicht funktionieren, könnten Sie auch in der Datenbank für Inhalte einen Eintrag unter der Personenkennung anlegen und in jedem Fragebogen ein anderes Feld setzen. Also z.B. im ersten:

$key = caseSerial();
if (!$key) {
  // Für Ihre Test ohne Serienmail
  $key = 'TEST0000';
}
if ($key) {
  $previous = dbGet($key);
}
if (!$previous) {
  $previous = array();
}
// Jetzt festlegen, dass der erste Fragebogen ausgefüllt wurde
$previous[0] = 1;
// Im nächsten stünde dann
$previous[1] = 1;
// Und die Änderung speichern
dbSet($key, $previous);

Im letzten Fragebogen zählen Sie dann einfach mit array_sum() ab.

by s109880 (200 points)
Okay, schon mal vielen dank für die Infos.
Ich brauch eine Lösung, die überprüft ob 14 Fragebögen (1xBegrüßung, 12xFragebogen, 1xVerabschiedung) beantwortet wurden. Ich würde dann im "Verabschiedungsfragebogen", wenn alles ausgefüllt wurde, eine Mitteilung anzeige, die sie dann ausdrucken müssen (Mit Namen etc.)

Wie speicher ich denn diese (caseSerial()) in einer internen Variable? Wie ich aus dem Handbuch entnehme, muss ich ja etwas mit 'count' einsetzten um dann diese Nummer zu zählen.
Und würde das ganz dann die Nummer auch nur aufschreiben, wenn der Fragebogen fertig ausgefüllt wurde?


Beim zweiten sehe ich noch nicht wirklich durch. Wie genau arbeite ich mit dieser "Datenbank der inhalte" und welche Variante wäre am besten?

Ich habe auch keine 14 Fragebögen, sondern nur 3. Der eine wird jedoch 12x abgeschickt, ist das ein Problem?
by SoSci Survey (327k points)
> Wie speicher ich denn diese (caseSerial()) in einer internen Variable?

Sie legen eine interne Variable an (https://www.soscisurvey.de/help/doku.php/de:create:questions:internal) und verwenden dann den PHP-Code put('IV01_01', caseSerial());

> Wie ich aus dem Handbuch entnehme, muss ich ja etwas mit 'count' einsetzten um dann diese Nummer zu zählen.

Ja.

> Und würde das ganz dann die Nummer auch nur aufschreiben, wenn der Fragebogen fertig ausgefüllt wurde?

Standardmäßig zähle statistic() nur Fragebögen mit FINISHED=YES. Wenn Sie auch andere Fragebögen zählen möchten, müssten Sie das put() an geeigneter Stelle (z.B. gegen Ende) im Fragebogen setzen.

> Beim zweiten sehe ich noch nicht wirklich durch.

Beides Varianten haben ihre Vor- und Nachteile. Die mit statistic() ist wohl erstmal einfacher.

> Wie genau arbeite ich mit dieser "Datenbank der inhalte" und welche Variante wäre am besten?

Deshalb habe ich Ihnen für die zweite Variante ja schon eine Menge Code geschrieben.

> Ich habe auch keine 14 Fragebögen, sondern nur 3. Der eine wird jedoch 12x abgeschickt, ist das ein Problem?

Bei der Variante mit der Datenbank für Inhalte insofern, als Sie beim Ausfüllen des Fragebogens wissen müssten (bzw. herausfinden), welche der 12 Wiederholungen Sie gerade machen.
by s109880 (200 points)
Okay, dann werde ich die erste Variante ausprobieren. Ich brächte dann somit auf der letzten Seite von jedem Fragebogen das:

put($anzahlBeantwortet, caseSerial());

Und im letzten Fragebogen brauche ich dann das:

statistic('count', $anzahlBeantwortet);
und dann noch einen "If"-Code mit >==14

korrekt?
by SoSci Survey (327k points)
Nein, bei put() muss als erster Parameter die Kennung der internen Variable angegeben sein. Und bei statistic() als zweiter Parameter auch. Wenn Ihre interne Variable also IV01_01 ist, dann tragen Sie statt $anzahlBeantwortet jeweils 'IV01_01' ein.

Ich empfehle einmal die Lektüre der Anleitung zu internen Variablen (hatte ich oben bereits verlinkt), dann wird das etwas klarer.
by s109880 (200 points)
edited by s109880
Okay, also wenn ich das richtig verstanden habe, ist das dann bei mir die Variable "A105_01". Diese muss ich ja nicht weiter bearbeiten, sondern codiere sie ja im PHP-Code, richtig?
Somit hätte ich dann  put('A105_01', caseSerial()); nach den 3 Fragebögen und dann dann statistic('count', 'A105_01'); im letzten Fragebogen.
korrekt?

Danach müsste dann kommen
if (value('statistic') == 13) {
    text('text1');
} else {
   text('text2');
}

Korrekt?
by SoSci Survey (327k points)
> if (value('statistic') == 13) {

Naja, fast. Versuchen Sie es einmal hiermit:

if (statistic('count', 'A105_01') == 13) {

Lassen Sie sich zum Testen auch ausgeben, was die statistic()-Funktion berechnet:

debug(statistic('count', 'A105_01'));

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

...