0 votes
in SoSci Survey (dt.) by s109802 (140 points)
edited by SoSci Survey

Guten Tag, wie unter der anderen Frage besprochen, schildere ich hier noch einmal die Stelle, an der ich nicht weiterkomme. Meine drei Codes für die Blockrandomisierung nach Altersgruppen sehen so aus. Der dritte Code ab $blocknummer = value('SZ22'); regelt die zufällige Zuteilung der Gruppen zu den Seiten-Blöcken mit unterschiedlichem Stimulusmaterial und Fragen. Vermutlich müsste er an die Blockrandomisierung angepasst werden, aber ich weiß nicht wie.
Ich möchte, dass nur Gruppe 1 (20-35 Jahre) und Gruppe 2 (>= 65 Jahre) den Fragebogen bearbeiten. Gruppe 3 würde ich gern direkt zum Ende des Fragebogens leiten.

Code 1)
$age = value('AL01_01');
if ($age >= 20 && $age <= 35) {
$ageGroup = 1;
} elseif ($age >= 65) {
$ageGroup = 2;
} elseif ($age >= 36 && $age <= 64) {     
$ageGroup = 3;
}

debug($ageGroup);
put('AL02_01', $ageGroup);


Code 2)
if (value('AL01_01') == 1) {
  show('SZ22');
  put('SZ24_01', value('SZ22'));
} elseif (value('AL01_01') == 2) {
  show('SZ23');
  put('SZ24_02', value('SZ23'));
} elseif (value('AL01_01') == 3) {
  text('screenout');
  buttonHide();
  setPageOrder($gesamtliste, 'posttest');
}



Code 3)
$blocknummer = value('SZ22');
$blocks = [
  1 => valueList('SZ19', null, 'label'),
  2 => valueList('SZ20', null, 'label'),
  3 => valueList('SZ21', null, 'label')
];
// Definieren der zusätzlichen, nicht rotierten Seiten für jeden Block
$additionalPages = [
  1 => ['SSZ5', 'SSZ6', 'SSZ7', 'SSZ8', 'SSZ9'],
  2 => ['KSZ5', 'KSZ6', 'KSZ7', 'KSZ8', 'KSZ9'],
  3 => ['ISZ5', 'ISZ6', 'ISZ7', 'ISZ8', 'ISZ9']
];

$gesamtliste = $blocks[$blocknummer];


if (isset($additionalPages[$blocknummer])) {
  $additionalPagesForBlock = $additionalPages[$blocknummer];
  $gesamtliste = array_merge($gesamtliste, $additionalPagesForBlock);
}

setPageOrder($gesamtliste, 'posttest');

Diese Fehlermeldung wird angezeigt:

Der Befehl put() kann nur in eine interne Variable speichern. Die
Frage EF03 ist nicht vom Typ "Interne Variablen".

„Die Variable SZ22 wurde im Laufe dieses Interviews auf keiner
vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen
Antwort-Wert ermitteln.“

„In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ
NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt
oder Arrays, die ausschließlich Strings enthalten.

Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Undefined array key ""
    Zeile: 17
PHP-Code
014   3 => ['ISZ5', 'ISZ6', 'ISZ7', 'ISZ8', 'ISZ9']
015 ];
016 
017 $gesamtliste = $blocks[$blocknummer];
018 
019 
020“

Ich habe auf Seite 2 die Altersabfrage AL01 und interne Variable AL02_01. Auf Seite 3 stehen die drei PHP-Codes. Ab Seite 4 kommen die Blöcke, auf die die Gruppen zugeteilt werden sollen. SZ24_01 und SZ24_02 sind interne Variablen, in die die gezogenen Zufallszahlen kopiert werden sollen.

1 Answer

0 votes
by SoSci Survey (327k points)

Sie schreiben oben Code 1 bis Code 3 ... haben Sie das in unterschiedlichen PHP-Code-Elementen und/oder sogar auf utnerschiedlichen Seiten des Fragebogens?

Spontan würde ich sagen: Sieht gut aus, tauschen Sie bitte in dieser Zeile

$blocknummer = value('SZ22');

das SZ22 einmal durch AL01_01, denn dort haben Sie die (richtige) Zufallsziehung ja mittels put() hineinkopiert.

$blocknummer = value('AL01_01');
by s109802 (140 points)
Vielen Dank für diesen Tipp. Jetzt ist eine Fehlermeldung verschwunden und es steht noch:

Fehler im Fragebogen (Seite 3)
In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten.

Fehler im Fragebogen (Seite 3)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 22
Zeile: 40

PHP-Code

037   3 => ['ISZ5', 'ISZ6', 'ISZ7', 'ISZ8', 'ISZ9']
038 ];
039
040 $gesamtliste = $blocks[$blocknummer];
041
042
043 if (isset($additionalPages[$blocknummer])) {

Code 1 bis 3 habe ich in drei PHP-Code-Elementen auf derselben Seite.
by SoSci Survey (327k points)
Und ... was steht in der Debug-Information?

Fügen Sie gerne auch noch diese Zeile ein, damit wir das Problem schneller finden:
debug($blocknummer);
by s109802 (140 points)
Als Debug Info für die Blocknummer sieht man das eingetragene Alter:
Hinweis (Seite 3)
Debug-Information für $ageGroup:
$ageGroup = 2 (integer)

Fehler im Fragebogen (Seite 3)
In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten.

Hinweis (Seite 3)
Debug-Information für $blocknummer:
$blocknummer = 66 (string)

Fehler im Fragebogen (Seite 3)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 66
Zeile: 40

PHP-Code

037   3 => ['ISZ5', 'ISZ6', 'ISZ7', 'ISZ8', 'ISZ9']
038 ];
039
040 $gesamtliste = $blocks[$blocknummer];
041
042
043 if (isset($additionalPages[$blocknummer])) {

Und hier die allgemeine Debug-Info:
[Verarbeitung]    Lese Antworten von Seite 2
[Information]    Antwort auf AL01_01 = 66
[Information]    Keine Antwort für AL02_01
[Information]    Antwort auf EF05 = 7
[Information]    Keine Antwort für EF05_04
[Information]    Antwort auf EF04 = 2
[Information]    Keine Antwort für EF04_08
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 3 in Fragebogen qnr2
[Information]    value("AL01_01") = 66
debug()    Inhalt: $ageGroup = 2 (integer)
[Information]    Die interne Variable AL02_01 wird mit dem Wert 2 belegt.
[Information]    value("AL01_01") = 66
[Information]    value("AL01_01") = 66
[Information]    value("AL01_01") = 66
[Information]    value("AL01_01") = 66
debug()    Inhalt: $blocknummer = 66 (string)
by SoSci Survey (327k points)
> $blocknummer = 66 (string)

Okay ... die Blocknummer dürfte nur zwischen 1 und 3 liegen. Denn das ist ja die gezogene Gruppe.

Nur zur Sicherheit: Ihre Zufallsgeneratoren sind SZ22 und SZ23 ?

Wenn die Altergruppe 3 ist, dann sollte der Screenout gezeigt werden:

    ...
} elseif (value('AL01_01') == 3) {
  text('screenout');
  buttonHide();
  setPageOrder($gesamtliste, 'posttest');
}

Was hier noch fehlt ist ein pageStop()


    ...
} elseif (value('AL01_01') == 3) {
  text('screenout');
  buttonHide();
  setPageOrder($gesamtliste, 'posttest');
  pageStop();
}

Das sorgt dafür, dass der Rest der Seite in Gruppe 3 nicht mehr verarbeitet wird.
by s109802 (140 points)
Richtig, SZ22 und SZ23 sind Zufallsgeneratoren. In beide habe ich diese selben Zettel eingetragen:

1 = SSZ1, SSZ2, SSZ3, SSZ4
2 = KSZ1, KSZ2, KSZ3, KSZ4
3 = ISZ1, ISZ2, ISZ3, ISZ4

Die Meldung mit dem Parameter vom Typ NULL ist jetzt verschwunden. Jetzt habe ich nur noch:
Fehler im Fragebogen (Seite 3)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 22
Zeile: 42

PHP-Code

039   3 => ['ISZ5', 'ISZ6', 'ISZ7', 'ISZ8', 'ISZ9']
040 ];
041
042 $gesamtliste = $blocks[$blocknummer];
043
044
045 if (isset($additionalPages[$blocknummer])) {

Haben Sie noch eine Idee, woran die Meldung mit der Blocknummer liegen könnte?
by SoSci Survey (327k points)
Nun, die $blocknummer scheint 22 zu sein - und nicht, wie sie es sein sollte, ein Wert zwischen 1 und 3. Bitte posten Sie, was debug($blocknummer) anzeigt und prüfen Sie nochmal, wo der Wert herkommt. Sie haben diese Zeile im Code:

put('SZ24_01', value('SZ22'));

Prüfen Sie also, ob SZ24_01 in allen Tests einen Code zwischen 1 und 3 hat. Und dann tauschen Sie weiter unten bitte

$blocknummer = value('AL01_01');

noch gegen

$blocknummer = value('SZ24_01');

Denn $blocknummer meint ja nicht den Block, innerhalb dessen Sie Randomisieren (AL01_01), sondern den Block an Seiten, der nachfolgend präsentiert werden soll.
by s109802 (140 points)
Blocknummer zeigt immer das Alter an, was ich eingebe:
Hinweis (Seite 3)
Debug-Information für $blocknummer:
$blocknummer = 33 (string)

Prüfen Sie also, ob SZ24_01 in allen Tests einen Code zwischen 1 und 3 hat. - Was meinen Sie mit "in allen Tests"? SZ24_01 ist eine Frage vom Typ interne Variablen. Ich weiß leider nicht, wie sie einen Code von 1 bis 3 haben kann, da  ich nur eine Beschriftung für die Kennung 01 eingeben kann und mehr nicht einfügen kann.
by SoSci Survey (327k points)
> Was meinen Sie mit "in allen Tests"?

In allen Fällen Ihres Test-Datensatzes.

Haben sie die andere Änderung bereits vorgenommen?

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

...