0 votes
in SoSci Survey (dt.) by s367141 (110 points)
edited by s367141

Ich möchte mit über Java ein Zeichenfeld einbauen, das so entstandene Bild als Variable speichern, auf der nächsten Seite wieder laden und wieder als Bild anzeigen angeben.

Das Zeichenfeld einbauen funktioniert. Das Anzeigen des Bildes bekomme ich bestimmt auch hin, wenn ich die Variable laden könnte.

Also das Problem liegt irgendwo auf dem Weg zwischen Variable speichern und auf der nächsten Seite wieder laden.

Auf der ersten Seite habe ich die interne Variablen Frage mit dem Variablennamen A103_01 angelegt:

Das hier ist die Speicherfunktion des Java Skript von Seite 1, die jedesmal beim setzten eines Strichs ausgeführt wird:

 function saveCanvasToVariable() {
    const dataURL = canvas.toDataURL('image/png');  // base64 PNG
    document.getElementById("A103_01").value = dataURL;}

Die müsste eigentlich funktionieren, denn wenn ich in der Konsole folgenden code eingeben, verändert sich die Länge der Variable:

document.querySelector('input[name="A103_01"]').value.length

Auf der zweiten Seite habe ich diesen PHP Code

prepare_input('A103_01');

und diesen HTML Code

   <p>Ihre handschriftliche Eingabe:</p>
<img id="sigPreview" alt="Handschriftliche Eingabe"
 style="max-width: 100%; border: 1px solid #000;">

    
<script> 
var dataURL = document.getElementById("A103_01").value;   

if (dataURL && dataURL !== "" && dataURL.indexOf("data:image") === 0) {
    document.getElementById("sigPreview").src = dataURL;
} else {
document.getElementById("sigPreview").alt = "Kein Bild gefunden.";
}
</script>

Die Konsole gibt mir diesen Fehler aus:

TypeError: null is not an object (evaluating 'document.getElementById("A103_01").value')

Ich nehme deswegen an, dass entweder das Speichern auf Seite 1 oder das Laden auf Seite 2 nicht funktioniert, aber dort komme ich nicht weiter.

Es wäre wunderbar, wenn mir jemand hier helfen könnte.
Dankeschön

1 Answer

0 votes
by SoSci Survey (372k points)

Es ist wenig effizient, wenn Sie die Daten als String im Datensatz speichern - vor allem können Sie pro Variable und Fall max. 32 kB speichern, und das ist evtl. zu wenig.

Verwenden Sie stattdessen den Fragetyp "Dateiinhalte übertragen". Wenn Sie die Vorlage "Einfache Zeichenfläche" in Ihren Fragenkatalog importieren, sehen Sie dort auch gleich den JavaScript-Code, welcher das Bild an den Server übermittelt. Diesen können Sie direkt für Ihre eigene Zeichenfläche verwenden.

by s367141 (110 points)
Vielen Dank!
by s367141 (110 points)
Die einfache Zeichenfläche zu nutzen funktioniert wunderbar, aber ich schaffe es nicht das Bild auf der nächsten Seite anzeigen zu lassen.

in PHP kann ich mir mit

$name = value('A104x02');
replace('%moderator%', $name);

den Namen der Datei auslesen lassen und durch html (<strong>%moderator%</strong> ) anzeigen lassen.

Die Java Funktion

<img src='%moderator%'
     alt="Ihre Zeichnung"
     style="max-width:100%; height:auto; border:1px solid #ccc;">

bekomme ich nicht zum laufen. Könnten Sie mir da vielleicht weiterhelfen?
by SoSci Survey (372k points)
Die Uploads werden nicht öffentlich ins Internet gestellt, und daher können Sie diese auch nicht ohne Weiteres im Fragebogen anzeigen. Aber wir haben für diesen Einsatzzweck eine Lösung.

Versuchen Sie es hiermit (https://www.soscisurvey.de/help/doku.php/de:create:questions:upload)

html('
    <div>
        <img src="upload://'.value('A104x02').'" style="max-width: 100%">
    </div>
');
by s367141 (110 points)
Vielen Dank!

Leider wird mir der Upload mit der Fehlermeldung in der Konsole verweigert:

[Warning] The page at https://www.soscisurvey.de/produktivesueben/index.php?i=FGA5YXWMRDLE&rnd=DFWZ requested insecure content from upload://. This content was automatically upgraded and should be served over HTTPS. (index.php, line 697)

[Error] Refused to load upload:// because it does not appear in the img-src directive of the Content Security Policy.

Gibt es da einen Weg herum?
by SoSci Survey (372k points)
Das Problem scheint zu sein, dass A104x02 in diesem Fall keinen Wert liefert. Es fehlt gewissermaßen der Dateiname, und SoSci Survey kann daher keinen temporären Zugriff einrichten. Was zeigt denn die Debug-Information auf der Seite an?
by s367141 (110 points)
Durch die Debug informationen habe ich herausgefunden, dass ich ausersehen mittlerweile durch eine neue Strutkturierung der Aufgaben den Variablennamen geändert hatte.

Jetzt funktioniert alles.

Vielen Dank für die schnelle und gute Hilfe!

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

...