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

Résolu
victoires Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   -  
victoires Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   527
 
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 119 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   527
 
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 119 Date d'inscription   Statut Membre Dernière intervention  
 
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