0 votes
ago in SoSci Survey (dt.) by s295460 (150 points)

Hallo,

ich habe ein Problem beim Befüllen eines Platzhalters in meinem Fragebogen.
Ich nutze eine Adressliste mit eigenst festgelegten Serials, die auch als Schlüssel in der Datenbank für Inhalte dienen (dieselbe CSV-Datei).
Das Abrufen von GET-Parametern aus dem Link der Einladung funktioniert sehr gut. Jetzt möchte ich für einen Platzhalter in einem Item auf die Datenbank für Inhalte zurückgreifen. Allerdings scheint caseSerial() dabei eine ganz andere Spalte zurückzugeben, wodurch dbGet() fehlschlägt. Das führt dann dazu, dass im Fragebogen der Platzhalter nicht korrekt ersetzt wird.
Für meinen Code habe ich mich bisher an einen ähnlichen Post aus dem August 2024 gehalten:

$key = caseSerial();
$info = dbGet($key);
$name = $info[3]; //Spaltennr. für Vorname

replace('%Vorname_Studienelternteil%', $name);

Dabei treten außerdem zwei Fehlermeldungen auf: 1) Für die Funktion replace() wurden nicht ausreichend Argumente angegeben, 2 Argumente sind zwingend erforderlich. Weitere Details finden Sie in der Anleitung zur Funktion. und 2) Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Trying to access array offset on value of type bool
Zeile: 5

Wie gesagt, denke ich, dass der Fehler schon in Zeile 1 beginnt, da caseSerial() inkorrekt wiedergegeben wird.

Ich bin mir sicher, dass ich beim dem Ganzen etwas Wichtiges übersehe, komme aber einfach nicht darauf und würde mich deswegen über jede Unterstützung sehr freuen!

Liebe Grüße

1 Answer

0 votes
ago by SoSci Survey (351k points)

dieselbe CSV-Datei

falls es jenseits von Name und E-Mail-Adresse nur max. 5 zusätzliche Informationen sind, und Sie diese als "benutzerdefinierte Felder" in die Adressliste importiert haben, können Sie auf diese Informationen evtl. einfacher per panelData() zugreifen.

Allerdings scheint caseSerial() dabei eine ganz andere Spalte zurückzugeben, wodurch dbGet() fehlschlägt.

Lassen Sie sich doch mal anzeigen, was dbGet() so liefert:

$key = caseSerial();
$info = dbGet($key);
debug($info);

Sie können einfach ein Debug-Interview mit dem gelben Pfeil starten und dann oben in der gelben Leiste die Variable "SERIAL" auf einen der Codes setzen.

Fehler im Fragebogen: Trying to access array offset on value of type bool
Zeile: 5

Das klingt so, dass dbGet() gar keinen Eintrag zu dem Schlüssel findet. Lassen Sie sich also auch den Schlüssel anzeigen:

$key = caseSerial();
debug($key);

Falls bei dem Interview schon im Datensatz keine SERIAL vermerkt ist, dann klemmt es an anderer Stelle. Eventuell haben Sie den Datenschutzmodus "anonym" verwendet? Oder der Fragebogen wird nicht über einen personalisierten Link aufgerufen?

ago by s295460 (150 points)
Super, vielen Dank für die schnellen und sehr hilfreichen Hinweise! Ich habe im Debug weder einen Eintrag für dbGet() noch für den Schlüssel finden können, je "Keine Daten (null)" (key) und $info = false (boolean). Aufgefallen ist mir noch, dass "SERIAL" im Adressverzeichnis == "KEY" in der Datenbank für Inhalte. Vermutlich ist auch das nicht förderlich in meinem Fall?
Gelöst habe ich es jetzt vorerst mit panelData(), aber ich frage mich für weitere Variablen, wie ich am besten auf die Datenbank für Inhalte zugreifen kann, wenn ich nicht direkt eine konkrete ID eincodieren möchte, d.h. genau wie hier z.B. nach SERIAL auf hinterlegte Daten zugreifen und in einen Platzhalter einfügen möchte. Da wäre ich für Tipps sehr dankbar!
Vielen, vielen Dank schon einmal!
Liebe Grüße
ago by SoSci Survey (351k points)
> Aufgefallen ist mir noch, dass "SERIAL" im Adressverzeichnis == "KEY" in der Datenbank für Inhalte. Vermutlich ist auch das nicht förderlich in meinem Fall?

Das passt bzw. soll so sein.

> Gelöst habe ich es jetzt vorerst mit panelData()

Das ist generell keine schlechte Lösung. Wenn Sie damit alles abbilden können, dann bleiben Sie dabei.

Das Problem scheint in Ihrem Fall zu sein, dass caseSerial() nicht die SERIAL der Person liefert, die teilnimmt. Was steht denn im Datensatz bei dem Fall in der Spalte "SERIAL"?
ago by s295460 (150 points)
Vielen Dank für Ihre Antwort! In den Adresseinträgen unter "SERIAL" vermerkt ist, beispielsweise D58seN. Vorher hatte die Kennung Unterstriche ("_") und hat deshalb vielleicht nicht funktioniert? In der Debug-Funktion bekomme ich jetzt jedenfalls die Info pro Serial angezeigt, wie oben vorgeschlagen. Einzig das Finden/Einsetzen von Information funktioniert noch nicht, mit diesem Code bekomme ich "unbekannt" eingesetzt zurück:

$key = caseSerial();
$info = false;
if ($key) {
    $info = dbGet($key);
}
$name = 'unbekannt';
if ($info && isset($info[3])) {
    $name = $info[3];
}
replace('%Vorname_SES%', $name);

Wissen Sie da vielleicht weiter? Vielen Dank und liebe Grüße!

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

...