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

0 votes

Ich möchte gerne, dass die Probanden nach dem Ausfüllen des Fragebogens eine persönliche Rückmeldung bekommen. Dies funktioniert auch, jedoch nicht ganz optimal. Folgenden Code habe ich verwendet:

text('result', array(
  '%Fitness%' => $Fitness*(-1),
  '%Entspannung%' => $Entspannung*(-1),
  '%Zeit%' => $Zeit*(-1),
  '%Geistig%' => $Geistig*(-1),
  '%Finanzen%' => $Finanzen*(-1),
  '%Freunde%' => $Freunde*(-1),
  '%Familie%' => $Familie*(-1),
));

if ($K001 = 1) {
  text('resultKinder', array(
  '%Kindert%' => 'Kinder',    
  '%Kinder%' => $Kinder*(-1)
  ));
}

if ($P001 = 1) {
  text('resultPartner', array(
  '%Partnerschaftt%' => 'Partnerschaft',    
  '%Partnerschaft%' => $Partnerschaft*(-1)
  ));
}

if ($B102 = 1) {
  text('resultKarriere', array(
  '%Karrieret%' => 'Karriere',    
  '%Karriere%' => $Karriere*(-1)
  ));
}

if ($LS01 = 1) {
  text('resultLeistung', array(
    '%SportlichesTrainingt%' => 'Sportliches Training',
    '%Mentalt%' => 'Mentale Stärke',
    '%SportlichesTraining%' => $SportlichesTraining*(-1),
    '%Mental%' => $Mental*(-1)
  ));
}

Dann ergibt sich zum Beispiel folgender Proband:

Meine Frage ist nun, warum für Kinder, Partnerschaft, Sportliches Training und Mental eine Null angezeigt wird obwohl die if-Bedingung nicht zutrifft. Z.B. für Kinder K001 ist nicht = 1 sondern gleich 2. Karriere wird richtig angezeigt, da B102 = 1 ist. Gut wäre es, dass wenn die if Bedingung nicht zu trifft auch nichts angezeigt wird. Noch bessere wäre es für mich dann, wenn alles in einer Tabelle gezeigt werden könnte, also wenn die Werte der If Bedingungen in die erste Tabelle (Fitness, Entspannung...) integriert werden könnten.
Meine letzte Frage ist, warum wenn ich 0 mit -1 multipliziere -0 angezeigt wird und nicht Null.
Vielen Dank für eure Hilfe. Ihr helft mir sehr.

in SoSci Survey (dt.) by s024154 (130 points)

2 Answers

0 votes
if ($K001 = 1) {

Das kann nicht funkionieren, aber testen Sie einmal

if (value('K001') == 1) {

Mehr dazu s. Filterfragen und Filter

by SoSci Survey (82.1k points)
Vielen Dank für den Tipp. Hat super funktioniert. Gibt es auch noch eine Lösung, wie ich die Tabellen der If-Bedingung z.B. resultKinder in die result Tabelle integriere? Gibt es eine Lösung, dass wenn ich 0 mit -1 multipliziere, dass 0 herauskommt und nicht -0? Vielen Dank dafür. Super Start in den Tag euch allen.
Die erste Frage verstehe ich leider nicht - das "resultKinder" wird ja bereits per Platzhalter in die Tabelle aufgenommen, soweit ich sehe?

> Gibt es eine Lösung, dass wenn ich 0 mit -1 multipliziere, dass 0 herauskommt und nicht -0?

Vermutlich ist das -0 eine gerundete Anzeige für -0,00xyz? Für eine akkurate Antwort müsste ich wissen, woher die Werte in den Variablen genau kommen.

Prinzipiell können Sie z.B: etwas wie folgt verwenden:

`'%Fitness%' => ((abs($Fitness) < 0.01) ? 0 : -$Fitness),`

Das ist eine verkürzte IF-Schreibweise. Sie können (wie hier zu sehen) einfach `-$Fitness` schreiben statt `$Fitness*(-1)`.
Da ich hier keinen Code spezifizieren kann habe ich eine Antwort erstellt auf meine Frage.
0 votes

Vielen Dank, das mit den -0 hat so geklappt wie Sie es beschrieben haben. Das andere Problem, das ich leider undeutlich ausgedrückt funktioniert leider noch nicht.

Ich habe eine Tabelle bzw. einen Textbaustein gemacht, welcher die Fragen beinhaltet die jeder Proband ausfüllen muss (siehe Grafik).

<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <th>Bereich</th>
    <th>Wert</th>
  </tr>
  <tr>
    <td>Fitness</td>
    <td>%Fitness%</td>
  </tr>
  <tr>
    <td>Entspannung</td>
    <td>%Entspannung%</td>
  </tr>
  <tr>
    <td>Zeit</td>
    <td>%Zeit%</td>
  </tr>
  <tr>
    <td>Geistiges Wohlbefinden</td>
    <td>%Geistig%</td>
  </tr>
  <tr>
    <td>Finanzen</td>
    <td>%Finanzen%</td>
  </tr>
  <tr>
    <td>Freunde</td>
    <td>%Freunde%</td>
  </tr>
  <tr>
    <td>Familie</td>
    <td>%Familie%</td>
  </tr>
</table>

Für die Bereiche Kinder (resultKinder ist ein extra Textbaustein) habe ich einen extra Textbaustein kreiiert. Sowie auch für Partnerschaft usw., as nicht jeder Proband ausfüllen muss.

<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <th>Bereich</th>
    <th>Wert</th>
  </tr>  
  <tr>
    <td>%Kindert               %</td>
    <td>%Kinder%</td>
  </tr>
</table>

Meine Frage ist nun, ob ich die variablen Ergebnisse (z.B. Kinder uns Partnerschaft...) mit in die obere Tabelle (welche Fintess, Entspannung usw.) integrieren kann und etwas ausgefüllt wird sollte beiz.B: Kinder folgendes zutreffen if (value('K001') == 1). Entsprechend auch für Partnerschaft usw. Vielen Dank für Ihre Hilfe.

by s024154 (130 points)
Sie möchten den zweiten Textbaustein dynamisch in die erste Tabelle aufnehmen - je nach Filterbedingung, habe ich das korrekt verstanden?

Sehen Sie sich dafür bitte einmal getTextElement() an. Dieses können Sie in Verbindung mit einem Filter und replace() verwenden.
Genau das haben Sie richtig verstanden. Das ist mein Ziel. Ich versuche einmal die Tipps von Ihnen umzusetzen. Hoffe ich bekomme das so hin.
Ich habe folgendes versucht, hat aber leider nicht geklappt. Habe in das html Textspript result einen Platzhalter %Kinderm% eingebaut und wollte den entweder durch etwas leers, was kein Element enthält oder durch das html Textfeld resultKinder ersetzen.

if (value('K001') == 1) {
  $Kind = getTextElement('resultKinder', array(
  '%Kindert%' => 'Kinder                ',    
  '%Kinder%' => ((abs($Kinder) < 0.01) ? 0 : -$Kinder)
  ));
} else {
  $Kind = getTextElement('leer', 'block');
}
replace('%Kinderm%', $Kind);
text('result');
Die Funktion `getTextElement()` kann nicht mit Platzhaltern umgehen. Wo haben Sie den Platzhalter `%Kinderm%` denn verwendet und in welcher Form?

Wenn es nur darum geht, den Text (unter dem anderen Zeug) anzuzeigen, geht es auch einfacher:

if (value('K001') == 1) {
  show('resultKinder', array(
    '%Kindert%' => 'Kinder                ',    
    '%Kinder%' => ((abs($Kinder) < 0.01) ? 0 : -$Kinder)
  ));
}
...