0 votes
in SoSci Survey (dt.) by s110155 (255 points)

Ok, wie würde ich die sichere Lösung denn programmieren?

Die Teilnehmer bekommen über 8 Wochen jeden Tag einen Fragebogen, bei dem DF09_01 die am aktuellen Tag geübten Yoga-Minuten enthält.
Wie kann ich die alle von den vergangenen Tagen aufaddieren? Natürlich kann es sein, das ein Teilnehmer mal einen Tag lang keinen Fragebogen ausgefüllt hat.

Danke!

1 Answer

0 votes
by SoSci Survey (302k points)

Die Teilnehmer bekommen über 8 Wochen jeden Tag einen Fragebogen, bei dem DF09_01 die am aktuellen Tag geübten Yoga-Minuten enthält.

Wenn Sie die Zeit über alle Fragebögen hinweg in der Datenbank für Inhalte speichern, dann können Sie jede Woche ein anderes Feld nutzen. In der ersten Woche z.B.

$key = 'time'.caseSerial();
$data = dbGet($key);
if (!$data) {
  $data = array();
}
$data[0] = value('DF09_01');
dbSet($key, $data);

In der zweiten Woche ändert sich nur die vorletzte Zeile:

$key = 'time'.caseSerial();
$data = dbGet($key);
if (!$data) {
  $data = array();
}
$data[1] = value('DF09_01');
dbSet($key, $data);

Wenn Sie die Summe haben möchten, können Sie diese mit array_sum() ermitteln. Die ersten 4 Zeilen sind die gleichen.

$key = 'time'.caseSerial();
$data = dbGet($key);
if (!$data) {
  $data = array();
}
$gesamt = array_sum($data);
by s110155 (255 points)
Das sieht sehr gut aus, allerdings wird auch hier bei einem erneutem Laden immer der gleiche Wert erneut angehängt ... studyDay enthält den aktuellen Tag der Studie. Wenn die Seite neu geladen wird (studyDay bleibt gleich), verlängert sich das Array data um ein weiteres Element mit dem Wert des Inhaltes von DF09_01.
Aber ich will das Element ja einfach überschreiben - wie geht das mit dbSet?
Die Summenberechnung klappt dann, aber eben nur, wenn keine doppelten Werte entstanden sind.

$key = 'time'.caseSerial();
$data = dbGet($key);
if (!$data) {
  $data = array();
}
$data[$studyDay] = value('DF09_01');
dbSet($key, $data);
by SoSci Survey (302k points)
Wenn sich Ihr Array verändert, dann liegt das an der Variable $studyDay. Über die haben Sie noch nichts verraten. Wo bekommen Sie diese denn her?
by s110155 (255 points)
Vielen Dank für Ihre Antwort. $studyDay bekomme ich auf der ersten Seite des Fragebogens mit

  if (!isset($studyDay)) {
    $studyDay = readGET('usd');  // read day of study from URL sent with email
    registerVariable($studyDay);
  }

Auf der 2. Seite steht dann der Code von Ihnen. Wenn Seite 2 wiederholt aufgerufen wird, sollte sich $studyDay eigentlich nicht ändern, oder?
by s110155 (255 points)
Ich habe jetzt eine Lösung gefunden. Wenn ich mit $data = array_fill(0, 100, 0); initialisiere, funktioniert das ganze. Ich hatte vorher die Funktionsweise von php Arrays nicht ausreichend verstanden. danke nochmal!

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

...