Sebastian Becher: Mehrere Files uploaden

Hallo,
ich habe ein kleines problem. und zwar möchte ich n Dateien senden. dazu habe ich eine kleine activeX-componente entwickelt, die alle dateien ausliest und richtig als formular abschickt. mit einer datei funktioniert daß ganze wunderbar.
bei n dateien werden die daten auch wunderbar übertragen, aber nur die auswertung hat sich als sehr schwierig herausgestellt.
diese sogenannten filefields haben ein und den selben namen. eigentlich habe ich mir gedacht, daß ich eine art array habe wo all diese dateien enthalten sind. leider ist es nicht der fall. abgesendet wird das form per multipart/form-data.
Hat da jemand schon erfahrung oder lösungsansätze?

Danke schon im vorraus

MfG Sebastian Becher
---------------------------------
http://www.script-fabrik.de

  1. Hi,

    bei n dateien werden die daten auch wunderbar übertragen, aber nur die auswertung hat sich als sehr schwierig herausgestellt.

    mit welcher Programmiersprache arbeitest Du denn? Bei Perl wäre es unter Verwendung des CGI-Moduls sehr einfach.

    diese sogenannten filefields haben ein und den selben namen.

    Warum?

    eigentlich habe ich mir gedacht, daß ich eine art array habe wo all diese dateien enthalten sind. leider ist es nicht der fall.

    Dann arbeitest Du entweder nicht mit Perl, oder - sträflicherweise - nicht mit CGI. Oder?

    abgesendet wird das form per multipart/form-data.

    Ansonsten würde es schon mit einer Datei nicht klappen ;-)

    Cheatah

    --
    X-Will-Answer-Email: No
    1. also die ActiveX-Componente wurde mit C++ geschrieben, die reciever also das CGI-Script mit php. leider zeigt er(php-script) mir darin nichts sinnvolles an, womit ich was anfangen könnte. er gibt mir dann den ganzen headerbereich aus, der die inhalte aller dateien beinhaltet. warum die felder ein und den selben namen haben ist ganz einfach, dann brauch ich nicht erst prüfen ob es weitere filefileds gibt sondern kann es im vornherein schon ermitteln.

      MfG Sebastian becher

      1. Hi,

        also die ActiveX-Componente wurde mit C++ geschrieben, die reciever also das CGI-Script mit php.

        PHP ist defekt - es verlangt bei mehreren Eingabefeldern gleichen Namens illegale Bezeichner, nämlich solche, die auf "[]" enden. Benutze lieber eine professionellere Technik; oder wenn es gar nicht anders geht, setze unterschiedliche Namen ein.

        warum die felder ein und den selben namen haben ist ganz einfach, dann brauch ich nicht erst prüfen ob es weitere filefileds gibt sondern kann es im vornherein schon ermitteln.

        Faulheit ist keine Ausrede ;-)

        Cheatah

        --
        X-Will-Answer-Email: No
        1. Hi,

          PHP ist defekt - es verlangt bei mehreren Eingabefeldern gleichen Namens illegale Bezeichner, nämlich solche, die auf "[]" enden.

          Und was ist daran illegal?

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          1. Hi,

            PHP ist defekt - es verlangt bei mehreren Eingabefeldern gleichen Namens illegale Bezeichner, nämlich solche, die auf "[]" enden.
            Und was ist daran illegal?

            http://www.w3.org/TR/html401/types.html#type-id

            Cheatah

            --
            X-Will-Answer-Email: No
            1. Hi,

              http://www.w3.org/TR/html401/types.html#type-id

              Ja und? Das name-Attribut des input-Elements ist aber nicht vom Typ ID, sondern vom Typ CDATA.

              Nur weil das Attribut (zufällig) name heißt, ist es noch lange kein NAME-token.
              Nur das name-Attribut des meta-Elements sowie das http-equiv Attribut haben als Datentyp NAME. Und nur das id-Attribut hat den Typ ID.
              Also trifft dieser Absatz nur auf diese drei Attribute zu.

              Sieht man auch, wenn man von der Attribut-Beschreibung des name-Attributs im input-Element (http://www.w3.org/TR/html401/interact/forms.html#adef-name-INPUT) auf den dort angegebenen Datentyp CDATA klickt: man landet bei der Beschreibung von CDATA (nicht bei der von ID)...

              Bau mal folgendes in eine ansonsten valide HTML-Seite ein:

              <input name="bla1">
              <input name="bla2[]">
              <input id="bla3">
              <input id="bla4[]">

              und zähle die Fehlermeldungen des Validators.
              Ich bekomme da genau eine bei bla4[]...

              Ich bin diesem Irrtum auch lange Zeit erlegen...

              cu,
              Andreas

              --
              Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
              1. Hi MudGuard,

                Bau mal folgendes in eine ansonsten valide HTML-Seite ein:
                ...
                und zähle die Fehlermeldungen des Validators.
                Ich bekomme da genau eine bei bla4[]...

                das reicht aber. Vor allem, wenn Du bedenkst, daß es "name=" in XHTML 1.1 nicht mehr gibt ...

                Viele Grüße
                      Michael

                --
                T'Pol: I apologize if I acted inappropriately.
                V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
                1. Hi,

                  Bau mal folgendes in eine ansonsten valide HTML-Seite ein:

                  Stichwort: HTML, nicht XHTML
                  Auch Cheatah hat HTML 4.01 (falsch) zitiert. Und darauf bezog ich mich.

                  das reicht aber. Vor allem, wenn Du bedenkst, daß es "name=" in XHTML 1.1 nicht mehr gibt ...

                  Wirklich? Bist Du Dir da ganz sicher?

                  Dann erkläre mir bitte
                  http://validator.w3.org/check?uri=http%3A%2F%2Ftemp.andreas-waechter.de%2Ftest.html&charset=(detect+automatically)&doctype=Inline&ss=1&verbose=1

                  Also ich seh da im Source ein name-Attribut mit [] im Wert. Und ich seh auch den Text
                  "This Page Is Valid XHTML 1.1".

                  cu,
                  Andreas

                  --
                  Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
                  1. Hi,

                    Auch Cheatah hat HTML 4.01 (falsch) zitiert.

                    ja, hab ich. Ich muss gestehen, dass ich in meiner Interpretation einer früheren Erkenntnis erlegen bin: Wenn ein Element die Attribute ID und NAME beinhaltet, muss deren Wert identisch sein - und ID ist es, in dem die eckigen Klammern nicht erlaubt sind. Das habe ich irrtümlich zusammengewürfelt, sorry dafür.

                    das reicht aber. Vor allem, wenn Du bedenkst, daß es "name=" in XHTML 1.1 nicht mehr gibt ...
                    Wirklich? Bist Du Dir da ganz sicher?

                    In _einigen_ Elementen gibt es dieses Attribut noch immer. Allerdings in weitaus weniger, als es bei HTML der Fall ist - nämlich genau denen, die auch einen value haben (der bei <meta> content heißt und bei <select> aus <option>s besteht, okay). Natürlich gehören Formularelemente, welche Auslöser dieses Threads sind, dazu :-)

                    Cheatah

                    --
                    X-Will-Answer-Email: No
                    1. Hi,

                      Auch Cheatah hat HTML 4.01 (falsch) zitiert.
                      ja, hab ich. Ich muss gestehen, dass ich in meiner Interpretation einer früheren Erkenntnis erlegen bin: Wenn ein Element die Attribute ID und NAME beinhaltet, muss deren Wert identisch sein - und ID ist es, in dem die eckigen Klammern nicht erlaubt sind. Das habe ich irrtümlich zusammengewürfelt, sorry dafür.

                      Du beziehst Dich auf <>
                      The id and name attributes share the same name space. This means that they cannot both define an anchor with the same name in the same document. It is permissible to use both attributes to specify an element's unique identifier for the following elements: A, APPLET, FORM, FRAME, IFRAME, IMG, and MAP. When both attributes are used on a single element, their values must be identical.

                      INPUT sehe ich hier nicht. Dort stellt name aber auch nicht den "unique identifier" dar - ich sage nur Radiobutton.
                      Die Frage ist, ob der letzte Satz allgemein gilt oder nur für die im Satz vorher aufgezählten Elemente.

                      Bei Radiobuttons _müssen_ id und name u.U. unterschiedlich sein, wenn man nämlich label-Elemente für Radiobuttons verwenden will.

                      das reicht aber. Vor allem, wenn Du bedenkst, daß es "name=" in XHTML 1.1 nicht mehr gibt ...
                      Wirklich? Bist Du Dir da ganz sicher?
                      In _einigen_ Elementen gibt es dieses Attribut noch immer.

                      Ist MIR klar. Michael meinte, daß es das nicht mehr gäbe. Ich hab ja nur den Beweis angetreten, daß es das noch gibt...

                      cu,
                      Andreas

                      --
                      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
                      1. Hi,

                        Wenn ein Element die Attribute ID und NAME beinhaltet, muss deren Wert identisch sein

                        Du beziehst Dich auf <>

                        nein, nicht auf dieses Zitat. Einen Link kann ich Dir leider auch nicht anbieten, weil ich es spontan nicht wiedergefunden habe. Quintessenz ist jedoch, dass bei der Konstellation <$element id=$id name=$name> unabhängig von $element die Werte $id und $name identisch sein müssen (und damit sowohl die Beschränkungen zum ID- als auch zum NAME-Attribut gelten - was de facto heißt, dass es sich bei beiden um ID-Token handeln muss).

                        When both attributes are used on a single element, their values must be identical.

                        Es kann sein, dass diese Formulierung dort auch benutzt wurde.

                        INPUT sehe ich hier nicht. Dort stellt name aber auch nicht den "unique identifier" dar - ich sage nur Radiobutton.

                        Ja, es ist ein wenig merkwürdig, hier grundsätzlich identische Werte zu verlangen - Schlussfolgerung ist, dass man mit ID-Attributen in <input>-Tags höllisch aufpassen muss.

                        Die Frage ist, ob der letzte Satz allgemein gilt oder nur für die im Satz vorher aufgezählten Elemente.

                        In dem genannten Kontext sind beide Interpretationen möglich; logisch wäre die "kleinere" Variante. Solange ich (oder jemand anders) die andere Textstelle nicht wiederfinde, sind Zweifel an der "großen" Variante durchaus gerechtfertigt :-)

                        Bei Radiobuttons _müssen_ id und name u.U. unterschiedlich sein, wenn man nämlich label-Elemente für Radiobuttons verwenden will.

                        Ach was, da nimmt man einfach XUL ;-)

                        In _einigen_ Elementen gibt es dieses Attribut noch immer.
                        Ist MIR klar. Michael meinte, daß es das nicht mehr gäbe. Ich hab ja nur den Beweis angetreten, daß es das noch gibt...

                        Und genau für letztgenannte Person habe ich Deinen Beweis mit etwas Erläuterung erweitert ;-)

                        Cheatah

                        --
                        X-Will-Answer-Email: No
                        1. Hi Cheatah,

                          In _einigen_ Elementen gibt es dieses Attribut noch immer.
                          Ist MIR klar. Michael meinte, daß es das nicht mehr gäbe. Ich hab ja nur den Beweis angetreten, daß es das noch gibt...
                          Und genau für letztgenannte Person habe ich Deinen Beweis mit etwas Erläuterung erweitert ;-)

                          untertänigsten Dank, und tausendmal mea culpa.

                          Viele Grüße
                                Michael

                          --
                          T'Pol: I apologize if I acted inappropriately.
                          V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
        2. ahh, danke. deine gedanken haben mich um einiges weiter gebracht. daß ist keine faulheit sondern methoden um serverzeit zu sparen(auch nanosekunden sind wertvolle zeit).

          Aber danke nochmal

          MfG Sebastian becher

          1. Hi,

            daß ist keine faulheit sondern methoden um serverzeit zu sparen(auch nanosekunden sind wertvolle zeit).

            ja, je früher man an sowas denkt, desto unwahrscheinlicher ist das Böse Erwachen[tm] :-) Allerdings sollte man gesparte Rechenzeit/Ressourcen immer gegen technische Sinnhaftigkeit und - oft vergessen - Wartbarkeit abwägen. In diesem Fall bist Du zudem einer Notwendigkeit erlegen...

            Cheatah

            --
            X-Will-Answer-Email: No
  2. Hallo Sebastian,

    ich habe ein kleines problem. und zwar möchte ich n Dateien senden. dazu habe ich eine kleine activeX-componente entwickelt, die alle dateien ausliest und richtig als formular abschickt.

    Das ist natürlich die Holzhammermethode[tm]. Wieso nimmst du nicht einfach input-Felder?

    <input name="Datei" type="file" size="50" maxlength="100000" />

    Dann kannst du entweder mehrere Input-Felder auf einer Seite kombinieren oder die Dateien einzeln hochladen lassen und nach jedem Upload die Auswahl stellen, ob noch eine weitere Datei hochgeladen werden soll oder ob das jetzt alle Dateien waren.

    Viel Erfolg,
    Robert

    --
    What I "discovered" was that happiness is not something that happens. [...] Happiness, in fact, is a condition that must be prepared for, cultivated, and defended privately by each person.
      -- Mihaly Csikszentmihalyi