0 votes
in SoSci Survey (dt.) by s067656 (155 points)
edited by SoSci Survey

Liebes Sosci Survey Team,

ich habe ein Texteingabefeld (DE10_10) und möchte dort Probanden (ca. 500) die Möglichkeit geben, ihren Code (Zeichenfolge aus Buchstaben und Zahlen) einzugeben. Dabei sind 10 Codes mit einem Gewinn verbunden. Wer einen Code eingibt, der zu den Gewinnercode zählt, der wird auf die entsprechende Seite weitergeleitet. Meine erste Idee wäre folgender Programmcode gewesen. Bin ich auf dem richtigen Weg? Allerdings weiß ich nicht, wie ich die von uns ausgewählten 10 Gewinnercodes einbinden kann. Deswegen die Fragezeichen.

if (value('DE10_01') == ???) {
  goToPage('gewonnen');
}

Ich würde mich über eine Antwort sehr freuen. Danke im Voraus.

LG

1 Answer

0 votes
by SoSci Survey (328k points)
edited by SoSci Survey

Ich hätte zwei Lösungen im Angebot. Eine geht in Ihre Richtung - allerdings würde ich statt 10 IF-Filtern ein Array empfehlen:

$gewinner = array('AB12345', 'BC23456', 'CD34567');
if (in_array(strtoupper(value('DE10_01')), $gewinner)) {
  goToPage('gewonnen');
}

Das strtoupper() sorgt dafür, dass die Groß-/Kleinschreibung keine Probleme bereitet. Und vielleicht wäre statt einem Sprung mit goToPage() die bessere Variante auch, die Infos zum Gewinn direkt mit text() anzuzeigen.

Die andere Lösung würde über die Datenbank für Inhalte funktioniere. Der Code dafür sähe wie folgt aus:

$info = dbGet(strtoupper(value('DE10_01')));
if ($info) {
  goToPage('gewonnen');
}
by s067656 (155 points)
Vielen Dank!!
Ich verstehe den Code und habe ihn auch eingefügt. Allerdings führt das zu folgender Fehlermeldung:


Fehler im Fragebogen: in_array() expects at least 2 parameters, 1 given
Zeile: 4

PHP-Code
001 namespace s2survey\questionnaire\environment;
002
003 $gewinner = array('AB12345', 'BC23456', 'CD34567');
004 if (in_array(strtoupper(value('DE10_01')))) {
005   return 'go:gewonnen';
006 }
007 return 'ok';
by SoSci Survey (328k points)
Oh ja, da fehlte noch das $gewinner im in_array(). Ich habe es oben in meiner Antwort ergänzt.
by s067656 (155 points)
Vielen Dank!
Aber leider funktioniert es noch nicht.
Auch wenn ich einen der angegebenen Beispielcodes im debug-Modus eingebe, springt er einfach auf die nächste Seite
Ich finde den Fehler einfach nicht...
by s067656 (155 points)
Das ist der interne Code. Wenn einer der im Array angegebenen Codes verwendet wird, dann soll das Textfeld erscheinen. Wenn keiner der angegebenen Codes eingegeben wird, dann soll der "Weiter"-Button auf die nächste bzw. letzte Seite weiter leiten. Dort steht dann, dass man leider nichts gewonnen hat.


<?xml version="1.0"?>
<questionnaire>

<!-- Seite 1 -->
<page intID="370">
<php intID="381"><![CDATA[
$gewinner = array('AB12345', 'BC23456', 'CD34567');
if (in_array(strtoupper(value('DE10_01')), $gewinner)) {
  text('gewonnen');
}

]]></php>
<question id="DE10" intID="371" />
</page>


</questionnaire>
by SoSci Survey (328k points)
Würden Sie bitte die Debug-Information der entsprechenden Seite posten, nachdem Sie einen Gewinner-COde angegeben haben? Danke. https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s067656 (155 points)
[Information] Interview Nummer 5834 wird fortgesetzt
[Information] Der Fragebogen Gewinnspiel im Projekt MOREStudie1 wird verwendet
[Information] Die Verweildauer auf Seite 1 war 6 Sekunden
[Verarbeitung] Lese Antworten von Seite 1
[Information] Antwort auf DE10_01 = AB12345
[Information] Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung] Erstelle die letzte Seite des Fragebogens
by SoSci Survey (328k points)
Ich habe den Code gerade nochmal getestet und er funktioniert korrekt. Allerdings filtert der Code im Moment noch keine Leerzeichen z.B. hinter dem Code. Das wäre wie folgt zu erreichen:

$gewinner = array('AB12345', 'BC23456', 'CD34567');
if (in_array(strtoupper(trim(value('DE10_01'))), $gewinner)) {
  text('gewonnen');
}

Aber ich glaube, das Problem liegt an anderer Stelle: Kann es sein, dass Sie den PHP-Code auf derselben Seite wie die Frage DE10_01 eingefügt haben? Er darf frühestens auf der folgenden Seite stehen. Sie benötigen also min. zwei Seiten im Fragebogen.

Wenn Sie den Code auf Seite 1 haben, sollte SoSci Survey auch einen Hinweis anzeigen, dass für DE10_01 noch keine Antwort vorliegt.
by s067656 (155 points)
Oh yeah, vielen DANK!
Es funktioniert.
Ich hatte, wie Sie bereits vermutet haben, beides auf einer Seite.

Danke für den support! :)

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

...