*Alex*: Kann ich eine $_FILE aus einem upload-input (display:none) einem input:hidden zuweisen?

Hallo zusammen Ich hoffe, ich drücke meine Frage verständlich aus:

Ich habe ein Formular, bei dem nacheinander bestimmte Eingabebereiche sichtbar werden (display:block) bzw. eben wieder unsichtbar (display:none). In einem dieser Eingabebereiche ist ein input für einen Datei-Upload. Wenn der Benutzer sich durch das Formular durchgearbeitet hat, bekommt er nochmal einige seiner Eingaben angezeigt und kann dann auf "abschicken" klicken. In dem "Bestätigungs"-Bereich, den der Benutzer unmittelbar vor dem Abschicken sehen kann, befinden sich alle seine Eingaben in hidden-inputs (per javascript zugewiesen) und werden auch wunderschön submitted. Außer die FILE aus dem Datei-Upload…

Also folgere ich, dass ein input type hidden keine FILE aufnehmen kann - stimmt das?

Der ursprüngliche input type file , der mittlerweile mit display:none "weggenommen" wurde, wird bei der submit-Methode nicht mitübertragen, auch wenn er sich (unsichtbar) innerhalb des Formularbereichs befindet - stimmt das?

Wie kann ich diese Datei aus dem input type file Eingabefeld übertragen, ohne dieses Feld wieder anzeigen zu müssen?

Bin sehr dankbar für Eure Rückmeldungen!

  1. Hello,

    liegt zwischen Eingabe und Kontrollanzeige ein Roundturn?

    Welche Logik läuft auf dem Request-Ziel aka Server?

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo Tom

      Vielen Dank für Deine Antwort. Leider bin ich nicht so fachbegriff-afin und bin mir nicht sicher, ob ich richtig verstehe, worum es bei Deinen Fragen geht. Aber ich will versuchen sie zu beantworten.

      liegt zwischen Eingabe und Kontrollanzeige ein Roundturn?

      Ich verstehe Deine Frage so: "Gibt es VOR dem endgültigen Absenden des Formulars eine Client-Server-Interaktion, z.B. nachdem der User seine Upload-Datei ausgewählt hat?"

      Die Antwort wäre: Derzeit nicht. Aber ich denke schon darüber nach, ob man da vielleicht im Hintergrund was mit AJAX machen könnte, um das Problem auf diese Weise zu lösen. Ich bin allerdings ein AJAX-noob und würde dann eventuell hier im Forum nachfragen, ob da jemand vielleicht ein fertiges Script hat - was eventuell beim einen oder anderen hier zu Unmut führen könnte, vorallem wenn ich dann noch Nachfragen hätte.

      Welche Logik läuft auf dem Request-Ziel aka Server?

      Diese Frage verstehe ich nicht. Derzeit liegt ein Script auf dem Server, das die letztendlich abgeschickten Daten entgegennimmt, daraus einen Datenbankeintrag und eine Email generiert. Aber das ist bestimmt nicht die Antwort auf Deine Frage.

      Sag mal: Deinen Fragen liegt ja eine bestimmte Überlegung zugrunde - was hast Du denn da im Kopf?

      Vielen Dank für Deine Unterstützung, das ist wirklich sehr nett!

      Alex

      1. Hallo

        Leider bin ich nicht so fachbegriff-afin und bin mir nicht sicher, ob ich richtig verstehe, worum es bei Deinen Fragen geht. Aber ich will versuchen sie zu beantworten.

        liegt zwischen Eingabe und Kontrollanzeige ein Roundturn?

        Ich verstehe Deine Frage so: "Gibt es VOR dem endgültigen Absenden des Formulars eine Client-Server-Interaktion, z.B. nachdem der User seine Upload-Datei ausgewählt hat?"

        Ja, das ist gemeint. Das wäre z.B. bei mehrstufigen Formularen der Fall, bei denen eine Seite ausgefüllt wird und abhängig von den Antworten die Auswahl für die nächste Formuarseite auf dem Server zusammengestellt wird.

        Die Antwort wäre: Derzeit nicht. Aber ich denke schon darüber nach, ob man da vielleicht im Hintergrund was mit AJAX machen könnte, um das Problem auf diese Weise zu lösen.

        Das "normale" Absenden würde grundsätzlich den gleichen Zweck erfüllen. jedenfalls könnte man dann „sofort“ den Upload übergeben und diesen Schritt abhaken.

        Welche Logik läuft auf dem Request-Ziel aka Server?

        Diese Frage verstehe ich nicht. Derzeit liegt ein Script auf dem Server, das die letztendlich abgeschickten Daten entgegennimmt, daraus einen Datenbankeintrag und eine Email generiert. Aber das ist bestimmt nicht die Antwort auf Deine Frage.

        Doch, darum geht es ihm.

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett
      2. Hello,

        unter dem Aspekt, dass immer alles erst einmal mit reinem HTML und ggf. CSS funktionieren soll, und JavaScript erst anschließend zur Convenience beitragen sollte, kann man auf dem Server mit Sessions arbeiten und die Bilder/Dokumente, die mittels Fileupload hochgeladen werden sollen, in eigenen Sessiondateien speichern.

        Auf dem Server kann man sie dann auch verkleinern, um sie beim nächsten Roundturn wieder anzeigen lassen zu können, ohne den Traffic in die Höhe zu treiben.

        Eigene Sessiondateien für die Uploads haben den Vorteil, dass sie nicht durch das Speichermanagement der Scriptsprache auf dem Server betroffen sind (allerdings ggf. doch an der Stelle, wenn man sie anschließend bearbeiten/verkleinern will...) und dass sie durch den Garbage Collector Prozess wieder gelöscht werden, also nicht den Server vollmüllen.

        Die Referenzen auf diese Dateien legt man sich in der eigentlichen Session ab.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
  2. Lieber Alex,

    Also folgere ich, dass ein input type hidden keine FILE aufnehmen kann - stimmt das?

    ja. Im Wesentlichen können input-Elemente nur String-Daten aufnehmen. Bei Checkboxen und Radio-Buttons ist der Voreingestellte Wert "on". Nur <input type="file"> kann das Senden von Binärdaten einer Datei veranlassen.

    Die Browserhersteller legen jeden verfügbaren Stein in den Weg, an diesem Element etwas per JavaScript irgendwie manipulieren zu können. Das hat sicherheitsrelevante Gründe.

    Liebe Grüße,

    Felix Riesterer.

  3. Ja so ist es. Aber die Lösung ist ganz einfach: Input type="file" wird erst zum finalen Submit sichtbar gemacht. Eine Alternative wäre, die Eingaben nicht in versteckten Feldern zwischenzuspeichern sondern im Browser, entweder in JavaScript oder in localStorage. In letzterem Fall bleiben die Daten auch beim Verlassen der Seite in Ersterem natürlich nicht. MfG

    1. Hallo

      Vielen Dank für Deinen Vorschlag. Die Lösung, das Upload-Eingabefeld erst ganz zum Schluss einzufügen verbietet sich aus Gründen der (verzweigten) Logik des Eingabeverfahrens (wegen dieser werden - je nach Eingabe - eben bestimmte Felder zu bestimmten Zeitpunkten angezeigt oder nicht).

      Die Eingaben werden in Javascriptvariablen über den ganzen Prozess vorgehalten und die Variable für die Upload-Datei enthält diese auch. Aber wie schicke ich die ab? Meine Lösung war, den Inhalt aller Variablen ganz am Schluss in hidden-fields zu schreiben, weil die ja über submit() verschickt werden können.

      Gibt es eine Alternative, um Werte einer Variablen an ein Ziel zu verschicken, außer über den submit von inputs?

      1. hi,

        Die Eingaben werden in Javascriptvariablen über den ganzen Prozess vorgehalten und die Variable für die Upload-Datei enthält diese auch. Aber wie schicke ich die ab?

        Guck Dir FormData an. Ein FormData-Objekt kriegt die Dateien ganz einfach als Blobs angehängt. Aus der Sicht von FormData sind File und Blob gleichartig.

        Meine Lösung war, den Inhalt aller Variablen ganz am Schluss in hidden-fields zu schreiben, weil die ja über submit() verschickt werden können.

        Nein, weder hidden noch submit. Alle weiteren Eingaben hängst Du ebenfalls an das FormData-Objekt, dafür gibt es eine append-Methode.

        Gibt es eine Alternative, um Werte einer Variablen an ein Ziel zu verschicken, außer über den submit von inputs?

        Statt nun ein Submit zu machen schickst Du das FormData-Objekt ganz einfach per Ajax oder fetchAPI und Request-Method POST. Fertig.