+1 vote
in SoSci Survey (dt.) by s175109 (200 points)
edited by SoSci Survey

Vielen Dank für Ihre Antwort!

Die Fehlermeldung zu valueList() ist nun verschwunden.

Leider bleibt die Fehlermeldung zu setPageOrder()

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.

Hier noch einmal mein Code:

$blockfolge = valueList('RO10');
$blocks = [
  1 => valueList('RO08', null, 'label'),
  2 => valueList('RO09', null, 'label'),
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
);
setPageOrder($gesamtliste, 'SD');
related to an answer for: Fehlermeldung bei Blöcke Rotieren
by SoSci Survey (302k points)
Tritt der Fehler auch noch auf, wenn Sie das Komma am Ende dieser Zeile weglassen?

$blocks[$blockfolge[1]],

Wenn ja, dann ergänzen Sie bitte folgenden PHP-Code und posten Sie die Ausgabe im Debug-Modus:

debug($blocks[$blockfolge[0]]);
debug($blocks[$blockfolge[1]]);
debug($gesamtliste);
by s175109 (200 points)
Leider funktioniert der Code trotzdem nicht.

Hier ist jetzt der Code mit dem ergänzten PHP-Code:

$blockfolge = valueList('RO10');
$blocks = [
  1 => valueList('RO08', null, 'label'),
  2 => valueList('RO09', null, 'label'),
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[0]]
  $blocks[$blockfolge[1]]
);
setPageOrder($gesamtliste, 'SD');

debug($blocks[$blockfolge[0]]);
debug($blocks[$blockfolge[1]]);
debug($gesamtliste);


Es wird diese Meldung gegeben:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.
PHP-Code

006   2 => valueList('RO09', null, 'label'),
007 ];
008 $gesamtliste = array_merge(
009   $blocks[$blockfolge[0]]
010   $blocks[$blockfolge[1]]
011 );
012 setPageOrder($gesamtliste, 'SD');
013
by SoSci Survey (302k points)
> Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder

Hinter dem ersten Eintrag muss das Komma bitte stehen bleiben:

$gesamtliste = array_merge(
   $blocks[$blockfolge[0]],
   $blocks[$blockfolge[1]]
);

... nur nicht hinter dem zweiten, denn danach kommt ja kein weiterer Eintrag.
by s175109 (200 points)
Danke, das ist natürlich logisch

der Code sieht jetzt so aus:

$blockfolge = valueList('RO10');
$blocks = [
  1 => valueList('RO08', null, 'label'),
  2 => valueList('RO09', null, 'label'),
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]]
);
setPageOrder($gesamtliste, 'SD');

debug($blocks[$blockfolge[0]]);
debug($blocks[$blockfolge[1]]);
debug($gesamtliste);

und löst im debug-Modus folgende Fehlermeldungen aus:

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.

Debug-Information für $blocks[$blockfolge[0]]:
Keine Daten (null)

Debug-Information für $blocks[$blockfolge[1]]:
Keine Daten (null)

Debug-Information für $gesamtliste:
Keine Daten (null)

Ich danke Ihnen für Ihre Hilfe!
by SoSci Survey (302k points)
Haben Sie denn die Zufallsgeneratoren RO08 und RO09 oben (über dem PHP-Code oder auf einer vorigen Seite) in den Fragebogen bzw. die Fragebogen-Seite gezogen, damit überhaupt etwas aus diesen gezogen wird?
by s175109 (200 points)
Ja, das habe ich.

Ich habe alle 3 Zufallsgeneratoren über dem Code.
by SoSci Survey (302k points)
Was zeigt denn die volltständige Debug-Information (rechts oben) an?

Könnten Sie bitte noch folgende Zeile PHP-Code ergänzen:

debug($blocks);
by s175109 (200 points)
Hier die Debug Information inklusive des zusätzlichen debug() codes:

[Inhalt]    Erstelle Frage RO10
[Information]    Vom Zufallsgenerator RO10 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RO09
[Information]    Vom Zufallsgenerator RO09 wurden folgende Codes gezogen: 7, 3, 10, 5, 6, 9, 8, 4, 1, 11, 2
[Inhalt]    Erstelle Frage RO08
[Information]    Vom Zufallsgenerator RO08 wurden folgende Codes gezogen: 1, 11, 7, 8, 4, 3, 10, 6, 9, 2, 5
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: 1[Array], 2[Array]
by SoSci Survey (302k points)
> Inhalt: 1[Array], 2[Array]

Nun gut, da scheint die Welt noch in Ordnung zu sein...

Das Problem liegt offenbar an dieser Stelle:

$blockfolge = valueList('RO10');

Sie ziehen aus RO10 nur einen Wert - bräuchten aber (wenn ich Sie korrekt verstehe) eigentlich zwei. Was haben Sie denn auf den Zetteln on RO10 vermerkt?

Wenn dort einfach nur 1 und 2 steht, dann stellen Sie bitte ein, dass pro Interview 2 Zettel gezogen werden.

Weiterhin haben Sie noch einen Fehler in der Anleitung gefunden. Und zwar muss es statt

$blockfolge = valueList('RO10');

bitte heißen

$blockfolge = array_values(valueList('RO10'));
by s175109 (200 points)
Das steht auf RO10:

1 =A01-A11, B01-B11
2 = B01-B11, A01-A11

und ja, ich ziehe nur 1 Zettel. Aber ich dachte, das wäre richtig, da ich ja nur eine der beiden Reihenfolgen haben möchte.
by s175109 (200 points)
Vielen Dank für Ihre Lösung.
Ich habe den PHP-Code genauso übernommen.

Leider gibt es nun das Problem, dass beide Reihenfolgen hintereinander gezeigt werden und nicht rotiert werden, wie gewollt.

Die Rotation innerhalb der Blöcke funktioniert aber richtig.

ich habe folgenden debug-Code eingefügt:
debug(array_merge($blocks[1], $blocks[2]));
debug(array_merge($blocks[2], $blocks[1]));
debug($gesamtliste);
debug($blocks);

Die Debug-Information dazu ist folgende:

[Inhalt]    Erstelle Frage RO10
[Information]    Vom Zufallsgenerator RO10 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RO09
[Information]    Vom Zufallsgenerator RO09 wurden folgende Codes gezogen: 7, 8, 2, 1, 9, 3, 10, 5, 11, 4, 6
[Inhalt]    Erstelle Frage RO08
[Information]    Vom Zufallsgenerator RO08 wurden folgende Codes gezogen: 4, 1, 8, 9, 10, 3, 11, 5, 6, 7, 2
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
22 [B07], 23 [B08], 17 [B02], 16 [B01], 24 [B09], 18 [B03], 25 [B10], 20 [B05], 26 [B11], 19 [B04], 21 [B06], 8 [A04], 5 [A01], 12 [A08], 13 [A09], 14 [A10], 7 [A03], 15 [A11], 9 [A05], 10 [A06], 11 [A07], 6 [A02]
debug()    Inhalt: RO08x01A04, RO08x02A01, RO08x03A08, RO08x04A09, RO08x05A10, RO08x06A03, RO08x07A11, RO08x08A05, RO08x09A06, RO08x10A07, RO08x11A02, RO09x01B07, RO09x02B08, RO09x03B02, RO09x04B01, RO09x05B09, RO09x06B03, RO09x07B10, RO09x08B05, RO09x09B11, RO09x10B04, RO09x11B06
debug()    Inhalt: RO09x01B07, RO09x02B08, RO09x03B02, RO09x04B01, RO09x05B09, RO09x06B03, RO09x07B10, RO09x08B05, RO09x09B11, RO09x10B04, RO09x11B06, RO08x01A04, RO08x02A01, RO08x03A08, RO08x04A09, RO08x05A10, RO08x06A03, RO08x07A11, RO08x08A05, RO08x09A06, RO08x10A07, RO08x11A02
debug()    Inhalt: RO09x01B07, RO09x02B08, RO09x03B02, RO09x04B01, RO09x05B09, RO09x06B03, RO09x07B10, RO09x08B05, RO09xB11, RO09x10B04, RO09x11B06, RO08x01A04, RO08x02A01, RO08x03A08, RO08x04A09, RO08x05A10, RO08x06A03, RO08x07A11, RO08x08A05, RO08x09A06, RO08x10A07, RO08x11A02
debug()    Inhalt: 1[Array], 2[Array]

Laut der Information von SetPageOrder() werden die Blöcke jeweils nur einmal gezeigt. Doch nachdem Block B und dann Block A gezeigt wurden, wird Block A und nochmal Block B gezeigt.
Außerdem wird immer Block B als erstes gezeigt. Obwohl der RO10 die Reihenfolge 1 zieht, bei der Block A als erstes kommen sollte.

Zusätzlich wird auch noch diese Warnung angezeigt:

In setPageOrder() wurde eine Seite "SD" angegeben, die es im Fragebogen nicht gibt.

Ich hoffe, Sie haben noch Zeit, mir bei meinem Problem zu helfen.
by SoSci Survey (302k points)
> Doch nachdem Block B und dann Block A gezeigt wurden, wird Block A und nochmal Block B gezeigt.

Das kommt daher:

> In setPageOrder() wurde eine Seite "SD" angegeben, die es im Fragebogen nicht gibt.

Sie müssen in setPageOrder() angeben, wo es nach Abarbeiten der Seitenabfolge weitergehen soll. Geben Sie also der Seite nach B11 die Seitenkennung SD (oder was auch immer, sie muss nur in setPageOrder() eingetragen sein).

> Außerdem wird immer Block B als erstes gezeigt.

Was sagt denn:

debug($blockfolge);
by s175109 (200 points)
Perfekt! das hat schonmal geklappt.

Jetzt fehlt nur noch die Reihenfolge.

debug($blockfolge); zeigt eigentlich abwechselnd Reihenfolge 1 und 2 an
RO10: 1
RO10: 2

auch die Infos von den array_merge() ist richtig.

nur die gesamtliste ist immer die gleiche
by SoSci Survey (302k points)
Arg ... wenn Sie nur einen Zettel ziehen, müssen Sie natürlich value('RO10') statt valueList('RO10') verwenden. Ich habe das unten im Code nun korrigiert.

Bei valueList() bekommen Sie ein Array und dann macht der Vergleich ==1 wenig Sinn.
by s175109 (200 points)
Vielen Lieben Dank!!! Es funktioniert. Juhuuuu

Dankeschön für Ihre Hilfe :)

1 Answer

+1 vote
by SoSci Survey (302k points)
selected by s175109
 
Best answer

Im Prinzip ist es korrekt, die Reihenfolge nur über einen Zettel zu ziehen - allerdings müssten Sie den PHP-Code dann wie folgt anpassen:

$blockfolge = value('RO10');
$blocks = [
  1 => valueList('RO08', null, 'label'),
  2 => valueList('RO09', null, 'label'),
];
if ($blockfolge == 1) {
    $gesamtliste = array_merge($blocks[1], $blocks[2]);
} else {
    $gesamtliste = array_merge($blocks[2], $blocks[1]);
}
setPageOrder($gesamtliste, 'SD');

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

...