0 votes
in SoSci Survey (dt.) by s068944 (400 points)
edited by s068944

Hallo,

wenn ich es richtig verstehe, genügt dann folgender Befehl ohne panelData(), um die Gültigkeit des Fragebogens auf 30 Sekunden ab dem Zeitpunkt, der in Variable ZS01_01 hinterlegt ist, zu beschränken, richtig?:

$limit = strtotime('+30 seconds', value('ZS01_01'));
  if (time() > $limit) {
    text('AB01');
    buttonHide();
    pageStop();
}

Mir wird dann aber folgender Fehler angezeigt: A non well formed numeric value encountered
Zeile: 1

Hat das mit dem Datumsformat zu tun, in dem ich ZS01_01 ausgeben lasse?:

put('ZS01_01', date('w, d.m.Y H:i:s'));

Oder wo könnten sonst der Fehler liegen?

Nochmal zum Hintergrund: Ich möchte, dass mein Fragebogen in diesem Testfall 30 Sekunden (in der Realität sind es 30 Minuten) lang bearbeitbar ist ab einem bestimmten Zeitpunkt, zu dem der Teilnehmer den Fragebogen bearbeitet. Danach soll der Fragebogen nicht mehr zu bearbeiten sein (da es sonst Überschneidungen mit der zweiten Befragungswelle gibt).

Das (siehe Bild) passiert, wenn:
$limit = value('ZS02_01') + 5;
debug('ZS02_01');
debug($limit);
debug(time());
if (time() > $limit) {

text('AB01');
buttonHide();
pageStop();

}

1 Answer

0 votes
by SoSci Survey (327k points)
edited by SoSci Survey

A non well formed numeric value encountered Zeile: 1

Meine Vermutung wäre, dass in der Variable ZS01_01 kein Zeitstempel gespeichert ist. Was steht denn in dieser Variablen?

Wenn es Ihnen wirklich um den Aufruf des Fragebogens geht (und nicht z.B. um das Erreichen von Seite 3), dann können Sie auch 'STARTED' verwenden:

$limit = strtotime('+30 seconds', value('STARTED'));

Wenn Sie am Anfang des Interviews den Zeitstempel in ZS01_01 ablegen ...

put('ZS01_01', time());

... dann können Sie es auch noch einfacher haben:

$limit = value('ZS01_01') + 30;

Sekunden rechnen sich in Unix-Zeitstempeln recht einfach :)

Ebenfalls möglich:

if (caseTime('begin') > 30) { ...
by s068944 (400 points)
Okay, ich habe für meinen Zeitstempel jetzt folgenden Code:

put('ZS02_01', time());

Und für die Limitation der Bearbeitungszeit von 5 Sekunden nach Zeitstmepl folgenden Code:

$limit = value('ZS02_01') + 5;
  if (time() > $limit) {
    text('AB01');
    buttonHide();
    pageStop();
}

Immerhin wird jetzt keine Fehlermeldung angezeigt, aber funktionieren tut es trotzdem nicht :-( Ich kann den Fragebogen auch nach 5 Sekunden immer noch bearbeiten. Oder ist die Zeitangabe vielleicht in Minuten? Wo könnte sonst der Fehler liegen? Ich bin wirklich ratlos.
by SoSci Survey (327k points)
Schreiben Sie über Ihren Filter doch testweise einmal folgende Zeilen, testen Sie im Debug-Modus und berichten Sie, was da so angezeigt wird. Danke.

$limit = value('ZS02_01') + 5;
debug('ZS02_01');
debug($limit);
debug(time());
if (time() > $limit) {
    text('AB01');
    buttonHide();
    pageStop();
}
by s068944 (400 points)
Habe ich gemacht und oben einen Screenshot in meine Frage eingefügt. Was sagt mir das?
by SoSci Survey (327k points)
Also mir sagt es, dass das Limit einen größeren Wert hat als die aktuelle Zeit - also noch in der Zukunft liegt.

Was ich daraus schlussfolgere ist, dass Sie den put()-Befehl entweder direkt auf der gleichen Seite (und nicht zu Beginn des Fragebogens) verwendet haben oder dass Sie weniger als eine Sekunde auf der vorigen Seite mit dem put() waren.

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

...