0 votes
in SoSci Survey (dt.) by s233742 (225 points)

Liebes SoSci Survey-Team,

ich habe folgendes Ziel:
Wir wollen eine MESM-Studie durchführen und haben 30 Befragungswellen.
Ich möchte alle Antworten auf eine offene Nennung "MP01" (muss nicht jedes mal ausgefüllt werden) als eine Auswahloption in einem späteren Drop-Down "MP09" verwenden.
D.h. Zu Zeitpunkt 1 geben sie Antwort1, zu Zeitpunkt 2 keine Antwort und zu Zeitpunkt 3 geben sie Antwort2. Zu Zeitpunkt 1 und 2 kann dann bei dem Drop-Down nur eine Antwort1 als Option ausgewählt werden, ab Zeitpunkt 3 dann aber auch Antwort2.
Hierzu habe ich mir die folgenden zwei Artikel von euch zu Gemüte geführt (https://www.soscisurvey.de/help/doku.php/de:create:transfer-responses und https://www.soscisurvey.de/help/doku.php/de:create:use-response) und versucht diese zu kombinieren. Außerdem habe ich bei dem Drop-Down Item 30 Platzhalter von %freund0% bis %freund29% eingefügt aber möchte natürlich, dass nur soviele ersetzt werden wie in den bisherigen Befragungswellen offene Antworten bei MP01 von dieser einen Person abgegeben wurden (also maximal bei der letzten Befragungswelle 30 Antworten). Dabei ist folgender Code herausgekommen:

$key = 'FR-'.caseSerial();
$data = array(
    value('MP02_01')
);
dbSet($key, $data);

Und dann wenn ich es einfügen will:

$key = 'FR-'.caseSerial();
$data = dbGet($key);
$items = array();
for ($i=0; $i<=29; $i++) {
  $antwort = $data[$i];
  if (trim($antwort) != '') {
    replace('%freund'.$i.'%', $antwort);
    $items[] = $i;
  }
}
// Folgefrage anzeigen
if (count($items) > 0) {
  question('MP09', $items);
}

Als Fehlermeldung kommt aktuell folgendes: "Fehler im Fragebogen: Trying to access array offset on value of type bool Zeile: 7". Das mit $1 in dem $data[] scheint also nicht so einfach zu funktionieren wie ich mir das vorgestellt habe.
Ist es denn generell möglich mein Vorhaben umzusetzen und wenn ja, hätten Sie einen Tipp wie ich mein Problem lösen könnte?

Vielen Dank und herzliche Grüße

1 Answer

+1 vote
by SoSci Survey (328k points)
selected by s233742
 
Best answer

Als Fehlermeldung kommt aktuell folgendes: "Fehler im Fragebogen: Trying to access array offset on value of type bool

Diese Fehlermeldung will Ihnen sagen, dass $data eine Variable vom Typ Boolean ist. Das passiert dann, wenn dbGet() keinen Eintrag findet, dann liefert es nämlich false zurück.

Sie müssten also nach dem dbGet() erstmal per Filter prüfen, ob ein passender Eintrag gefunden wurde. Und als Tipp zum Testen: Sie können oben in der Debug-Zeile die Variable SERIAL nach Belieben setzen.

Wenn Sie neben der ersten Person weitere ergänzen möchten, dann könnte das so aussehen:

$key = 'FR-'.caseSerial();
// Bisherige Daten lesen
$data = dbGet($key);
// Array eventuell initialisieren
if (!$data) {
  $data = [];
}
// Neuen Namen in der Liste ergänzen
$data[] = value('MP02_02');
// Und speichern
dbSet($key, $data);
by s233742 (225 points)
edited by s233742
Vermutlich hakt es bereits dort: In der Datenbank für Inhalte ist pro Schlüssel nur ein Eintrag (jeweils der letzte). Hat das seine Richtigkeit?
Ich dachte, pro Person bzw. caseSerial wird ein Array angelegt, wo dann die Eingabe aus jedem neuen Fragebogen zusätzlich eingetragen wird. Aber das scheint ja nicht der Fall zu sein oder?
Lässt sich das trotzdem umsetzen?
by SoSci Survey (328k points)
> Hat das seine Richtigkeit?

Nein ;)

Welche Code verwenden Sie aktuell genau zum Speichern der Namen?
by s233742 (225 points)
Na dann besteht ja Hoffnung :)
Den hier:

$key = 'FR-'.caseSerial();
$data[] = value('MP02_01');
$data = array_unique($data);
dbSet($key, $data);
by SoSci Survey (328k points)
Da fehlt das Auslesen der vorigen Antworten, die Sie ja behalten (und nicht einfach überschreiben) möchten. Ich hatte es oben in meiner Antwort wie folgt geschrieben:

$key = 'FR-'.caseSerial();
// Bisherige Daten lesen
$data = dbGet($key);
// Array eventuell initialisieren
if (!$data) {
  $data = [];
}
// Neuen Namen in der Liste ergänzen
$data[] = value('MP02_01');
// Und speichern
dbSet($key, $data);
by s233742 (225 points)
Oh das war mir durch die Lappen gegangen.
Damit funktioniert es jetzt komplett!
Nochmals vielen herzlichen 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

...