2010-10-06 13 views
0

J'ai un script sur lequel je travaille pour télécharger jusqu'à 10 fichiers à la fois. J'ai 10 entrées séparées dans mon html:Chargement de plusieurs fichiers php

<?php 
    for($i=0;$i<10;++$i) { 
     $num = $i+1; 
     echo ' 
      <span>'.$num.'</span><input type="file" name="photo'.$i.'" /> 
       '; 
    } 
    ?> 

Et puis j'ai mon Uploader que je l'ai utilisé avant - sous une forme légèrement différente - mais ne peut pas se rendre au travail maintenant:

$path = "../path/to/folder/"; 
for($i = 0; $i < 20; $i++){ 
    $fileName = "photo". "$i"; 
    $filePath = "$path". "photo$i.jpg"; 

    if (!empty($_FILES['$fileName']['tmp_name'][$i])) { 
     if (!copy($_FILES['$fileName']['tmp_name'][$i], $filePath)) { 
      echo "failed to save '.$filePath.'"; 
     } 
     chmod($filePath, 0644); 
    } 
} 

Dans une version de travail de ce script, j'ai coupé la boucle for et juste numéroté chaque téléchargement individuellement (j'ai eu ce morceau de code sans la boucle 10 fois chacun avec son propre numéro). Cela a bien fonctionné, mais c'est vraiment très moche de regarder un morceau de code comme ça. Des idées pour faire ce travail?

mise à jour:

Pas encore avoir un peu de chance, j'apprécie toute l'aide. Je pense que mon problème réside en ce que les $ _FILES tableaux ne sont pas peuplées édite correctement comme suit:

HTML modifiée:

<?php 
    for($i=0;$i<10;++$i) { 
     $num = $i+1; 
     echo ' 
      <span>'.$num.'</span><input type="file" name="photo[]" /> 
       '; 
    } 
    ?> 

et le script Uploader à:

$path = "../path/to/folder/"; 
for($i = 0; $i < 20; $i++){ 
    $fileName = "photo". "$i"; 
    $filePath = "$path$fileName.jpg"; 

    if (!empty($_FILES["photo"]["tmp_name"][$i])) { 
     if (!copy($_FILES["photo"]["tmp_name"][$i], $filePath)) { 
      echo "failed to save '.$filePath.'"; 
     } 
     chmod($filePath, 0644); 
    } 
} 
+1

Combinez les réponses de jsuggs et Pekka, je peux voir que Pekka a corrigé votre erreur de devis sans le mentionner. –

+0

Vérifiez également que $ _FILES [$ fileName] 'est bien défini. Sinon, vous obtiendrez une erreur: 'if (isset ($ _FILES [$ fileName])) ...' – poke

Répondre

3

Vous utilisez $i deux fois:

$_FILES["$fileName"]["tmp_name"][$i] 

la partie [$i] fait aucun sens pour moi: Vous accédez déjà chaque élément par $fileName. Je pense que vous devez simplement vous débarrasser de [$i].

+0

Vous devriez probablement avoir mentionné que vous avez corrigé son erreur de soumission wrt. '' $ fileName '-> "$ fileName" 'qui ... à la fin aurait pu aussi bien être' $ fileName' –

+0

@Kristoffer être très honnête, je n'ai même pas remarqué que - je l'ai remplacé par pure habitude :) Bien repéré, applaudissements. –

+0

@Pekka erreurs de fixation sans les remarquer? Cela rendrait ma journée de travail beaucoup plus facile. –

2

I croire (partie de) votre problème est la citation. Vous utilisez des guillemets simples dans votre boucle, ce qui provoque l'évaluation des variables. Essayez d'utiliser le code ci-dessous à la place. Il peut y avoir d'autres problèmes, mais cela devrait résoudre un aspect de votre problème.

$path = "../path/to/folder/"; 
for($i = 0; $i < 20; $i++){ 
    $fileName = "photo". $i; 
    $filePath = "$path". "$fileName.jpg"; 

    if (!empty($_FILES["$fileName"]['tmp_name'][$i])) { 
     if (!copy($_FILES["$fileName"]['tmp_name'][$i], $filePath)) { 
      echo "failed to save $filePath"; 
     } 
     chmod($filePath, 0644); 
    } 
} 
0

vous avez trop compliqué, il
alors que rien ne peut être plus facile
juste foreach plus de $ _FILES

foreach ($_FILES as $file) { 
    $filePath = $path. "photo".($i++).".jpg"; 
    if (!$file['error']) { 
    move_uploaded_file($file['tmp_name'], $filePath)); 
    } 
} 

qui est tout pour la première convention de nommage.

+0

ne sais pas exactement où mettre en œuvre cela, je coupe tous les trucs $ _FILES et a laissé tomber ce code sous ($ i = 0; $ i <20; $ i ++) mais ne peut toujours pas obtenir de téléchargement: -/merci – Thomas

+0

@thomas c'est tout le code dont vous avez besoin. Bien que si votre tableau $ _FILES est vide, il ne fonctionnera évidemment pas –