0 votes
in SoSci Survey (dt.) by s082232 (435 points)

Liebes Team,

ich möchte den Teilnehmenden gern eine persönliche Auswertung zu mehreren Persönlichkeitsdimensionen geben. Mit Hilfe Ihrer Anleitung habe ich das für eine Befragungswelle mit ChartJS erfolgreich realisiert.

Die Studie hat allerdings drei Befragungswellen und ich würde den Teilnehmenden gern ihre Antworten aus allen drei Wellen in derselben Grafik anzeigen lassen. Dafür müsste ich die Antworten jeder Welle vermutlich in einer Datenbank für Inhalte ablegen und auf der Feedback-Seite wieder auslesen.

Nun bin ich leider etwas überfordert, wie ich die verschiedenen Dimensionen aus den verschiedenen Wellen in der Datenbank ablege und korrekt wieder auslese. Im Moment berechne ich die einzelnen Variablen in dieser Art:

$fear = valueMean('HE01', [5,29,53]);

Diese Werte wird dann über $ownData in ein Array zusammengefügt:

$ownData = [$sinc, $fair, $greed, $modest,...]

Und anschließend an show übergeben:

show('HE04', [
  '%labels%' => json_encode($labels),
  '%ownData%' => json_encode($ownData)
  // '%refData%' => json_encode($refData)
]);

Wie kann ich diese Daten am besten in die Datenbank speisen und wieder auslesen? Vielen Dank für Ihre Hilfe!

1 Answer

0 votes
by SoSci Survey (332k points)
selected by s082232
 
Best answer

Nun bin ich leider etwas überfordert, wie ich die verschiedenen Dimensionen aus den verschiedenen Wellen in der Datenbank ablege und korrekt wieder auslese.

Zum Glück unterstützt die Datenbank für Inhalte seit ein paar Monaten nicht nur einfache (indizierte) Arrays, sondern auch Objekte. So können Sie Ihre Daten aus den drei Wellen relativ einfach ablegen.

$ownData = [$sinc, $fair, $greed, $modest,...]
$key = 'R-'.caseSerial();

// Auslesen, wenn es schon etwas gibt
$data = dbRetrieve($key);
if (!$data) {
    $data = [];
}

// Neue Welle ergänzen
$data['wave1'] = $ownData;
dbStore($key, $data);
by s082232 (435 points)
Vielen Dank! Das sieht sehr gut aus. Jetzt muss ich vermutlich noch irgendwo hinterlegen, um welche Welle es sich handelt, damit SosciSurvey weiß, wann es was eintragen muss, oder?

Und wie lese ich die einzelnen Wellen am Ende wieder heraus?

Der Befehl oben muss "dbRetrieve" heißen (nur zur Info für alle nachfolgenden Nutzer*innen).
by s082232 (435 points)
Das Eintragen der Daten in spezifische Wellen habe ich mittlerweile gelöst:

//Wellen einpflegen
if (($studyWave == 1) or ($studyWave == 2) or ($studyWave == 7)) { // if first or second wave
    $data['wave1'] = $ownData;
    dbStore($key, $data);
} elseif (($studyWave == 3) or ($studyWave == 4) or ($studyWave == 8)) {
    $data['wave2'] = $ownData;
    dbStore($key, $data);
} else {
    $data['wave3'] = $ownData;
    dbStore($key, $data);
}

Das klappt einwandfrei. Nur beim Auslesen gibt es noch Probleme. Ich habe den ChartJS-Code entsprechend um die drei Wellen ergänzt und folgenden Code für das Auslesen aus der Datenbank geschrieben:

//Aus Datenbank holen
$key = 'R-'.caseSerial();
$data = dbRetrieve($key);

$data['wave1'] = $ownData1;
$data['wave2'] = $ownData2;
$data['wave3'] = $ownData3;
 
// Textbaustein mit dem HTML-Code für das Chart einbinden
show('HE04', [
  '%labels%' => json_encode($labels),
  '%ownData1%' => json_encode($ownData1),
  '%ownData2%' => json_encode($ownData2),
  '%ownData3%' => json_encode($ownData3)
]);

Das funktioniert leider nicht. Mit welcher Funktion kann ich denn ein Array aus der Datenbank auslesen und als Array verfügbar machen? Dankeschön!
by s082232 (435 points)
Problem gelöst :-)

if ($data) {
    $ownData1 = $data['wave1'];
    $ownData2 = $data['wave2'];
    $ownData3 = $data['wave3'];
}
by s082232 (435 points)
Leider taucht bei meiner Lösung folgende Fehlermeldung bei den Teilnehmenden auf, die die zweite Befragung nicht ausgefüllt haben:

  Undefined array key "wave 2"

Der Code sieht so aus und enthält einen Fehlertext, der eigentlich angezeigt werden sollte:

if ($data) {
    $ownData1 = $data['wave1'];
    $ownData2 = $data['wave2'];
    $ownData3 = $data['wave3'];
} else {
  show('HE06');
}

Wie kann ich dieses Problem lösen? Vielen Dank für Ihre Hilfe!
by SoSci Survey (332k points)
Es sind ja Daten da, dashalb greift der Filder nicht. Nur eben nicht für Welle 2. Eine mögliche Lösung wäre diese hier:

    $ownData1 = $data['wave1'] ?? 'n/a';
    $ownData2 = $data['wave2'] ?? 'n/a';
    $ownData3 = $data['wave3'] ?? 'n/a';

Die Warnung, welche SoSci Survey anzeigt, weil es den Operator ?? noch nicht kennt, können Sie ignorieren.

Alternativ können Sie prüfen, ob Daten für die ersten beiden Wellen vorliegen:

if ($data && isset($data['wave1']) && isset($data['wave2'])) {
    $ownData1 = $data['wave1'];
    $ownData2 = $data['wave2'];
    $ownData3 = $data['wave3'];
} else {
  show('HE06');
}
by s082232 (435 points)
Vielen Dank! Ich war erst etwas zurückhaltend in einer laufender Befragung diese Parameter zu ändern, aber nun habe ich die erste Version implementiert und es funktioniert :-)

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

...