0 votes
in SoSci Survey (dt.) by s143454 (140 points)
edited by SoSci Survey

Hallo,

ich habe einen Fragebgen erstellt und diesen mehrmals dupliziert. Einer der Fragebögen geht an einen Panelanbieter, weshalb entsprechende Redirects und Screenouts einbaut worden sind. Der Befragungslink wurde um den entsprechenden Paramter erweitert.

Füllt man nur den Fragebogen aus ist die erste Filterfrage Position wie folgt codiert: wer nicht Führungkraft oder Fachkraft ist, erhält einen Screenout. Zusätzlich dürfen nicht mehr als 700 Fachkräfte (Quotafull) an der Befagung teilnehmen.

Unanbhängig davon, was man auswählt, erhält man nun folgende Fehlermeldung auf der Seite des Panelanbieters:

Sehr geehrter Teilnehmer,

leider ist ein Fehler aufgetreten.

Vermutlich fehlt hier der Beginn der Befragung.

Bitte schließen Sie Ihr Browserfenster.

Allerdings ist die Befragung aktiv? Was bedeutet fehlender Beginn der Befragung?

Besten Dank und viele Grüße

1 Answer

0 votes
by SoSci Survey (331k points)

Sehr geehrter Teilnehmer,
leider ist ein Fehler aufgetreten.
Vermutlich fehlt hier der Beginn der Befragung.

Vermutlich haben Sie den Fragebogen selbst gestartet und dabei keine Teilnahme-ID (diese generiert der Panel-Anbieter) verwendet? In dem Fall weiß der Server des Panel-Anbieters nicht, was er mit Ihrer Anfrage anfangen soll (Sie sind ja offensichtlich kein registrierter Panelist) und zeigt daher eine Fehlermeldung.

Diese Fehlermeldung ist also erstmal kein Hinweis auf einen Fehler.

Wir haben gerade gestern übrigens die Dokumentation zur Panel-Anbindung grundlich erweitert und die Abläufe nochmal klarer dargestellt. Just in case...

by s143454 (140 points)
Vielen Dank für die Antwort. Ich hatte die Vermutung, dass es am Panelanbieter liegt, dieser sagte jedoch es liegt am Tool.

Kann es sein, dass der folgende Code für die Probleme verantwortlich ist:

$quotaPosition = [
  4-5=> 700
 
];

$Position = value('SD08');

$casesPosition = statistic('count', 'SD08', $Position);

if (!array_key_exists($Position, $quotaPosition)) {
redirect('Redirectlink');
}

 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('Quotafulllink');
}

Kann man die Antowrtkategorien 4-5, die zusammen nicht mehr als 700 Fälle betragen dürfen so zusammenfassen?

Beste Grüße
by SoSci Survey (331k points)
> Redirectlink

Der Knackpunkt ist, ob Sie im Redirect-Link korrekt die TIC des Teilnehmers übergeben?

> Kann man die Antowrtkategorien 4-5, die zusammen nicht mehr als 700 Fälle betragen dürfen so zusammenfassen?

Kann man, dafür müssen Sie aber sowohl vorne auch als hinten im Fragebogen die Variable in eine interne Variable umkodieren. Anschließend können Sie die interne Variable zählen.
by s143454 (140 points)
Vielen Danke!

Ohne den Code für die Quotierung wird die ID korrekt übergeben. Ich habe eine interne Variable angelegt:

$Fachkräfte = statistic('count', 'SD08', 4) + statistic('count', 'SD08', 5);
put('AB04_01', $Fachkräfte);

$quotaPosition = [
  1 => 700
 
];

$Position = value('AB04');

$casesPosition = statistic('count', 'AB04', $Position);

if (!array_key_exists($Position, $quotaPosition)) {
redirect('screenout');
}

 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('quotafull');
}

Wir diese so korrekt gezählt?  Was ist mit "sowohl vorne als auch hinten im Fragebogen" gemein?
by SoSci Survey (331k points)
> redirect('screenout');

Das "Screenout" steht hier symbolisch für den wirkliche Screenout-Link? Wenn ja, wie endet der wirkliche Link? Dort muss ja die TIC rein.
by s143454 (140 points)
hier einmal der Code mit korrekten Links:

$quotaPosition = [
  4-5=> 700
 
];

$Position = value('SD08');

$casesPosition = statistic('count', 'SD08', $Position);

if (!array_key_exists($Position, $quotaPosition)) {
redirect('https://www.innofact-umfrage3.de/kim4/screenout_f.php?u=%reference%');
}

 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('https://www.innofact-umfrage3.de/kim4/quotafull_f.php?u=%reference%');
}

$Fachkräfte = statistic('count', 'SD08', 4) + statistic('count', 'SD08', 5);
put('AB04_01', $Fachkräfte);

$quotaPosition = [
  1 => 700
 
];

$Position = value('AB04');

$casesPosition = statistic('count', 'AB04', $Position);

if (!array_key_exists($Position, $quotaPosition)) {
redirect('https://www.innofact-umfrage3.de/kim4/screenout_f.php?u=%reference%');
}

 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('https://www.innofact-umfrage3.de/kim4/quotafull_f.php?u=%reference%');
}
by SoSci Survey (331k points)
edited by SoSci Survey
In Ordnung, das sieht so schlecht nicht aus. Allerdings müsste - wenn der Panel-Anbieter die TIC als r=... übergibt, das auch korrekt beim Screenout ankommen.

Wenn nicht, dann prüfen Sie bitte einmal, mit welchem Link der Fragebogen aufgerufen wird und wohin der Redirect erfolgt.


Wenn das Screenout noch nicht funktioniert, dürfte das an ein paar Probleme mit dem PHP-Code liegen:

$quotaPosition = [
  4-5=> 700
];

4 minus 5 ergibt -1, daher ist dieser Code äquivalent zu

$quotaPosition = [
  -1 => 700
];

Um die Gruppen 4 und 5 zusammenzufassen, kodieren Sie SD08 bitte in eine interne Variable um:

if ((value('SD08') == 4) || (value('SD08') == 5)) {
  put('SD99_01', 4);
} else {
  put('SD99_01', value('SD08'));
}

Für den Quotenqueck verwenden Sie dann die interne Variable (hier im Beispiel SD99_01).


$Fachkräfte = statistic('count', 'SD08', 4) + statistic('count', 'SD08', 5);

PHP erlaubt in Variablennamen keine Umlaute.

Abgesehen davon: Ja, im Prinzip wäre auch das eine Lösung für das Zusammenfassen. Sie müssten nur sicherstellen, dass diese Rechnung nur dann durchgeführt ist, wenn jemand in Gruppe 4 oder 5 ist. Das Umkodieren ist einfacher und transparenter.
by s143454 (140 points)
Hallo und vielen Dank noch einmal für die Hilfe:

Ich verstehe die If-Abfrage nicht ganz:

Um die Gruppen 4 und 5 zusammenzufassen, kodieren Sie SD08 bitte in eine interne Variable um:

if ((value('SD08') == 4) || (value('SD08') == 4)) {
  put('SD99_01', 4);
} else {
  put('SD99_01', value('SD08'));
}

das heißt doch, dass wenn der Wert von SD08 4 oder 4 ist, er in die interne Variable SD99_1 als Wert 4 gesreichert wird, und alle anderen Werte ebenfalls in diese Variable mit ihrem entsprechenden Wert aus SD08 gespeichert werden?

Müssten es nicht so heißen:

Um die Gruppen 4 und 5 zusammenzufassen, kodieren Sie SD08 bitte in eine interne Variable um:

if ((value('SD08') == 4) || (value('SD08') == 5)) {
  put('SD99_01', 4);
}

Würde man dann die Quotierung wie folgt abfragen:


$quotaPosition = [
 count('SD99_01') => 700

Danke und beste Grüße
by SoSci Survey (331k points)
> Ich verstehe die If-Abfrage nicht ganz:

Hierbei handelt es sich um eine Umkodierung. Wenn die Variable SD08 den Wert 4 oder 5 hat (korrigiert oben wie Sie schon vermutet hatten, da stand noch 4), dann wird eine 4 gespeichert, sonst der Originalwert.

> Würde man dann die Quotierung wie folgt abfragen:

Äh, nein, den befehl count() würden Sie gar nicht verwenden. Sie würden ein Array mit den Quoten definieren und dann den Wert aus statistic() mit der Quote vergleichen wie in der Anleitung zur Quotierung beschrieben: https://www.soscisurvey.de/help/doku.php/de:survey:quota

Die Definitin der Quote wäre dann also:

$quotaPosition = [
  4=> 700
];

... denn die 5 wird ja auch zur 4 umkodiert. Und zählen müssten Sie in statistic() dann natürlich die Variable 'SD99_01'.
by s143454 (140 points)
Besten Dank, die Redirects und Quotafulls funktionieren nun. Letzte Frage ist die Fehlermeldung im Fragebogen:

Im PHP-Code trat ein Fehler auf. Rot markiert sind Zeile 1 und 3

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

001 namespace s2survey\questionnaire\environment;
002
003 $Fachkraft = if ((value('SD08') == 4) || (value('SD08') == 5)) {
004   put('AB04_01', 4);
005 } else {
006   put('AB04_01', value('SD08'));

Wo liegt hier das Problem? Die Klammern und Anführungszeichen sind soweit gesetzt...
by SoSci Survey (331k points)
Das if liefert keinen Wert zurück, insofern macht $Fachkraft = if ... wenig Sinn.

Was inhaltlich sinnvol wäre ist:

$Fachkraft = ((value('SD08') == 4) || (value('SD08') == 5));

Dann bekommen Sie eine Bool'sche Variable $Fachkraft, welche Ihnen sagt, ob SD08 den Wert 4 oder 5 hat.

Wenn es Ihnen um das if geht, lassen Sie das $Fachkraft = vorher bitte weg.
by s143454 (140 points)
Ok, also ich habe jetzt folgenden Code angepasst:

if ((value('SD08') == 4) || (value('SD08') == 5)) {
  put('AB04_01', 4);
} else {
  put('AB04_01', value('SD08'));
}


$quotaPosition = [
 4 => 700
 
];

$Position = value('AB04_01');

$casesPosition = statistic('count', 'AB04_01', $Position);

if (!array_key_exists($Position, $quotaPosition)) {
redirect('https://www.innofact-umfrage3.de/kim4/screenout_f.php?u=%reference%');
}

 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('https://www.innofact-umfrage3.de/kim4/quotafull_f.php?u=%reference%');
}

Die Frage SD08 ist Seite 4 des Fragebogens und hat 11 Kategorien. 1-3 sind Führungskräfte und dürfen den weiteren Fragebogen inklusive zusätzlicher Seiten für Führungskräfte beantworten. 4-5 sind Fachrkäfte und drürfen den Fragebogen ausfüllen für alle anderen Kategorien wird der Teilnehmer zu einer Seite mit dem Screenout weitergeleitet.

Der hier oben gezeigte Code ist die Quotierung, die so angelegt ist, dass nicht mehr als 700 Fachkräfte (4 oder 5 in SD08) in die Stichprobe eingehen.

Jetzt ergibt sich das Problem, dass auch Führungskräfte (1-3 in SD08) einen Screenout nach Abschluss von Seite 4 erhalten.

Dier Verfilterung von SD08 ist wie folgt und funktioniert in anderen gleichen Fragebögen ohne Quotierung:

 4 aktive(r) Filter
Filter 1
Wenn eine der folgenden Antwortoption(en) ausgewählt wurde: 6, 7, 8, 9, 10, 11, -9
Dann nach dem Klick auf "Weiter" direkt zur Seite SO springen
Filter 2
Wenn eine der folgenden Antwortoption(en) ausgewählt wurde: 1, 2, 3
Dann Seite(n) jump1 des Fragebogens anzeigen (sonst ausblenden)
Filter 3
Wenn eine der folgenden Antwortoption(en) ausgewählt wurde: 1, 2, 3
Dann Seite(n) jump2 des Fragebogens anzeigen (sonst ausblenden)
Filter 4
Wenn eine der folgenden Antwortoption(en) ausgewählt wurde: 4, 5
Dann Seite(n) jump3 des Fragebogens ausblenden
by SoSci Survey (331k points)
>  1-3 sind Führungskräfte und dürfen den weiteren Fragebogen inklusive zusätzlicher Seiten für Führungskräfte beantworten

Richtig, denn Sie haben in $quotaPosition keine Quoten für diese definiert:

$quotaPosition = [
  1 => 9999,
  2 => 9999,
  3 => 9999,
  4 => 700
];

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

...