0 votes
in SoSci Survey (dt.) by s085348 (120 points)

Hallo,
bei mir funktioniert der Code aus der Gesamtschau leider nicht. Trotz richtiger Kennungen bekomme ich immer diese Fehlermeldungen:

Fehler im Fragebogen (Seite 13)
Im Befehl question() wurde keine Frage-Kennung angegeben.

Warnung (Seite 13)
Das Argument A, das in einer Funktion eines PHP-Blocks verwendet wurde, ist nicht bekannt und wird ignoriert.

Fehler im Fragebogen (Seite 13)
Die Frage mit der Kennung V gibt es im Projekt nicht.

Hier auch nochmal mein Code:

if (!isset($blocks)) {
  $fragen = array('VA01', 'VA02', 'VA03', 'VA04');
  $items = array('VA01', 1);
    $items = array('VA01', 2);
    $items = array('VA01', 3);
    $items = array('VA02', 1);
    $items = array('VA02', 2);
    $items = array('VA02', 3);
    $items = array('VA03', 1);
    $items = array('VA03', 2);
    $items = array('VA03', 3);
    $items = array('VA04', 1);
    $items = array('VA04', 2);
    $items = array('VA04', 3);
  foreach ($fragen as $frage) {
    $itemsF = getItems($frage, 'all');
    foreach ($itemsF as $itemID) {
      $items[] = array($frage, $itemID);
    }
  }

  shuffle($items);
  $blocks = array_chunk($items, 6);
  registerVariable($blocks);
}

$i = loopPage(count($blocks));

foreach ($blocks[$i] as $pos => $item) {
  $frage = $item[0];
  $itemID = $item[1];
  if ($pos == 0) {
    question($frage, $itemID, 'spacing=5');
  } elseif ($pos == 9) {
    question($frage, $itemID, 'anchor=none');
  } else {
    question($frage, $itemID, 'spacing=5', 'anchor=none');
  }
}

Woran könnte das liegen?

1 Answer

0 votes
by SoSci Survey (304k points)

Die Definition Ihres arrays funktioniert nicht so, wie Sie von Ihnen vermutlich gedacht war:

$items = array('VA01', 1);
    $items = array('VA01', 2);
    $items = array('VA01', 3);

Was pssiert hier? Die Variable $items wird definiert, und dann wird sie überschrieben und nochmal überschrieben. Am Ende steht also nur das Päärchen ('VA04', 3) in der Variable.

Ich denke, Sie möchten es wie folgt schreiben:

$items = array(
    array('VA01', 1),
    array('VA01', 2),
    array('VA01', 3),
by s085348 (120 points)
Ich habe den Code entsprechend angepasst, aber jetzt leider ein neues Problem. Manche Fragen, die schon beantwortet wurden, tauchen mit der entsprechenden Antwort erneut auf (auch mehrfach) mit folgender Fehlermeldung:

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: VA03_02.

Wie kann ich jedes Item nur einmal verwenden?
by SoSci Survey (304k points)
Würden Sie wohl nochmal Ihren aktualisierten PHP-Code posten?

> Manche Fragen, die schon beantwortet wurden, tauchen mit der entsprechenden Antwort erneut auf (auch mehrfach)

Das passiert mitunter dann, wenn man das isset() und registerVariable() vergisst, sodass bei der jeder Wiederholung die Gesamtliste nochmal neu gemischt wird.
by s085348 (120 points)
Das ist mein jetziger Code, ich weiß leider nicht, wo ich ihn entsprechend anpassen muss.

if (!isset($blocks)) {
  $fragen = array('VA01', 'VA02', 'VA03', 'VA04');
  $items = array(
array('VA01', 1),
array('VA01', 2),
array('VA01', 3),
array('VA02', 1),
array('VA02', 2),
array('VA02', 3),
array('VA03', 1),
array('VA03', 2),
array('VA03', 3),
array('VA04', 1),
array('VA04', 2),
array('VA04', 3),
);
  foreach ($fragen as $frage) {
    $itemsF = getItems($frage, 'all');
    foreach ($itemsF as $itemID) {
      $items[] = array($frage, $itemID);
    }
  }

  shuffle($items);
  $blocks = array_chunk($items, 6);
  registerVariable($blocks);
}

$i = loopPage(count($blocks));

foreach ($blocks[$i] as $pos => $item) {
  $frage = $item[0];
  $itemID = $item[1];
  if ($pos == 0) {
    question($frage, $itemID, 'spacing=5');
  } elseif ($pos == 9) {
    question($frage, $itemID, 'anchor=none');
  } else {
    question($frage, $itemID, 'spacing=5', 'anchor=none');
  }
}
by SoSci Survey (304k points)
Danke... jetzt sehe ich auch den Fehler.

Und zwar definieren Sie einmal im Array oben alle Fragen mit allen Items einzeln. Und dann habe Sie nochmal folgendes im Code:

$itemsF = getItems($frage, 'all');

Hier werden zu jeder Frage nochmal alle Items geholt. Und in die Liste ergänzt, die SIe ohnehin schon ausführlich mit allen Items definiert haben. Also haben Sie am Ende jedes Item doppelt in der Liste.

Die Lösung ist denkbar einfach: Lassen Sie den kompletten folgenden Block weg:

 foreach ($fragen as $frage) {
    $itemsF = getItems($frage, 'all');
    foreach ($itemsF as $itemID) {
      $items[] = array($frage, $itemID);
    }
  }

Oder lassen Sie die Definition von $items weg - das erledigt genau diesr Block. Dann würden Sie zu Beginn nur schreiben:

if (!isset($blocks)) {
  $fragen = array('VA01', 'VA02', 'VA03', 'VA04');
  $items = array();
  foreach ($fragen as $frage) {
    ...
by s085348 (120 points)
Jetzt funktioniert es wie gewünscht. Vielen Dank für Ihre schnellen und hilfreichen Antworten!

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

...