0 votes
in SoSci Survey (dt.) by s093073 (130 points)

Vielen Dank für die schnelle Rückmeldung! Bei Eingabe der o.g. Codes erhalte ich zwar über drei Seiten hinweg die gemischten Fragen allerdings auch einen Fehlercode: Items in der nachfolgenden Fragen werden auf dieser Seite schon weiter oben angezeigt. Dies führt fast zwangsläufig zu Datenverlust! Falls Sie eine Frage mehrfach benötigen, legen Sie bitte eine Kopie der Frage an. Betroffen sind folgende Items: PE03_01.

Haben Sie dazu eine Idee?

Grundsätzlich könnte ich auch alle 45 Items in eine Frage packen und über drei Seiten verteilen aber es handelt sich um einen Fragebogen, der drei Unterkategorien hat, die ich letztlich auch einzeln auswerten möchte. Ich bin blutiger Anfänger mit R und weiß nicht, inwiefern mir das bei der Auswertung von Nachteil ist, wenn ich die drei Subskalen nicht von Beginn an definiere.

DANKE!

1 Answer

0 votes
by SoSci Survey (327k points)

DIe Fehlermeldung deutet darauf hin, dass Sie entweder neu mischen - was vom isset() verhindert werden sollte - oder dass Sie die Zahlen in der FOR-Schleife nicht korrekte eingestellt haben. Also 0/<15 auf der ersten Seite, 15/<30 auf der zweiten und 30/<45 auf der dritten Seite. Variante 1 wäre daran zu erkennen, dass sich die Fehlermeldung "nur" über eine handvoll Items beschwert. Variante 2 erkennen Sie daran, dass 15 Items moniert werden.

Ergänzen Sie in Ihrer Frage gerne den PHP-Code, den Sie auf den drei Seiten verwenden. Dann sollte das Problem schnell einzugrenzen sein.

by s093073 (130 points)
Folgenden PHP Code verwende ich:

if (!isset($allItems)) {
  // Eine Liste aller Items in der Form Frage-Item erstellen
  $questions = array('PE01', 'PE02', 'PE03');
  $allItems = array();
  foreach ($questions as $question) {
    foreach (getItems($question) as $item) {
      $allItems[] = array($question, $item);
    }
  }
  // Mischen und die Reihenfolge merken
  shuffle($allItems);
  registerVariable($allItems);
}

$i = loopPage(count($allItems));
$item = $allItems[$i];
question($item[0], $item[1]);

und dann jeweils auf den drei Seiten:

Seite1:

for ($i=0; $i<15; $i++) {
  $item = $allItems[$i];
  question($item[0], $item[1]);
}

Seite2:

for ($i=15; $i<30; $i++) {
  $item = $allItems[$i];
  question($item[0], $item[1]);
}

Seite 3:

for ($i=30; $i<45; $i++) {
  $item = $allItems[$i];
  question($item[0], $item[1]);
}

DANKE!
by SoSci Survey (327k points)
Der folgende Code muss m.E. raus:

$i = loopPage(count($allItems));
$item = $allItems[$i];
question($item[0], $item[1]);

Er führt dazu, dass erstmal alle Items abgefragt werden, jedes auf einer einzelnen Seite.
by s093073 (130 points)
Klasse, danke - das hat geholfen!
Jetzt würde ich gerne noch die jeweils 15 Fragen pro Seite so formatieren, dass Sie ohne Titel und mit weniger Abstand angezeigt werden - am Besten in fünfer Blocks. An welcher Stelle im Code muss ich dazu 'show-title=no' und/oder 'show-explanation=no' sowie "spacing" integrieren?

Vielen Dank!
by SoSci Survey (327k points)
Das müssten Sie im verbleibenden question()-Befehl in der FOR-Schleife ergänzen:

question($item[0], $item[1], 'show-title=no', 'show-explanation=no', 'spacing=0');

Sorgen Sie dann noch mit einer zusätzlichen Zeile dafür, dass die Frage oben einmal angezeigt wird:

question('PE01', 'show-items=no', 'spacing=0');

Und eventuell müssen Sie unten noch ein wenig Platz schaffen:

html('<div style="height: 4em"></div>');

Wie gesagt: Hätten Sie nur eine Frage mit 45 Items verwendet, wäre es deutlich einfacher :)
by s093073 (130 points)
Vielen Dank für den Support! Das klappt nun grundsätzlich alles, jedoch sieht es wirklich nicht genau gleich wie die vorigen Fragen aus.. d.h. ich gehe zu einer Frage mit 45 Items über ;-) Lange Geburt..

Für den Fall würde ich dann folgenden Code verwenden, oder?

Seite 1

if (!isset($itemsPE01)) {
  // Alle Items der Frage PE01 auflisten
  $items = getItems('PE01', 'all');
  // Liste Mischen
  shuffle($items);
  // Abfolge speichern
  for ($i=0; $i<count($items); $i++) {
    $id = id('PE01', $i + 1);
    put($id, $items[$i]);
  }
  // Die Liste in Teillisten à 15 Items teilen
  $itemsMI = array_chunk($items, 15);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable('itemsPE');
}
question('MI03', $itemsMI[0]);

Seite2
question('PE01', $itemsPE[1]);

Seite 3
question('PE01', $itemsMI[2]);
by SoSci Survey (327k points)
Fast - Sie müssen noch die Variablen $itemsPE01, $itemsPE und $itemsMI gleich benennen. Also bei array_chunk(), isset() und registerVariable() dieselbe Variable eintragen.
by s093073 (130 points)
Ok, das habe ich gemacht. Mit folgendem Code kommt allerdings trotzdem eine Fehlermeldung:


if (!isset($itemsPE01)) {
  // Alle Items der Frage PE01 auflisten
  $items = getItems('PE01', 'all');
  // Liste Mischen
  shuffle($itemsPE01);
  // Abfolge speichern
  for ($i=0; $i<count($itemsPE01); $i++) {
    $id = id('PE01', $i + 1);
    put($id, $itemsPE01[$i]);
  }
  // Die Liste in Teillisten à 15 Items teilen
  $itemsPE01 = array_chunk($itemsPE01, 15);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable('itemsPE01');
}
question('PE01', $itemsPE01[0]);

Seite2
question('PE01', $itemsPE01[1]);

Seite3
question('PE01', $itemsPE01[2]);


**Fehlermeldung:**
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: shuffle() expects parameter 1 to be array, null given
Zeile: 5
PHP-Code
002   
003   $items = getItems('PE01', 'all');
004   
005   shuffle($itemsPE01);
006   
007   for ($i=0; $i<count($itemsPE01); $i++) {
008     $id = id('PE01', $i + 1);
Fehler im Fragebogen: array_chunk() expects parameter 1 to be array, null given
Zeile: 12
PHP-Code
009     put($id, $itemsPE01[$i]);
010   }
011   
012   $itemsPE01 = array_chunk($itemsPE01, 15);
013   
014   registerVariable('itemsPE01');
015 }
by SoSci Survey (327k points)
Wenn Sie schreiben

$items = getItems('PE01', 'all');

dann definieren Sie damit die Variable $items, die Sie dann auch mischen:

shuffle($items);

Eine Variable $itemsPE01 gibt es erst, nachdem Sie in der vorletzten Zeile array_chunk() verwendet und das Ergebnis in diese Variable gespeichert haben.
by s093073 (130 points)
Danke für die Hilfe! Ich habe nun folgenden Code:
if (!isset($items)) {
  // Alle Items der Frage PE01 auflisten
  $items = getItems('PE01', 'all');
  // Liste Mischen
  shuffle($items);
  // Abfolge speichern
  for ($i=0; $i<count($items); $i++) {
    $id = id('PE01', $i + 1);
    put($id, $items[$i]);
  }
  // Die Liste in Teillisten à 15 Items teilen
  $items = array_chunk($items, 15);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable('itemsPE01');
}
question('PE01', $items[0]);

Auf Seite 1 erhalte ich allerdings für jedes der 45 Items folgende Information:
Der Befehl put() kann nur in eine interne Variable speichern. Die Frage PE01 ist nicht vom Typ "Interne Variablen".
by SoSci Survey (327k points)
Das isset() muss von den Variablen-Namen her mit dem registerVariable() und dem array_chunk() zusammenpassen - sonst klappt's nicht :)
by SoSci Survey (327k points)
... und natürlich benötigen Soe zum speichern der Abfolge wirklich interne Variablen, also eine zusätzliche Frage zu PE01: https://www.soscisurvey.de/help/doku.php/de:create:questions:internal
by s093073 (130 points)
Vielen Dank für die Geduld!

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

...