0 votes
in SoSci Survey (dt.) by s135698 (110 points)

Hallo,

ich möchte nach einigen wenigen Fragen und vor dem getrennten Erheben der Email-Adresse für eine Verlosung solche Personen ans Ende des Fragebogens umleiten, die den Fragebogen unmöglich schnell beantworten.

Beispiel 2 unter https://www.soscisurvey.de/help/doku.php/de:create:functions:casetime folgend geht der Adressabfrage auf derselben Seite dieses PHP-Code-Element voraus:

if (caseTime('hitherto') < 60) {
  $index = 2;
  put('ED07_01', $index);
  text('ED06');
  pageStop();
  buttonToPage('end');
} else {
  $index = 1;
  put('ED07_01', $index);
}

Wenn die verbrachte Zeit auf den bisherigen Seiten in Sekunden kleiner ist als 60, soll Text 'ED06' ("Sie waren zu schnell") angezeigt werden. Der Rest der Seite (die Abfrage der Emailadresse) soll nicht mehr angezeigt werden und der Weiter-Knopf soll ans Ende des Fragebogens führen. Ansonsten soll dies nicht passieren und die Seite normal angezeigt werden. Damit aus den Daten ersichtlich ist, in welchem Datensatz was der Fall war, speichere ich "1" oder "2" in die interne Variable 'ED07_01'.

Das Problem ist, dass der if-Block immer ausgeführt wird, auch wenn die Zeit auf den Seiten davor insgesamt deutlich über 60 Sekunden liegt. Ersetze ich in caseTime() das 'hitherto' mit 'begin' wird der if-Block nie ausgeführt, egal ob deutlich unter oder über einer Minute auf den Seiten davor verbracht wird.

Zudem bin ich mir relativ sicher, dass der oben beschriebene PHP-Code vor ein paar Tagen noch wie erwartet funktioniert hat. Leider fällt mir das Debugging schwer, da ich nicht weiß, wie ich ohne Funktionen wie strval() überprüfen kann, was caseTime() ausgibt. Das Problem tritt in der Pretest-Funktion und in der Fragebogenvorschau auf.

Übersehe ich etwas offensichtliches? Würden weitere Informationen bei der Problemsuche helfen? Am unsichersten bin ich mir bezüglich der internen Variable, aber ich las, dass diese immer 7-stellig benannt sein muss. Mich wundert, dass ich sie nur als Zeichenkette definieren kann, wobei ein Integer praktischer wäre.

Vielen Dank und beste Grüße

1 Answer

0 votes
by SoSci Survey (323k points)

Das Problem ist, dass der if-Block immer ausgeführt wird, auch wenn die Zeit auf den Seiten davor insgesamt deutlich über 60 Sekunden liegt.

Was zeigen denn folgende beiden Zeile an?

debug(caseTime('hitherto'));
debug(caseTime('begin'));

Sind auf der Seite noch weitere Inhalte?

Das buttonToPage('end'); wird übrigens ignoriert, weil darüber ein pageStop() steht.

by s135698 (110 points)
edited by s135698
Die beiden Zeilen zeigen bei schnellem Durchklicken deutlich unter einer Minute:
Debug information for caseTime('hitherto'):
caseTime('hitherto') = -4 (integer)

Debug information for caseTime('begin'):
caseTime('begin') = 1586948086 (integer)

und bei langsamen Durchklicken über einer Minute:
Debug information for caseTime('hitherto'):
caseTime('hitherto') = -4 (integer)
Notice (page 5)
Debug information for caseTime('begin'):
caseTime('begin') = 1586948248 (integer)

Edit: der Code, der diese Meldungen produzierte ist:
debug(caseTime('hitherto'));
debug(caseTime('begin'));
if (caseTime('hitherto') < 60) {
  $index = 2;
  put('ED07_01', $index);
  text('ED06');
  pageStop();
} else {
  $index = 1;
  put('ED07_01', $index);
}

Die Zahlen passen zumindest zum gezeigten Verhalten.

Der PHP-Code ist auf Seite 5, danach kommt nur noch die end-Seite. Auf Seite 5 sind nach dem PHP-Code noch ein Element "Getrennte Erhebung von Kontaktdaten", gefolgt von zwei Text-Elementen.

Danke für den Hinweis mit pageStop(), ich dachte, der Weiter-Knopf wird dadurch auch nicht angezeigt und ich muss per Hand einen hinzufügen bzw. dass pageStop() sich nur auf Elemente bezieht, die nach dem PHP-Code stehen.
by SoSci Survey (323k points)
> caseTime('hitherto') = -4 (integer)
> caseTime('begin') = 1586948086 (integer)

Das scheinen mir beides vollkommen fehlerhafte Werte zu sein. Nur zur Sicherheit: Sie haben in den Datenschutz-Einstellungen Ihres Befragungsprojekts die AUfzeichnung von Zeitstempeln nicht zufällig deaktiviert, oder?
by s135698 (110 points)
"Zeit und Verweildauer während der Befragung aufzeichnen" in den Datenschutzeinstellungen ist tatsächlich deaktiviert. Wenn es aktiviert ist, funktioniert der PHP-Code und auch beide debug()-Funktionen geben denselben Wert aus, der auch mit der gestoppten Zeit übereinstimmt.

Ich dachte, dass die Option sich darauf bezieht, die Bearbeitungszeit und den Bearbeitungsbeginn als Datum/Uhrzeit in den Daten zu speichern. Ich hatte sie aus Gründen der Datensparsamkeit (es steht ja unter den Datenschutzeinstellungen) ausgeschaltet und gar nicht mit caseTime() in Verbindung gebracht.

Vielen Dank für die schnelle und effiziente Hilfe!
by SoSci Survey (323k points)
> Ich dachte, dass die Option sich darauf bezieht, die Bearbeitungszeit und den Bearbeitungsbeginn als Datum/Uhrzeit in den Daten zu speichern.

Das auch ... aber darüber hinaus werden die Zeitstempel komplett deaktiviert. Denn auch aus den relativen Zeiten könnte man ahand von Logfiles sonst doch wieder auf die Person schließen.

Jedenfalls it es nicht möglich, die Bearbeitungszeit zu ermitteln, wenn nicht irgendwo der Start-Zeitpunkt notiert wurde. Ich notiere aber mal, dass die Funktion zumindest eine passende Fehlermeldung zeigen sollte.

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

...