Recupération de la valeur d'un input array() de type file

Résolu/Fermé
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016 - Modifié par victoires le 9/09/2015 à 15:22
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016 - 9 sept. 2015 à 17:38
Bonjour,

J'ai un formulaire qui donne la possibilité aux utilisateurs d'ajouter N pièces jointes, pour cela j'ai mis un bouton pour ajouter un champ de type file qu'on l'utilisateur fait un clic ...

<form method="post" enctype="multipart/form-data">
<span class='piece'><input type='file' name='file[]'/></span>
</form>

<p><button id='prependTo'>Ajouter une pièce jointe</button></p>  
<script type="text/javascript">
  $("#prependTo").click(function () {
   $("<input type='file' name='file[]'/><br/>").prependTo('.piece');
    });
</script>


Je vois bien l'input file qui s'ajoute après un clic sur le bouton, mais le problème est que le $_FILES['file'] me retourne toujours une seule entrée

Avez-vous une idée comment puis-je faire pour récupérer l'ensemble des pièces de l'array $_FILES['file'] ? Merci d'avance

Cordialement
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
9 sept. 2015 à 16:31
Salut,

Effectivement le tableau $_FILES ne retourne qu'une seule entrée lors de l'upload de plusieurs fichiers.
Ce tableau est initialisé de manière un peu particulière, tu peux avoir plus de détails sur la doc : https://www.php.net/manual/fr/features.file-upload.multiple.php

Je t'invite notamment à lire le premier commentaire de cette doc qui te propose une fonction pour ré-indexer le tableau $_FILES.

Bonne journée
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
Modifié par victoires le 9/09/2015 à 17:05
Bonjour,

Merci pour votre réponse,

En fait si j'ajoute deux input de type file manuellement sans passer par jquery je récupère bien le deux fichiers dans un array $_FILES['file']

<input type='file' name='file[]'/>
<input type='file' name='file[]'/>


Array
(
[name] => Array
(
[0] => Lien pexe.odt
[1] => Lien paysages.odt
)

[type] => Array
(
[0] => application/vnd.oasis.opendocument.text
[1] => application/vnd.oasis.opendocument.text
)

[tmp_name] => Array
(
[0] => /tmp/phpLbHZm9
[1] => /tmp/phpV4zBfm
)

[error] => Array
(
[0] => 0
[1] => 0
)

[size] => Array
(
[0] => 9070
[1] => 9200
)

)


Mais c'est quand la deuxième champ input ajouter à partir du bouton jquery je récupère q'un seule fichier !

On dirait qu'il ne fait pas le lien entre le deuxième champ input et le formulaire <form> !

Avez-vous une piste ?

Merci
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
9 sept. 2015 à 17:15
J'ai testé ton code avec l'ajout de plusieurs input via jQuery et je n'ai pas rencontré de problème :
<?php 
foreach($_FILES['file']['name'] as $fileName) {
	echo $fileName . '<br>';
}
?>
<form method="post" enctype="multipart/form-data">
	<span class="piece"><input type="file" name="file[]" /></span>
	<input type="submit" value="Envoyer" />
</form>

<p><button id='prependTo'>Ajouter une pièce jointe</button></p>  

<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
	$("#prependTo").click(function () {
		$("<input type='file' name='file[]'/><br/>").prependTo('.piece');
	});
</script>


En petite remarque j'aurais plutôt utiliser appendTo à la place de prependTo pour que les champs supplémentaires s'affichent à la fin du formulaire plutôt que au début, mais ceci n'as aucune incidence concernant le fonctionnement de ton formulaire.
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
9 sept. 2015 à 17:38
oups ! j'avais un petit soucis avec la fermeture de la balise </form>
c'est pourquoi les champs ajoutées n'ont pas été pris en compte !

Je veux regarder pour appendTo,

Merci :)
0