0 votes
in SoSci Survey (dt.) by s269849 (125 points)
edited by s269849

Ich habe ein Design mit

  1. Auswahlabfolge mit Reaktionszeiten -->
  2. Kurztraining -->
  3. Auswahlabfolge mit Reaktionszeiten.

Ich habe einen Timeout eingestellt von 12s pro Seite, aber nur bei den RZ Fragen.
Der erste Block von Fragen läuft gut. Da wird ein array $Fragen01 erstellt, Fragen werden randomisiert, ein 5x5 Loop läuft durch, alle werden einzeln angezeigt mit RZ. Alles gut.

Bei der Schulung können die TN vorwärts und zurück. Keine RZ. Läuft prima.

Der zweite Block von $Fragen02 verläuft wie der erste, wird aber manchmal angezeigt, manchmal nicht. ich habe das Gefühl, dass nach einer (un)bestimmten Gesamtzeit, der Fragebogen einfach abbricht und dies entweder direkt nach der Schulung oder einfach mitten drin. Komisch ist, dass es dann zur Zustimmungsseite springt, nicht zur letzten Seite, sodass ich das Gefühl habe, da könne etwas im Array $Fragen02 schief sein, aber ich finde da nichts. Alle Variablen existieren und sind richtig geschrieben.

Inzwischen habe ich den Loop im zweiten Teil tatsächlich aufgelöst, i.d.H., dass dies das Problem sei, aber selbst wenn ich alle 25 Stimuli einfach vermische und nacheinander anzeigen lasse, bricht es ab, und wie gesagt, anscheinend dann wenn zu lange am Schulungsteil verbracht wird (und hier möchte ich dass die TN wirklich Zeit haben).

Übrigens, die unabhängigen Teile $Fragen01, $Fragen02 und Schulung laufen ohne Probleme wenn sie isoliert getestet werden, sodass ich glaube der $Fragen01 Teil evtl. Auswirkungen auf $Fragen02 hat (bzw. die Tatsache, dass es zwei Abfolge mir RZ Blöcke gibt).

Gerne Abhilfe. ich bin kurz davor das ganze aufzugeben. Danke

Hier der Teil der nur isoliert funktioniert

<!-- Seite 27 -->
<page ident="Practice0101" intID="244">
<info>Practice01</info>
<question id="PR01" intID="245" />
<php intID="246"><![CDATA[
if (!isset($timeFB01)) {
  $timeFB01 = time();
  registerVariable($timeFB01);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 210;  // Der Teilnehmer hat 210 Sekunden Zeit zur Bearbeitung
if (time() >= $timeFB01 + $timer) {
  goToPage('Falsch01');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $timeFB01 + $timer - time();
replace('%remain%', $remain);
]]></php>
<postprocessing intID="247">

</postprocessing>
<php intID="248">
replace('%remain%', 12);  // Der Teilnehmer hat 12 Sekunden für die Bearbeitung
</php>
<text id="XXcode" intID="249">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 28 -->
<page ident="Wtr01" intID="93">
<info>Wtr01</info>
<php intID="94"><![CDATA[
if (value('PR01_21') == 2) {
    goToPage('Richtig01'); // Antwort korrekt
} else {
    goToPage('Falsch01'); // Antwort falsch
}
]]></php>
</page>


<!-- Seite 29 -->
<page ident="Richtig01" intID="74">
<info>Richtig01</info>
<text id="Richtig01" intID="89">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 30 -->
<page ident="GotoPrac02" intID="259">
<info>GotoPractice02</info>
<php intID="260"><![CDATA[
{
  goToPage('Practice02');
}
]]></php>
</page>


<!-- Seite 31 -->
<page ident="Falsch01" intID="91">
<info>Falsch01</info>
<text id="Falsch01" intID="95">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 32 -->
<page ident="Practice02" intID="268">
<info>Practice02</info>
<php intID="270"><![CDATA[
if (!isset($timeFB02)) {
  $timeFB02 = time();
  registerVariable($timeFB02);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 210;  // Der Teilnehmer hat 210 Sekunden Zeit zur Bearbeitung
if (time() >= $timeFB02 + $timer) {
  goToPage('Falsch02');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $timeFB02 + $timer - time();
replace('%remain%', $remain);
]]></php>
<postprocessing intID="271">

</postprocessing>
<question id="RE02" intID="31" />
<php intID="272">
replace('%remain%', 12);  // Der Teilnehmer hat 12 Sekunden für die Bearbeitung
</php>
<text id="XXcode" intID="273">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 33 -->
<page ident="Wtr02" intID="96">
<info>Wtr02</info>
<php intID="97"><![CDATA[
if (value('RE02_23') == 1) {
    goToPage('Richtig02'); // Antwort korrekt
} else {
    goToPage('Falsch02'); // Antwort falsch
}
]]></php>
</page>


<!-- Seite 34 -->
<page ident="Richtig02" intID="278">
<info>Richtig02</info>
<text id="Richtig02" intID="20">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 35 -->
<page ident="GotoPrac03" intID="283">
<info>GotoPractice03</info>
<php intID="284"><![CDATA[
{
  goToPage('Practice03');
}
]]></php>
</page>


<!-- Seite 36 -->
<page ident="Falsch02" intID="285">
<info>Falsch02</info>
<text id="Falsch02" intID="21">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 37 -->
<page ident="Practice03" intID="292">
<info>Practice03</info>
<question id="PR03" intID="90" />
<php intID="294"><![CDATA[
if (!isset($timeFB03)) {
  $timeFB03 = time();
  registerVariable($timeFB03);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 210;  // Der Teilnehmer hat 210 Sekunden Zeit zur Bearbeitung
if (time() >= $timeFB03 + $timer) {
  goToPage('Falsch03');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $timeFB03 + $timer - time();
replace('%remain%', $remain);
]]></php>
<postprocessing intID="295">

</postprocessing>
<php intID="296">
replace('%remain%', 12);  // Der Teilnehmer hat 12 Sekunden für die Bearbeitung
</php>
<text id="XXcode" intID="297">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 38 -->
<page ident="Wtr03" intID="98">
<info>Wtr03</info>
<php intID="99"><![CDATA[
if (value('PR03_21') == 2) {
    goToPage('Richtig03'); // Antwort korrekt
} else {
    goToPage('Falsch03'); // Antwort falsch
}
]]></php>
</page>


<!-- Seite 39 -->
<page ident="Richtig03" intID="302">
<info>Richtig03</info>
<text id="Richtig03" intID="92">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 40 -->
<page ident="GotoPrac04" intID="307">
<info>GotoPractice04</info>
<php intID="308"><![CDATA[
{
    goToPage('Practice04');
}
]]></php>
</page>


<!-- Seite 41 -->
<page ident="Falsch03" intID="309">
<info>Falsch03</info>
<text id="Falsch03" intID="75">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 42 -->
<page ident="Practice04" intID="316">
<info>Practice04</info>
<php intID="318"><![CDATA[
if (!isset($timeFB04)) {
  $timeFB04 = time();
  registerVariable($timeFB04);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 210;  // Der Teilnehmer hat 210 Sekunden Zeit zur Bearbeitung
if (time() >= $timeFB04 + $timer) {
  goToPage('Falsch04');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $timeFB04 + $timer - time();
replace('%remain%', $remain);
]]></php>
<postprocessing intID="319">

</postprocessing>
<question id="RE04" intID="32" />
<php intID="320">
replace('%remain%', 12);  // Der Teilnehmer hat 12 Sekunden für die Bearbeitung
</php>
<text id="XXcode" intID="321">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 43 -->
<page ident="Wtr04" intID="100">
<info>Wtr04</info>
<php intID="101"><![CDATA[
if (value('RE04_23') == 1) {
    goToPage('Richtig04'); // Antwort korrekt
} else {
    goToPage('Falsch04'); // Antwort falsch
}
]]></php>
</page>


<!-- Seite 44 -->
<page ident="Richtig04" intID="326">
<info>Richtig04</info>
<text id="Richtig04" intID="102">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 45 -->
<page ident="Gototr01n" intID="331">
<info>Gototr01n</info>
<php intID="332"><![CDATA[
{
  goToPage('TR01n');
}
]]></php>
</page>


<!-- Seite 46 -->
<page ident="Falsch04" intID="333">
<info>Falsch04</info>
<text id="Falsch04" intID="103">
	<spacing>default</spacing>
</text>
</page>


<!-- Seite 47 -->
<page ident="TR01n" intID="373">
<info>TR01n</info>
<php intID="374"><![CDATA[
if (!isset($time0)) {
  $time0 = time();
  registerVariable($time0);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 210;  // Der Teilnehmer hat 210 Sekunden Zeit zur Bearbeitung
if (time() >= $time0 + $timer) {
  goToPage('next');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $time0 + $timer - time();
replace('%remain%', $remain);
]]></php>
<question id="UN01" intID="5" />
<php intID="376">
replace('%remain%', 12);  // Der Teilnehmer hat 12 Sekunden für die Bearbeitung
</php>
<text id="XXcode" intID="377">
	<spacing>default</spacing>
</text>
</page>
by s109993 (12.0k points)
es ist einfacher Ihnen zu helfen, wenn sie schonmal einen Pre-Test Link und ihren Code bereitstellen :)
by s269849 (125 points)
edited by s269849
Hier ist ein Link (Work in Progress).  Ich bin völlig neu bei Sosci Survey. Ich bin übrigens jetzt dabei das ganze zu vereinfachen (in einem neuen Projekt), da wir das diese Woche brauchen, aber ich glaube dies ist ein gutes Beispiel für Probleme, die später auftauchen könnten.

Sorry, link gelöscht. Kommt bald wieder. Muss tüfteln
by s269849 (125 points)
Code ist jetzt in der Frage. Ich bin relativ neu zu php (außer für Mailings).

1 Answer

0 votes
by SoSci Survey (327k points)
selected by s269849
 
Best answer

Ich bin nicht ganz sicher, ob ich das Problem korrekt verstehe. Es wäre hilfreich, wenn Sie kurz erklären, unter welchen Bedingungen (wo muss man klicken) das Problem auftritt - wenn Sie das nicht nachvollziehen können, dann werfen Sie am besten einen Blick in den Datensatz in die betroffenen Fälle.

Verwenden Sie außerdem bitte die Debug-Information, um nachzuvollziehen, was im Hintergrund passiert.

Eine Kleinigkeit, die ich sehe, und die vielleicht Probleme verursacht: Sie verwenden mehrfach

if (!isset($time0)) {

Beachten Sie bitte, dass die Variable $time0 nach einem registerVariable() auf allen Seiten dieselbe ist. Das heißt, wenn Sie auf Seite 28 einen neuen Timer starten möchten, dann verwenden Sie einen anderen Variablennamen, z.B. $time1.

by s269849 (125 points)
edited by s269849
Ja, das mit der Zeit... dazu habe ich eine Frage. Wäre es nicht ebenso möglich $time0 am Anfang von jeder Seite zu löschen auf der, diese Variable neu eingesetzt wird. Das lässt sich nämlich viel einfacher kopieren.

Wie gesagt, das tritt dann auf, wenn man zu lange auf den Seiten, die keine Zeitbegrenzung haben verweilt. Deswegen meine Frage ob die Zeitbegrenzung eine Auswirkung auf die Gesamtzeit hat.

Ich hatte gerade gelesen, dass man nicht Fragenoptionen zwischen solchen Fragen stellen sollte. Dies habe ich dann gelöscht, sodass keine Option direkt auf eine solche Frage leitet, sondern immer auf eine Zwischenseite direkt davor. ich weiss nicht ob dies das Problem sein könnte. Aber dann wäre es ja kaum möglich zwei Blöcken mit Abfolgen mit Reaktionszeit in einem Ablauf zu haben ....

Ich habe einen neuen Code Snippet in der Hauptfrage. Das mit den $times hatte ich schon probiert. Geht auch nicht. Bricht ab auf der Seite 47 oder zwischen 3 und 7 Seiten später. Ist also nicht uniform.
by s269849 (125 points)
Ich habe gerade neuen Code in die Frage eingefügt. ich weiss nicht ob Sie Änderungen mitgeteilt bekommen oder nur neue Fragen. Auch mein Kommentar oben erklärt einiges.
by SoSci Survey (327k points)
>  Wäre es nicht ebenso möglich $time0 am Anfang von jeder Seite zu löschen auf der, diese Variable neu eingesetzt wird.

Die Kombination aus isset() und registerVariable() ist dafür da, dass man die Variable nicht neu setzt, wenn die Seite beu geladen wird. Wenn Sie das einfach weglassen, wird die Variable auf der Seite frisch gesetzt - aber wenn die Seite aufgrund einer fehlenden Antwort oder mittels Neu-Laden erneute geladen wird, startet auch der Timer erneut. Gleiches würde gelten, wenn man die zu Beginn der Seite explizit löscht.

> wenn man zu lange auf den Seiten, die keine Zeitbegrenzung haben verweilt.

In der Zeit läuft wahrscheinlich der erste Timer ab, und damit greift das IF auf der nächsten Seite, welches für den Fall dort steht, dass der Timer abgelaufen ist.

Funktioniert es jetzt, wenn Sie für jeden Timer eine andere Variable verwenden?
by s269849 (125 points)
Ja, das funktioniert jetzt alles bestens. Vielen vielen 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

...