Multiple Upload PHP

  • Hey,


    ich hab in ein wenig veränderter Struktur folgenden Code für mein Upload für Bilder genommen. Mit einem Bild funktioniert das auch.
    Allerdings brauch ich das für mehrere. Hab im <form> schon multiple als Attribut drin, und kann auch mehrere Bilder auswählen beim File Input,
    aber hochladen tut es dann immer nur eines.


    Was muss ich am Code ändern damit alle Files hochgeladen werden die ausgewählt sind und auch verschoben danach.


    Bin gerade bisschen ratlos und will nicht den ganzen Code zermurksen. :D


    http://www.it-gecko.de/html5-f…ressbar.html#SID758_1_tgl


    - Tom

  • Das kann aber nicht sein weil bis zu dem Punkt wo PHP kommt alles über Javascript hochlädt, und egal wieviele Bilder ich markiere, der Ladebalken ist immer gleichschnell (weil er eben nur 1 Bild von den ausgewählten hochlädt)


    Die Frage ist wie ich das ändern kann.


    Das mit dem loopen muss villt auch passieren aber erstmal müsste ich wahrscheinlich in Javascript mit einem array unbestimmter Anzahl von Bildern arbeiten.
    Wie das praktisch aussieht kann ich aber zu null Prozent sagen da ich in Javascript noch blutiger Anfänger bin deswegen bräuchte ich mal Hilfe von jmd. Erfahrenem. :)


    - Tom

  • Die uploadFile Funktion musst du auf mehrere Dateien anpassen:


    Anstatt

    JavaScript
    var file = document.getElementById("fileA").files[0];

    nimmst du

    JavaScript
    var files = document.getElementById("fileA").files;

    damit du nicht nur die erste mögliche Datei, sondern alle in einer Variable speicherst. Außerdem files anstatt file weil wegen plural.


    Dann

    JavaScript
    if(!file)

    zu

    JavaScript
    if(!files.length)

    weil files nun ein array ist, und ein leeres array true zurück geben würde. So fragen wir nach der länge, die im Falle von keinen Dateien 0 zurück gibt, was wiederum false entspricht.


    Dann


    JavaScript
    formData.append("datei", file);

    zu



    JavaScript
    for(var i = 0; i < files.length; i++) {
        formData.append("dateien[]"; files[i]);
    }

    damit werden alle Dateien an das form-array dateien[] übergeben. Dieses kannst du dann in PHP z.b. via



    PHP
    $count = count($_FILES['dateien']['name']);
    for ($i = 0; $i < $count; $i++) {
        echo 'Name: '.$_FILES['dateien']['name'][$i].'<br/>';
    }

    nutzen.


    Der upload mehrere Dateien sollte damit funktionieren (habs nicht getestet, aber theoretisch gehts :D), allerdings wird dir noch kein Fortschritt für alle Dateien angezeigt. Da musste dir selbst überlegen wie du das machen willst und dementsprechend die fileChange Funktion un den HTML Code anpassen. Willst du das alle Dateien zusammengefasst angezeigt werden? Oder jede Datei einzeln? Etc.

  • Danke erstmal für deine super Beschreibung. Soweit hab ich es verstanden.


    Das Problem gerade ist allerdings das irgendetwas am neuen Code die obendrüber liegenden Funktionen zum öffnen der div Container ( so hab ich das Formular verschachtelt) blockiert.
    Ich kann es also nicht öffnen und ausprobieren. Ich find allerdings auch kein ; Fehler im Code was ich vermuten würde. ?(


    //edit: Okay hab ihn doch gefunden. :D Wieder zu voreilig. Melde mich nochmal falls ich nicht weiter komme, danke nochmal. :)


    - Tom

  • Also bei der Abfrage im PHP


    Code
    if (isset($_FILES['dateien']['name'][$i]))

    scheitert der Upload da anscheinend die Dateien nicht richtig hochgeladen werden bzw. nicht richtig weitergegeben werden, sonst würde evtl. schon der error im Javascript vorkommen.
    Bin etwas ratlos.


    Hab es auch schon ohne die Attribute probiert, sondern einfach nur $_FILES['dateien']


    - Tom



    Einmal editiert, zuletzt von Tomsen ()

  • Code
    array(1) { ["pic"]=> array(5) { ["name"]=> string(12) "IMGP5296.JPG" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(29) "/users/_temp/sf-ost/phpoQFcuP" ["error"]=> int(0) ["size"]=> int(2600737) } }

    - Tom



    Einmal editiert, zuletzt von Tomsen ()

  • Ich hab das enctype="multipart/form-data" und im file Input ein multiple für die multiple Auswahl im Browser...
    Daran soll es also nicht liegen.



    - Tom

  • Hab ich gemacht.


    Code
    array(1) { ["pic"]=> array(5) { ["name"]=> string(12) "IMGP5291.JPG" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(29) "/users/_temp/sf-ost/phpccmbQf" ["error"]=> int(0) ["size"]=> int(2755133) } }



    - Tom