2 votes

$_FILES ne comprend que la dernière entrée

J'ai lutté avec ça toute la journée et je suis fatigué d'être bloqué. J'ai passé une demi-heure ce matin à faire un petit téléchargement personnalisé pour les photos de profil sur la même application que celle où je suis maintenant bloqué.

Le problème ici n'est pas le téléchargement (je l'avais déjà fait), mais l'extension à un formulaire qui permet plusieurs téléchargements. Ce n'est pas un téléchargeur à fichiers multiples et à entrée unique, mais plutôt à entrées multiples.

Je n'ai actuellement que deux instances de input type='file' dans le formulaire. J'utilise Codeigniter, mais le problème n'est pas l'incapacité de CI à traiter des téléchargements multiples (je ne pense pas). Tout ce que j'essaie de faire maintenant est simplement de faire print_r($_FILES); qui ne montre que le deuxième des deux entrées.

Si je les intervertis dans leur emplacement dans le formulaire, il n'y a que le dernier qui s'affiche au lieu des deux.

J'ai vérifié leurs noms, etc. environ 100 fois déjà aujourd'hui. Je ne sais vraiment pas ce qui se passe. Et, pour être clair, j'ai fait de nombreuses recherches sur SO et Google pour voir si je pouvais trouver le problème. Jusqu'à présent, je n'ai rien trouvé.

Merci pour tout conseil ou aide.

EDITS:----------------------------

<form action="http://curvo:8888/index.php/offers/create" method="post" accept-charset="utf-8" class="bigolform" id="offer-form" enctype="multipart/form-data">                  
                    ...
                    <input type="file" name="ProductOfferPhoto" value="" id="ProductOfferPhoto">                    

                    ...

                    <input type="file" name="QuoteDoc" value="" id="QuoteDoc">                      

                    <!--using an ajax uploading script-->
                    <script type="text/javascript" src="/assets/js/libs/ajaxfileupload.js"></script>

                    <a href="#" class="orange btn add submit-the-offer">Complete offer</a>

</form>

J'ai essayé d'utiliser genericName[] aussi, mais cela ne me donne qu'un tableau vide.

5voto

Brock Hensley Points 1720

Assurez-vous que votre contribution name est un tableau si vous acceptez plusieurs fichiers :

Téléchargement unique :
<input name="productImage" accept="image/*" type="file" />

Téléchargements multiples :
<input name="productImage[]" accept="image/*" type="file" />
<input name="productImage[]" accept="image/*" type="file" />
... --------------------------------------^ The [] signifie qu'il s'agit d'un tableau et vous permet de soumettre plusieurs valeurs pour le même nom.

Vous trouverez ensuite plusieurs valeurs pour $_FILES au lieu de seulement le dernier fichier téléchargé (car chaque fichier remplace le dernier actuellement).

0voto

John Blythe Points 583

Merci pour les idées et les commentaires, tout le monde. Je ne connais pas la réponse concernant une solution, mais j'ai trouvé la réponse du "pourquoi" concernant le problème.

Le script ajaxfileuploader.js que j'avais récupéré sur Nettuts lançait des choses. Il a bien fonctionné pendant un certain temps lorsque j'avais un seul téléchargement, mais dès que j'ai commencé à essayer d'en faire plusieurs, il s'est effondré et n'a saisi que le tout dernier input champ.

Je vais explorer le plugin jQuery File Upload de blueimp dans un futur proche. Pour l'instant, je n'ai pas besoin de l'ajaxer afin de respecter la date limite que j'ai fixée à lundi.

Merci encore pour votre aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X