0 votes
in SoSci Survey (dt.) by s134654 (135 points)

Hallo,

für die Auswertung eines Fragebogens benötige ich Hilfe bei der PHP-Kodierung. Der entsprechende Fragebogen besteht aus 7 Items mit 4 Antwortmöglichkeiten. Nun soll die Auswertung mittels PHP-Code insofern erfolgen, dass in einem ersten Schritt die einzelnen Antwortkategorien umkodiert werden in Option 1 und Option 2 bekommen den Wert 0, Option 3 und Option 4 bekommen den Wert 1. Anschließend soll ein Summenwert über die umkodierten 7 Items gebildet werden. Leider ist der Versuch, diese Auswertung in einen PHP-Code zu integrieren bislang gescheitert. Über eine Rückmeldung oder Hinweise würde ich mich freuen. Vielen Dank im Voraus!

Folgender Code wurde dafür erstellt:

//PT_01 +++++++++++++++++++++++++++++++++++++
if (value('PT_01') == -9) {
$num1 = "NA";
}
else
{
$num1 = value('PT_01');
$num1 = (int)$num1;
}

//PT_01 +++++++++++++++++++++++++++++++++++++
if (value('PT_01') == 1) {
$num1 = 0;
}
else
{
$num1 = value('PT_01');
$num1 = (int)$num1;
}

//PT_01 +++++++++++++++++++++++++++++++++++++
if (value('PT_01') == 2) {
$num1 = 0;
}
else
{
$num1 = value('PT_01');
$num1 = (int)$num1;
}

//PT_01 +++++++++++++++++++++++++++++++++++++
if (value('PT_01') == 3) {
$num1 = 1;
}
else
{
$num1 = value('PT_01');
$num1 = (int)$num1;
}

//PT_01 +++++++++++++++++++++++++++++++++++++
if (value('PT_01') == 4) {
$num1 = 1;
}
else
{
$num1 = value('PT_01');
$num1 = (int)$num1;
}

//PT_02 +++++++++++++++++++++++++++++++++++++
if (value('PT_02') == -9) {
$num2 = "NA";
}
else
{
$num2 = value('PT_02');
$num2 = (int)$num2;
}

//PT_02 +++++++++++++++++++++++++++++++++++++
if (value('PT_02') == 1) {
$num2 = 0;
}
else
{
$num2 = value('PT_02');
$num2 = (int)$num2;
}

//PT_02 +++++++++++++++++++++++++++++++++++++
if (value('PT_02') == 2) {
$num2 = 0;
}
else
{
$num2 = value('PT_02');
$num2 = (int)$num2;
}

//PT_02 +++++++++++++++++++++++++++++++++++++
if (value('PT_02') == 3) {
$num2 = 1;
}
else
{
$num2 = value('PT_02');
$num2 = (int)$num2;
}

//PT_02 +++++++++++++++++++++++++++++++++++++
if (value('PT_02') == 4) {
$num2 = 1;
}
else
{
$num2 = value('PT_02');
$num2 = (int)$num2;
}

//PT_03 +++++++++++++++++++++++++++++++++++++
if (value('PT_03') == -9) {
$num3 = "NA";
}
else
{
$num3 = value('PT_03');
$num3 = (int)$num3;
}

//PT_03 +++++++++++++++++++++++++++++++++++++
if (value('PT_03') == 1) {
$num3 = 0;
}
else
{
$num3 = value('PT_03');
$num3 = (int)$num3;
}

//PT_03 +++++++++++++++++++++++++++++++++++++
if (value('PT_03') == 2) {
$num3 = 0;
}
else
{
$num3 = value('PT_03');
$num3 = (int)$num3;
}

//PT_03 +++++++++++++++++++++++++++++++++++++
if (value('PT_03') == 3) {
$num3 = 1;
}
else
{
$num3 = value('PT_03');
$num3 = (int)$num3;
}

//PT_03 +++++++++++++++++++++++++++++++++++++
if (value('PT_03') == 4) {
$num3 = 1;
}
else
{
$num3 = value('PT_03');
$num3 = (int)$num3;
}

//PT_04 +++++++++++++++++++++++++++++++++++++
if (value('PT_04') == -9) {
$num4 = "NA";
}
else
{
$num4 = value('PT_04');
$num4 = (int)$num4;
}

//PT_04 +++++++++++++++++++++++++++++++++++++
if (value('PT_04') == 1) {
$num4 = 0;
}
else
{
$num4 = value('PT_04');
$num4 = (int)$num4;
}

//PT_04 +++++++++++++++++++++++++++++++++++++
if (value('PT_04') == 2) {
$num4 = 0;
}
else
{
$num4 = value('PT_04');
$num4 = (int)$num4;
}

//PT_04 +++++++++++++++++++++++++++++++++++++
if (value('PT_04') == 3) {
$num4 = 1;
}
else
{
$num4 = value('PT_04');
$num4 = (int)$num4;
}

//PT_04 +++++++++++++++++++++++++++++++++++++
if (value('PT_04') == 4) {
$num4 = 1;
}
else
{
$num4 = value('PT_04');
$num4 = (int)$num4;
}

//PT_05 +++++++++++++++++++++++++++++++++++++
if (value('PT_05') == -9) {
$num5 = "NA";
}
else
{
$num5 = value('PT_05');
$num5 = (int)$num5;
}

//PT_05 +++++++++++++++++++++++++++++++++++++
if (value('PT_05') == 1) {
$num5 = 0;
}
else
{
$num5 = value('PT_05');
$num5 = (int)$num5;
}

//PT_05 +++++++++++++++++++++++++++++++++++++
if (value('PT_05') == 2) {
$num5 = 0;
}
else
{
$num5 = value('PT_05');
$num5 = (int)$num5;
}

//PT_05 +++++++++++++++++++++++++++++++++++++
if (value('PT_05') == 3) {
$num5 = 1;
}
else
{
$num5 = value('PT_05');
$num5 = (int)$num5;
}

//PT_05 +++++++++++++++++++++++++++++++++++++
if (value('PT_05') == 4) {
$num5 = 1;
}
else
{
$num5 = value('PT_05');
$num5 = (int)$num5;
}

//PT_06 +++++++++++++++++++++++++++++++++++++
if (value('PT_06') == -9) {
$num6 = "NA";
}
else
{
$num6 = value('PT_06');
$num6 = (int)$num6;
}

//PT_06 +++++++++++++++++++++++++++++++++++++
if (value('PT_06') == 1) {
$num6 = 0;
}
else
{
$num6 = value('PT_06');
$num6 = (int)$num6;
}

//PT_06 +++++++++++++++++++++++++++++++++++++
if (value('PT_06') == 2) {
$num15 = 0;
}
else
{
$num15 = value('PT_06');
$num15 = (int)$num15;
}

//PT_06 +++++++++++++++++++++++++++++++++++++
if (value('PT_06') == 3) {
$num6 = 1;
}
else
{
$num6 = value('PT_06');
$num6 = (int)$num6;
}

//PT_06 +++++++++++++++++++++++++++++++++++++
if (value('PT_06') == 4) {
$num15 = 1;
}
else
{
$num15 = value('PT_06');
$num15 = (int)$num15;
}

//PT_07 +++++++++++++++++++++++++++++++++++++
if (value('PT_07') == -9) {
$num7 = "NA";
}
else
{
$num7 = value('PT_07');
$num7 = (int)$num7;
}

//PT_07 +++++++++++++++++++++++++++++++++++++
if (value('PT_07') == 1) {
$num7 = 0;
}
else
{
$num7 = value('PT_07');
$num7 = (int)$num7;
}

//PT_07 +++++++++++++++++++++++++++++++++++++
if (value('PT_07') == 2) {
$num7 = 0;
}
else
{
$num7 = value('PT_07');
$num7 = (int)$num7;
}

//PT_07 +++++++++++++++++++++++++++++++++++++
if (value('PT_07') == 3) {
$num7 = 1;
}
else
{
$num7 = value('PT_07');
$num7 = (int)$num7;
}

//PT_07 +++++++++++++++++++++++++++++++++++++
if (value('PT_07') == 4) {
$num7 = 1;
}
else
{
$num7 = value('PT_07');
$num7 = (int)$num7;
}

//Auswertung ####################################
//Gesamtauswertung:
$ergebnis2 = $num1 + $num2 + $num3 + $num4 + $num5 + $num6 + $num7;

//Gesamtergebnis (Mindestens: Punkte / Höchstens: Punkte) +++++++++++++++++++++++++

1 Answer

0 votes
by SoSci Survey (327k points)
edited by SoSci Survey
 
Best answer

Erstmal sollten Sie das nicht kopieren, sondern eine FOR-Schleife verwenden:

foreach (valueList('PT07', 'all') as $item => $value) {
   ....
}

Für die Umkodierung wäre ein Array m.E. wesentlich eleganter als ein IF/ELSE:

$codes = [
  1 => 0,
  2 => 0,
  3 => 1,
  4 => 1
];

Ein NA gibt es nicht, aber ich vermute, Sie wollen den Wert aus der Summe entfernen, wenn nicht beantwortet? Dann wäre das wie ein 0. Oder wollen Sie gar kein Ergebnis ausgeben? Oder vielleicht doch lieber ein Mittel wert?

So würde es aussehen, wenn man ihn wie eine 0 behandelt:

if (array_key_exists($value, $codes)) {
    $summe += $codes[$value];
}

Das ganze noch zusammenbauen:

$summe = 0;
$codes = [
  1 => 0,
  2 => 0,
  3 => 1,
  4 => 1
];
foreach (valueList('PT07', 'all') as $item => $value) {
    if (array_key_exists($value, $codes)) {
        $summe += $codes[$value];
    }
}
html('<p>Ihre Summe ist: '.$summe.'</p>');

So (evt. mit kleinen Anpassungen) sollte es funktionieren.

by s134654 (135 points)
Vielen Dank für die Rückmeldung und den Tipp! Ich habe versucht, den Code einmal in die Auswertung zu implementieren, erhalte aber leider anschließend die folgende Fehlermeldung:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.
PHP-Code

008   2 => 0,
009   3 => 1,
010   4 => 1
011 ];
012 for (valueList('PT', 'all') as $item => $value) {
013     if (array_key_exists($value, $codes)) {
014         $summe += $codes[$value];
015     }


Leider erschließt sich mir nicht wirklich, wo der Fehler liegt.
by s134654 (135 points)
Genau, der Wert bei Nichtbeantwortung der jeweiligen Frage soll nicht mit in die Auswertung fließen.
by SoSci Survey (327k points)
Oh, ich hatte oben ein for statt foreach geschrieben.

falsch:
for (valueList('PT07', 'all') as $item => $value)

richtig:
foreach (valueList('PT07', 'all') as $item => $value)

Ich ändere das oben in der Antwort gleich noch.

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

...