0 votes
in SoSci Survey (dt.) by s166689 (120 points)

Hallo zusammen,

ich habe Daten aus einer vorherigen Befragung, die über einen individuellen Code gematcht werden sollen. Die Datei habe ich schon im CSV-Format und ohne Überschriften hochgeladen. In der ersten Spalte befindet sich der Schlüssel, in der zweiten automatisch die Sprache und dann beschriftet von 0 bis 6 sind die Antworten der Teilnehmenden aus dem vorherigen Fragebogen. Nun möchte ich in der Variablen IF01_01 den gleichen individuellen Code wie in der ersten Befragung abfragen und diesen als Schlüssel nutzen, um die anderen Daten aus der CSV-Datei einzuspeisen. Danach bewerten die Teilnehmenden jeweils 5 Aussagen (also 5 einzelne Items) zu den 7 bereits getätigten Antworten (hinterlegt in den Spalten 0 bis 6 in der CSV-Datei). Ich brauche die Antwort also quasi nur anstelle eines Platzhalters in der jeweiligen Frage, aber eben individuell über den Schlüssel eingefügt.

Leider bin ich mit dem PHP-Code etwas überfordert und werde aus den Beispielen unter dem Bereich "Datenbank für Inhalte" nicht schlau, weil das jeweils andere Formen abbildet oder mit den Serienmails von SoSci Survey gearbeitet wird.

Kann mich da jemand unterstützen? Das würde mir total weiterhelfen.

LG

by SoSci Survey (304k points)
Haben Sie bereits die Anleitung zu Arrays gelesen? Im Prinzip brauchen Sie nur ein dbGet(), bekommen dort ein Array und müssen diese Elemente dann in replace() nutzen, um Platzhalter icht nur "im Prinzip", sondern ganz praktisch zu verwenden. Posten Sie gerne den PHP-Code, wie weit Sie gekommen sind.
by s166689 (120 points)
Die Anleitung zu Arrays kannte ich noch nicht, danke für den Hinweis! Vielen Dank auch für die schnelle Antwort
Bilde ich dann im ersten Schritt ein Array mit dem Key und dem Wert über die dbGet Funktion? Wie genau sieht die Schreibweise da aus? Irgendwas in die Richtung $a = array (dbGet(...), dbGet(...))? Und danach muss erst die Bedingung codiert werden und dann der replace Befehl replace ('%Geschlecht%',...? Wird dafür der array_combine Befehl verwendet oder gibt es eine andere Lösung?
Ich hab leider gar keine Programmierungserfahrung und bin deswegen sehr unsicher auf dem Gebiet...
by SoSci Survey (304k points)
dbGet() liefert Ihnen ein Array, mittels debug() können Sie den Inhalt auch einfach ansehen. Hier ein wenig Inspiration:

$data = dbGet(...);
debug($data);
replace('%Geschlecht%', $data[2]);

> Ich hab leider gar keine Programmierungserfahrung

Ganz viele SoSci-Nutzer:innen haben mir berichtet, dass man diese Herausforderung bewältigen kann :)
by s166689 (120 points)
Danke für die Antwort!
Leider komme ich gar nicht weiter, es hakt schon beim dbGet, weil ich nicht weiß was in die Klammer muss und in welchem Format. Ist "$data" einfach ein festgelegter Name? Ich verstehe auch noch nicht an welcher Stelle ich angeben kann oder muss, dass zum Schlüsselabgleich die Variable IF01_01 verwendet werden soll...
by SoSci Survey (304k points)
>  was in die Klammer muss

Dort muss der Code rein, unter welchem die Daten abgelegt sind, s. Referenz unter https://www.soscisurvey.de/help/doku.php/de:create:functions:dbget.

Wenn Sie den Code/Schlüssel z.B. mit IF01_01 abgefragt haben, dann müsste da ein value('IV01_01') rein.

> Ist "$data" einfach ein festgelegter Name?

Ja, dazu lesen Sie bitte mal kurz: https://www.soscisurvey.de/help/doku.php/de:create:variables#php-variablen

Und gleich noch ein Tipp: Sie werden einen kleinen PHP-Filter brauchen, der reagiert, wenn $data nichts enthält, z.B: weil ein ungültiger Code angegeben wurde.

if (!$data) {
  repeatPage('XY01');
}
by s166689 (120 points)
Wie greife ich den auf die CSV-Datei zu? Mit dbGet kann ich ja auch auf andere Variablendaten zugreifen.
by SoSci Survey (304k points)
Wenn Sie die CSV-Datei unter "Datenbank für Inhalte" importiert haben, dann können Sie mit dbGet() genau auf die Einträge zugreifen, die dort in der Datenbank stehen. Auf andere Inhalte haben Sie mit dbGet() keinen Zugriff.
by SoSci Survey (304k points)
Nur zur Sicherheit: dbGet(‘IF01_01’) ist falsch - es muss dbGet(value('IF01_01')) heißen und die Anführungszeichen müssen gerade sein.
by s166689 (120 points)
Ok, dann funktioniert die Übertragung wohl nicht. Der Befehl dbKeys gibt auch keine Schlüssel aus, obwohl eine Datenbank korrekt hinterlegt ist.
by SoSci Survey (304k points)
Sehen Sie denn unter "Datenbank für Inhalte" die Tabelle? Passen die Schlüssel in der linken Spalte?
by s166689 (120 points)
Ja die Tabelle sehe ich und die Schlüssel ganz links stimmen auch
by s166689 (120 points)
Jetzt hat es mit dem folgenden Code funktioniert:
$codeInput = value('IF01_01'); //Rausziehen vom Schlüssel aus T1
debug($codeInput);
$data = dbGet($codeInput);
debug($data);
if (!$data) {
  repeatPage('FM01'); //Anzeige Fehlermeldung falls kein Schlüssel vorhanden
}
replace('%Geschlecht%', $data[0]); //Ersetzen von Platzhalter in Frage mit Antwort aus CSV Datei
question('BF01');  // Frage Geschlecht

Gibt es die Möglichkeit bereits eine Fehlermeldung bei der Abfrage des Codes anzuzeigen, also nicht erst bei der Beantwortung der Fragen?

1 Answer

0 votes
by SoSci Survey (304k points)

Gibt es die Möglichkeit bereits eine Fehlermeldung bei der Abfrage des Codes anzuzeigen, also nicht erst bei der Beantwortung der Fragen?

Klar, setzen Sie den Teil bis repeatPage() einfach direkt auf die Seite nach IF01 ganz oben auf die Seite. Dann wird IF01 nochmal angezeigt, wenn der Code nicht stimmt.

Sie können den Code dann später (dort dann ohne das IF) im Fragebogen einfach nochmal platzieren, wenn Sie die Werte erst später brauchen.

by s166689 (120 points)
Herzlichen Dank für die Antwort und die Unterstützung!

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

...