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

I would like to program an experiment where the individual exercises are displayed in random order on one page each. At the same time, there should be only 2 minutes for all exercises together, with a countdown displayed.

I have set the order of the pages with the random function:

if (!isset($seiten2)) {
  $seiten2 = array('MS0','MS2','MS3','MS4', 'MS5', 'MS6', 'MS7', 'MS8', 'MS9', 'MS10', 'MS11', 'MS12', 'MS13','MS14');
  shuffle($seiten2);
  $seiten2[ ] = 'partNext';
  registerVariable($seiten2);
}
setPageOrder($seiten2); 

I have also defined the end of the exercises after the time has elapsed (on each side) as follows:

// Filter: Zeit abgelaufen?
if (time() > $timeout) {
  goToPage('partNext');
}

Now the problem is that after the time has expired, if you have not processed all the tasks nevertheless the remaining elements of the array are displayed in fast forward.

Can you help me to solve the problem ?

2 Answers

0 votes
by SoSci Survey (330k points)

the remaining elements of the array are displayed in fast forward.

One possible explanation is that you did not put the second PHP code on every questionnaire page.

Another possible explanation would be that you modified the second PHP code and changes 'partNext' against another page ID on every page. 'partNext' is fine in every repetition of that code snippet.

I assume that you made sure to use registerVariable() on $timeout on an earlier page and the above PHP code is only a part of the code you're using.

by s162344 (200 points)
Thanks for the answer.

But I did put the second PHP code on every questionnaire page and moreover I didn't modify the second PHP code but always used 'partNext'.

So what else could be the problem?

Do I perhaps need to use another function to randomize the order? Or combine the two code snippets?
by SoSci Survey (330k points)
Please check and post the debug information that the questionnaire displays.

You may also want to post the compelte (!) PHP codein the question as a new answer (please user the {} button to format the code as code), so I can get a better view on the situation.
by s162344 (200 points)
One the page before the excercises

// Ablauf der Zeit als Variable $timeout speichern
if (!isset($timeout)) {
  $timeout = strtotime('+90 seconds');
  registerVariable($timeout);
}

if (!isset($seiten2)) {
  $seiten2 = array('MS0','MS2','MS3','MS4', 'MS5', 'MS6', 'MS7', 'MS8', 'MS9', 'MS10', 'MS11', 'MS12', 'MS13','MS14');
  shuffle($seiten2);
  $seiten2[] = 'partNext';
  registerVariable($seiten2);
}
setPageOrder($seiten2);

On each page with an excercise:

// Filter: Zeit abgelaufen?
if (time() > $timeout) {
  goToPage('partNext');
}
// JavaScript zur Anzeige der verbleibenden Zeit
$timeLeft = $timeout - time();

show('M003', array(
  '%timeLeft%' => $timeLeft
));

On the Page 'partNext':

// Definition der Fragen und der korrekten Antworten
// Es werden nur jene Items definiert, die auch überprüft werden sollen
$fragen = array(
    'M225' => array("01" => 1, "02" => 1, "03" => 2, "04" => 2, "05" => 1, "06" => 1),
    'M202' => array("01" => 1, "02" => 2, "03" => 1, "04" => 1, "05" => 2, "06" => 1),
    'M203' => array("01" => 1, "02" => 1, "03" => 1, "04" => 1, "05" => 2, "06" => 2),
    'M204' => array("01" => 1, "02" => 1, "03" => 1, "04" => 2, "05" => 1, "06" => 2),
    'M205' => array("01" => 2, "02" => 1, "03" => 1, "04" => 1, "05" => 2, "06" => 1),
    'M201' => array("01" => 1, "02" => 2, "03" => 1, "04" => 1, "05" => 2, "06" => 1),
    'M221' => array("01" => 1, "02" => 2, "03" => 1, "04" => 1, "05" => 1, "06" => 2),
    'M222' => array("01" => 2, "02" => 1, "03" => 1, "04" => 1, "05" => 1, "06" => 2),
    'M223' => array("01" => 1, "02" => 2, "03" => 2, "04" => 1, "05" => 1, "06" => 1),
    'M226' => array("01" => 1, "02" => 1, "03" => 1, "04" => 2, "05" => 1, "06" => 2),
    'M227' => array("01" => 1, "02" => 2, "03" => 2, "04" => 1, "05" => 1, "06" => 1),
    'M228' => array("01" => 1, "02" => 2, "03" => 1, "04" => 2, "05" => 1, "06" => 1),
    'M229' => array("01" => 1, "02" => 2, "03" => 1, "04" => 1, "05" => 1, "06" => 2),
    'M230' => array("01" => 2, "02" => 1, "03" => 1, "04" => 1, "05" => 1, "06" => 2),
);
 
// Punktezähler initialisieren
$points = 0;
 
// Alle Fragen durchlaufen
foreach ($fragen as $frageKenn => $antworten) {
  // Für diese Frage den Fehlerzähler auf 0 setzen
  $fehler = 0;
  foreach ($antworten as $itemKenn => $vorgabe) {
    // Kennung des Items zusammenbauen
    $kennung = $frageKenn.'_'.$itemKenn;
    // Antwort des Teilnehmers abfragen
    $antwort = value($kennung);
    // Antwort auf Richtigkeit (eigentlich: Falschheit) prüfen
    if ($antwort != $vorgabe) {
      // Bei Abweichung einen Fehler zählen
      $fehler++;
    }
  }
  // Prüfen, ob die Frage fehlerfrei beantwortet wurde
  if ($fehler == 0) {
    // Einen Punkt vergeben
    $points++;
  }
}
 
// Das Ergebnis anzeigen oder anderweitig verarbeiten
put('Ergebnis_M1', $points);
html('<font size="5"><p>Richtig gelöste Aufgaben: <b>'.$points.' von 14</b></p></font>');
by SoSci Survey (330k points)
That look correct on the first glance...

Would you like to post a debug-pretest-link (a preview link that will display debug information), so I could view the issue "live"?

Just to be sure: You have put the goToPage() on a PHP code element in the page, not into a PHP function in the "PHP Functions" tab of the questionnaire, correct?
by SoSci Survey (330k points)
The debug information looks like it has never seen the goToPage() ...

Would you like me to create an administrator login and take a look into the questionnaire personally?
by s162344 (200 points)
Yes this was also my impression.

Yes I would like to create an administrator login. How can I do this?
by SoSci Survey (330k points)
I can create the administrator login, if you tell me which of the two projects in your account we're talking about?

Also ... why do you write in English? It seems you're using the German user interface of SoSci Survey. And I'm sitting in Munich ;)
by s162344 (200 points)
Bezeichnung des Projekts ist: Selbstmanagement im Home-Office -V_2020/21
Es geht um den Fragebogen qnr3 Voruntersuchung_T2, hier ab S.24.

Vielen Dank!
0 votes
by SoSci Survey (330k points)

Ich glaube, das ist das erste Mal, dass ich in einer Support-Anwort ein Smily brauche...

Smily

Also ... Computer sind schneller als Menschen und Ihre Internetverbindung ist Homeoffice-kompatibel.

Aber hier die komplette Story: Ich habe mir mit ein paar zusätzlichen Code-Zeilen mal die Zeitstempel anzeigen lassen:

debug(time());
debug($timeout);
if (time() > $timeout) {
  debug('GO TO PAGE');
  goToPage('partNext');
}

Was mir angezeigt wurde, erklärte das Prlbme erstaunlich logisch: Die beiden Zeitstempel waren gleich. Das ist ja auch zu erwarten, denn wenn die Zeit gleich sind, dann hat man ja keine Zeit mehr:

$timeLeft = $timeout - time();

Die Weiterleitung per JavaScript greift also. Aber nicht das Größer-als:

if (time() > $timeout)

SoSci Survey hat also eine ganze Sekunde Zeit, Ihnen Seiten anzuzeigen, bevor der goToPage()-Filter greift. Daher der schnelle Vorlauf, der aber (abhängig von der Server- und Internetgeschwindigkeit) auf einige Seiten begrenzt war. So viele eben, wie der Fragebogen in einer Sekunde anzeigen kann.

Die Lösung habe ich gleich bei Ihnen eingebaut, es ist ein Größer-Gleich-Zeichen:

// Filter: Zeit abgelaufen?
if (time() >= $timeout) {
  goToPage('partNext');
}

Ich korrigiere das gleich mal in der Anleitung.

by s162344 (200 points)
Ok, das ist wirklich verrückt, aber logisch.

Vielen Dank für Ihre Hilfe!!

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

...