2010-07-09 3 views
12

Voici le code que j'ai, et je me demande ce que je fais mal qu'il n'affiche pas le nom.HTML 5 télécharger plusieurs fichiers avec PHP

<form action = "self.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="imageURL[]" id="imageURL" multiple="" /> 
<input type="submit" value="submit" name="submit" /> 
</form> 

Et les informations de traitement qui ne fonctionne pas:

foreach ($_FILES['imageURL'] as $files[]) { 
    echo $files['file']; 
} 

Edit:

Lors d'un changement ma boucle foreach à:

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name']; 
} 

Toujours rien imprime .

Cependant, quand je fais quelque chose comme ceci:

foreach ($_FILES['imageURL']['name'] as $filename) { 
    echo $filename; 
} 

Le nom de fichier ne se imprime. Je ne sais pas ce que cela implique.



MISE À JOUR RESOLU:

Comme lié par John Conde, le tableau entrelacée structure est différente lors du téléchargement de plusieurs fichiers que lors du téléchargement d'un seul fichier. Pour utiliser foreach, nous devons restructurer le tableau.

$files=array(); 
$fdata=$_FILES['imageURL']; 
if(is_array($fdata['name'])){ 
for($i=0;$i<count($fdata['name']);++$i){ 
     $files[]=array(
    'name' =>$fdata['name'][$i], 
    'type' => $fdata['type'][$i], 
    'tmp_name'=>$fdata['tmp_name'][$i], 
    'error' => $fdata['error'][$i], 
    'size' => $fdata['size'][$i] 
    ); 
    } 
}else $files[]=$fdata; 

nous pouvons maintenant utiliser foreach à boucle:

foreach ($files as $file) { 
    echo $file['name']; 
} 
+0

Le code sous 'mise à jour résolue' est plutôt médiocre. is_array ($ fdata ['nom']) évaluera toujours false, ce qui signifie que la plupart des exemples ne sont jamais exécutés. Voir la réponse acceptée sur cette page à la place. –

Répondre

14

Essayez

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name']; 
} 

MISE À JOUR:

Google a trouvé this tutorial qui peut vous aider à

+5

Ou 'print_r ($ _FICHES);' si la structure n'est pas claire. –

+0

Ne semble pas fonctionner, rien n'est écho. – kylex

+0

's MISE À JOUR: génial! c'était le problème. La structure de la matrice est fondamentalement différente, ce qui empêche toute boucle de boucler correctement les fichiers. Quelle horrible façon de faire ça, je suis surpris qu'il n'y ait pas de fonction pré-compilée en PHP pour en prendre soin ... – kylex

1

Peut-être que je me trompe, mais que je ne définirais pas multiple="" désactiver plusieurs téléchargements? Il suffit d'utiliser multiple par lui-même, comme le montre le HTML5 spec ou, pour la compatibilité XHTML, multiple="multiple":

<input type="file" name="imageURL[]" id="imageURL" multiple /> 
+0

Une bonne idée, mais pas le problème. En fait la section de hacks de Firefox montre multiple comme multiple = "" – kylex

3

Au lieu d'utiliser pour() et retraçant le nombre d'éléments dans le tableau, vous pouvez utiliser un foreach plus élégant (

$files=array(); 
$fdata=$_FILES['file']; 
if(is_array($fdata['name'])){ 
    foreach ($fdata['name'] as $i => $d) { 
     $files[] = array(
     'name' => $d, 
     'tmp_name' => $fdata['tmp_name'][$i] 
     ); 
    } 
} 
else $files[]=$fdata; 
Questions connexes