0 votes
in SoSci Survey (dt.) by s183638 (125 points)
edited by s183638

Hallo,

ich habe DropDown Fragen die mi JA oder NEIN beantwortet werden können. Hier wird via Javascript geprüft, was angeklikt wurde:

<script type="text/javascript">

function toogle() {
  var dropdown = document.getElementById("KO13");  // Das Eingabefeld der Frage 
  var frage = document.getElementById("KO14_qst");  // Die Frage , die ein-/auszublenden ist
  if (dropdown.value == "1") {  // Hier den Wert (Antwortcode) eintragen, bei dem das zweite Dropdown eingeblendet werden soll
    frage.style.display = "";
  } 
    else if (dropdown.value =="-9") {
        return;
    }
    else {
    frage.style.display = "none";
  }
}

var dropdown = document.getElementById("KO13");  // Das Eingabefeld der Frage 
SoSciTools.attachEvent(dropdown, "change", toogle);  // Bei einer Änderung der Auswahl die Anzeige anpassen
SoSciTools.attachEvent(dropdown, "click", toogle);  // Auch beim Klick prüfen - sonst wird die Änderung evtl. erst beim Verlassen des Dropdowns wirksam
toogle();  // Und zu Beginn auch die korrekte Anzeige sicherstellen

</script>

Die Folgefrage wird ebenfalls mit Javascript versteckt:

<script type="text/javascript">

function hide() {
    var q = document.getElementById("KO14_qst");
    q.style.display = "none";
}
hide();
</script>

Jetzt soll geprüft werden ob eine Antwort gegeben wurde:

$missing01 = getItems('KO14', '==', 1);
$missing02 = getItems('KO06', '==', 1);
$missing03 = getItems('KO10', '==', 1);
$missing04 = getItems('KO12', '==', 1);
$missing05 = getItems('KO08', '==', 1);
$missing = array_intersect($missing01, $missing02, $missing03, $missing04, $missing05);
 
// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('missing', $item));
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('CO03');
}

statt.

Leider kommt man auf die nächste Fragebogenseite, wenn man JA angeklickt hat ABER kein Wert in der Skala eingetragen wurde.

Wo liegt das Problem? Ich darf die Frage nicht mit ja beantworten können, aber keinen Wert übermitteln dürfen.

EDIT 04.10.

EDIT 5.4.2021

by SoSci Survey (305k points)
Den PHP-Code haben Sie auf der folgeseite platziert, korrekt?

Was wird im Debug-Modus denn angezeigt, wenn Sie unter $missing noch ergänzen:

debug($missing);

Das mit dem "Ja" haben Sie hier noch gar nicht abgefragt, aber das kommt wahrscheinlich noch?

Was sind KO14 et al. denn für Fragetypen?
by s183638 (125 points)
Der Code wurde auf der Folgeseite eingefügt.

Die Fragettypen sind "Skala (extrema beschriftet).

"Debug-Information für $missing:
Array (ohne Elemente)"

" Das mit dem "Ja" haben Sie hier noch gar nicht abgefragt, aber das kommt wahrscheinlich noch?" Ich dachte es wäre :

if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('missing', $item));

Mir fehtl der Code das er auf das "Ja" prüfen soll. Diese letzte Hürde muss ich für die Fertigsttellung des Fragebogens noch überwinden.

als Prüfung
by SoSci Survey (305k points)
> "Debug-Information für $missing:
> Array (ohne Elemente)"

Offenbar haben Sie dann in keiner der Skalen den ersten Skalenpunkt angekreuzt. Denn das zählen Sie aktuell mit dem '==', 1

Wenn Sie auf nicht ausgefüllte Skalenitems prüfen möchten, versuchen Sie es bitte einmal mit 'missing'

getItems('KO14', 'missing');
by s183638 (125 points)
getItems('KO14', 'missing'); funktioniert leider auch nicht.
by SoSci Survey (305k points)
Bitte verwenden Sie einmal folgenden PHP-Code:

$missing01 = getItems('KO14', 'missing');
debug($missing01);

Dann starten Sie bitte im Debug-Modus, füllen Sie einen Teil der Items der Skala KO14 aus, einen Teil nicht, und klicken Sie auf weiter. Posten Sie bitte die Debug-Information, welche dann angezeigt wird.
by s183638 (125 points)
edited by s183638
Debug-Information für $missing01:
01
by SoSci Survey (305k points)
Gut, da wird also etwas gefunden (das erste Item in dem Fall).

Als nächstes tauschen Sie bitte array_intersect() gegen array_merge() aus, denn ich denke, Sie möchten eigentlich nicht prüfen, ob in allen Fragen dasselbe item fehlt (Schnittmenge), sondern, ob in minstens einer Frage min. ein Item unbeantwortet blieb (Vereinigungsmenge).
by s183638 (125 points)
Debug-Information für $missing:
0 1, 1 1, 2 1, 3 1, 4 1

Dennoch geht er auf die nächste Seite, auch wenn kein Wert eingetragen wurde.


$missing01 = getItems('KO14', 'missing');
$missing02 = getItems('KO06', 'missing');
$missing03 = getItems('KO10', 'missing');
$missing04 = getItems('KO12', 'missing');
$missing05 = getItems('KO08', 'missing');
$missing =  array_merge($missing01, $missing02, $missing03, $missing04, $missing05);
 debug($missing);
if ((count($missing) = 0) and (count($missing) < count($missing))) {

repeatPage('CO03');
}
hier gibt es dann einen PHP Fehler
by SoSci Survey (305k points)
> hier gibt es dann einen PHP Fehler

count($missing) = 0

... ist nicht möglich, denn das einfache Gleichheitszeichen versucht, den Wert 0 der Anzahl zuzuweisen. Und der zweite Teil der Bedingung muss immer "false" liefern, daher kann der Filter nicht reagieren.

Ich denke, Sie meinen das hier:

if (!empty($missing)) {
  repeatPage('CO03');
}
by s183638 (125 points)
er lässt mich nun nicht weiter, trotz ausgewähltem Skalenwert. Bitte siehe EDIT im ersten POST mit dem Datum 4.10.
by SoSci Survey (305k points)
Ich sehe in Ihrem Original-Post einen frischen Screenshot (danke), darin aber nur eine Skalenfrage. In Ihrem PHP-Code prüfen Sie ja, ob in irgend einer Skalenbatterien (K=14, KO06, KO10, KO12 oder KO08) irgend ein Item fehlt. Wenn Sie diese Fragen nicht alle auf der Seite haben: Um welche Frage(n) geht es denn?
by s183638 (125 points)
Ich habe noch einen Screenshot angefügt. die Skalenfragen tauchen auf (versteckt via JS), sobald die Antwort "Ja" ausgewählt worden ist. Bei "Nein" bleiben sie versteckt.
by SoSci Survey (305k points)
> Bei "Nein" bleiben sie versteckt.

In dem Fall können sie aber nicht beantwortet werden und liefern deshalb zwangsläufig fehlende Items.

Sie müssten also in der Antwortprüfung vorsehen, das das in Ordnugn ist, solange "Nein" ausgewählt war. Was sind es denn exemplarisch für Variablen, die zu KO14 und KO06 gehören?
by s183638 (125 points)
KO14 = KO_62
KO06 = KO_72
by SoSci Survey (305k points)
KO_62 scheint mir kein gültiger Variablenname zu sein. Handelt es sich dabei um eine Auswahlfrage oder ein Skalenitem oder etwas ganz anderes? Wenn Sie den entsprechenden Auszug aus Ihrer Variablen-Übersicht posten, kann ich mir besser vorstellen, was SIe da haben - und dann kann ich auch mit konkretem Code aushelfen.

Im Moment kann ich nur abstrakt erklären, dass Sie das !empty() vom jeweiligen $missing-Array mit einer Abfrage koppeln müssen, ob nicht "Nein" ausgewählt wurde.
by s183638 (125 points)
[KO02] !Skala (Extrema beschriftet)

KO

"Im Folgenden finden Sie einige Aussagen zu möglichen Rahmenbedingungen, unter denen Sie studieren. Geben Sie..."

KO1 [01] Im Vergleich zu anderen Lebensbereichen widme ich dem Studium weniger Zeit.
KO2 [02] Es gab in meinem bisherigen Studium Phasen, in der ich praktisch gar nicht studiert habe.
KO3 [03] Auch wenn es sich um ein Vollzeitstudium handelt, studiere ich faktisch in Teilzeit.
KO4 [04] Ich investiere viel Energie in mein Studium.
KO5 [05] Ich melde mich zwar für Veranstaltungen an, nehme dann aber nur unregelmäßig teil
1 = Trifft nicht zu [1]
2 = [2]
3 = [3]
4 = [4]
5 = Trifft zu [5]
-9 = nicht beantwortet

[KO13] !Dropdown-Auswahl

Erwerbstätigkeit

"Ich gehe einer nicht studiumsbezogenen Erwerbstätigkeit nach."

KO_61 Erwerbstätigkeit
1 = Ja
2 = Nein
-9 = nicht beantwortet

[KO14] Skala (Extrema beschriftet)

KO62

KO_62 [01] Meine Erwerbstätigkeit ist dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit abschließen konnte.
1 = Trifft nicht zu [1]
2 = [2]
3 = [3]
4 = [4]
5 = Trifft zu [5]
-9 = nicht beantwortet

[KO05] Dropdown-Auswahl

Angehörige

"Ich habe Kinder zu betreuen oder Angehörige zu pflegen."

KO_71 Angehörige
1 = Ja
2 = Nein
-9 = nicht beantwortet

[KO06] Skala (Extrema beschriftet)

KO72

"Meine familiären Verpflichtungen sind dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienz..."

KO_72 [01] Meine familiären Verpflichtungen sind dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit abschließen konnte.
1 = Trifft nicht zu [1]
2 = [2]
3 = [3]
4 = [4]
5 = Trifft zu [5]
-9 = nicht beantwortet

[KO09] Dropdown-Auswahl

Auslandsaufenthalt

"Ich hatte während meines Studiums einen Auslandsaufenthalt."

KO_81 Auslandsaufenthalt
1 = Ja
2 = Nein
-9 = nicht beantwortet

[KO10] Skala (Extrema beschriftet)

KO82

"Das/ die Auslandssemester sind dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit abs..."

KO_82 [01] Das/ die Auslandssemester sind dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit abschließen konnte.
1 = Trifft nicht zu [1]
2 = [2]
3 = [3]
4 = [4]
5 = Trifft zu [5]
-9 = nicht beantwortet

[KO11] Dropdown-Auswahl

Krankheit

"Ich war während meines Studiums längere Zeit krank oder psychisch stark belastet."

KO_91 Krankheit
1 = Ja
2 = Nein
-9 = nicht beantwortet

[KO12] Skala (Extrema beschriftet)

KO92

"Längere Krankheitsphasen sind dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit absc..."

KO_92 [01] Längere Krankheitsphasen sind dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit abschließen konnte.
1 = Trifft nicht zu [1]
2 = [2]
3 = [3]
4 = [4]
5 = Trifft zu [5]
-9 = nicht beantwortet

[KO07] Dropdown-Auswahl

Studienschwerpunkt

"Ich habe während des Studiums das Fach oder den Studienschwerpunkt gewechselt."

KO_101 Studienschwerpunkt
1 = Ja
2 = Nein
-9 = nicht beantwortet

[KO08] Skala (Extrema beschriftet)

KO102

"Ein Fach- oder Schwerpunktwechsel ist dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienz..."

KO_102 [01] Ein Fach- oder Schwerpunktwechsel ist dafür verantwortlich, dass ich mein Studium nicht in der Regelstudienzeit abschließen konnte.
1 = Trifft nicht zu [1]
2 = [2]
3 = [3]
4 = [4]
5 = Trifft zu [5]
-9 = nicht beantwortet
by SoSci Survey (305k points)
Okay, wenn ich es korrekt verstehe, gibt es eine Dropdown-Auswahl KO13, deren Variable aber nach KO_61 (1=Ja) umbenannt wurde. Und nur wenn dort "Ja" ausgewählt wurde, sollen die Antworten der Skala KO14 geprüft werden, deren eizige Variablen nach KO_62 umbenanntn wurde. Ist das korrekt?

Das würde als PHP-Code wie folgt aussehen:

$missing62 = (value('KO_61') == 1) && (value('KO_62') < 1);

Das kann man auch über mehrere solche Duos kombinieren:

$missingAny = (
  ((value('KO_61') == 1) && (value('KO_62') < 1)) ||
  ((value('KO_71') == 1) && (value('KO_72') < 1))
);

Haben Sie denn auch Fragen, wo Sie die Skalenbatterien mit mehreren Items verwenden? Nur da brauchen wir das !empty(getItems()).
by s183638 (125 points)
Ihre Annahme ist korrekt. Wird bei KO13 "ja" ausgewählt, klappt die Skalenfrage KO14 auf, die geprüft werden soll.

Dieses Procedere wiederholt sich auch bei nachfolgenden DropDown Auswahlen auf der Seite.

Auf den Skalen selbst, kann man nur einen Punkt setzten. Jede Skala soll aber wie erwähnt geprüft werden.
by SoSci Survey (305k points)
Gut, dann hier noch ein wenig Modifikation für den Code, damit es auch mit dem Markieren klappt. In dem Array oben müssen Sie natürlich noch eine Zeile pro Frage-Pärchen ergänzen.

$pairs = [
  ['KO_61', 'KO_62'],
  ['KO_71', 'KO_72'],
];

$missing = [];
foreach ($pairs as $pair) {
  $filter = $pair[0];
  $question = $pair[1];

  if ((value($filter) == 1) && (value($question) < 1)) {
    $missing[] = $question;
  }
}

// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('missing', $item));
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('CO03');
}

Ich bin nicht 100%ig sicher, ob die markFail()-Funktion mit den Variablen-Aliases zurecht kommt. Falls nicht, müssten wir in der Array-Liste oben noch die Frage-Kennungen ergänzen und in $missing schreiben.
by s183638 (125 points)
Die Prüfung klappt!!! Nur die MarkFail Funktion wie sie vermutet haben nicht. Ansonsten tip-top!
by SoSci Survey (305k points)
Ersetzen Sie die markFail()-Zeile bitte mal wie folgt:

markFail($item);

Wenn das nicht hilft, habe ich unten als Antwort einen Code gepostet, der die Frage-Kennung explizit angibt.

1 Answer

+1 vote
by SoSci Survey (305k points)

Die Prüfung klappt!!! Nur die MarkFail Funktion wie sie vermutet haben nicht. Ansonsten tip-top!

Ales klar, dann kümmern wir jetzt noch um die Markierung der Fragen. Versuchen Sie es mal auf dieser Basis:

$pairs = [
  ['KO_61', 'KO_62', 'KO14'],
  ['KO_71', 'KO_72', 'KO06'],
];

$missing = [];
foreach ($pairs as $pair) {
  $filter = $pair[0];
  $varID = $pair[1];
  $question = $pair[2];

  if ((value($filter) == 1) && (value($varID) < 1)) {
    $missing[] = $question;
  }
}

// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $question) {
    markFail($question);
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('CO03');
}
by s183638 (125 points)
Für die Funktion markFail() wurden nicht ausreichend Argumente angegeben, 1 Argumente sind zwingend erforderlich. Weitere Details finden Sie in der Anleitung zur Funktion.


Fehler im Fragebogen (Seite 5)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
by SoSci Survey (305k points)
Bitte ergänzen Sie folgendes debug()

if (count($missing) > 0) {
  debug($missing);

Was wird denn dann angezeigt?
by s183638 (125 points)
Er schickt mir ebenfalls einen PHP Error mit :

015   $question = $pair[2];

in Rot markiert.

Debug-Information für $missing:
0
by SoSci Survey (305k points)
Sie haben im Array ganz oben schon die dritte "Spalte" ergänzt?
by s183638 (125 points)
edited by s183638
Es funktioniert.

Nun habe ich ein anderes Problem. Klicke ich beim Erstversuch ja an, mache keine Angabe in der Skala, klicke dann aber nach neu Laden Nein, wird der vorherige Wert "Ja" im Datensatz gespeichert. Gibt es die Möglichkeit die Daten erst nach erfolgreicher Prüfung bei "Ja" und einem Skalenwert in den Datensatz zu schreiben?
by SoSci Survey (305k points)
Gespeichert wird immer das, was beim "Weiter" angeklickt ist.

Wenn der Nutzer das auf "Nein" ändert und dann "Weiter" klickt, ist dort auch ein "Nein" gespeichert. Eventuell aber auch was immer auf der Skala angewählt wurde.

Wenn Sie risikoaffin sind, können Sie den Wert bei einem "Nein" mittels put() aus der anderen Variable löschen. Also im FOREACH

  if (value($filter) == 2) {
    put($varID, false, true);
  }

Alternativ können Sie das einfach bei der Auswertung beachten.

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

...