2010-06-20 4 views
0

Tous les scripts que j'ai trouvé via Google recherche reposent sur une sorte d'écran qui demande d'abord l'utilisateur le nombre de fichiers dont ils ont besoin pour télécharger et le script de téléchargement des travaux basés sur ce nombre.Comment télécharger plusieurs fichiers en PHP

Mais si je ne veux pas de limites, mais que vous voulez permettre à l'utilisateur de télécharger autant ou aussi peu qu'ils le souhaitent. Que faire à ce propos?

Tout ce que j'ai pour est maintenant la forme:

<form enctype="multipart/form-data" method="post" action="script.php"> 
<input id="my_file_element" type="file" name="myFile[]" > 
     <input type="submit" value="Upload!" name="submit"> 
</form> 

EDIT

Je pense que la façon dont je Formulé ma question est à l'origine un malentendu. Je n'ai pas besoin d'un moyen d'ajouter plus d'éléments de champ "input type = file". J'utilise déjà un javascript qui permet à l'utilisateur d'ajouter plus de champs de formulaire en cliquant sur un bouton, ces autres champs sont identiques au premier affiché ci-dessus.

Ce que je pose cette question, est de savoir comment gérer le téléchargement réel des fichiers sur le serveur en utilisant un script php.

+1

Utilisez javascript, Luke. L'ajout de champs HTML au formulaire HTML est un travail HTML et JavaScript. Pas PHP. –

+0

Désolé, lorsque j'ai appuyé sur "modifier", vous avez déjà édité la question. J'ai en quelque sorte roulé en arrière. – Artefacto

Répondre

3

EDIT

Disons que votre forme est comme ce

<form enctype="multipart/form-data" method="post" action="script.php"> 
<input id="my_file_element" type="file" name="myFile[]" > 
<input id="my_file_element" type="file" name="myFile[]" > 
<input id="my_file_element" type="file" name="myFile[]" > 
etc... 
<input type="submit" value="Upload!" name="submit"> 
</form> 

Ce que vous voulez faire, c'est obtenir tous les fichiers appelés myFile[]. Voici ce que vous faites en PHP:

foreach ($_FILES["myFile"]["error"] as $key => $error) { 
if ($error == UPLOAD_ERR_OK) { 
    $tmp_name = $_FILES["myFile"]["tmp_name"][$key]; 
    $name = $_FILES["myFile"]["name"][$key]; 
    // here we move it to a directory called data 
    // you can move it wherever you want 
    move_uploaded_file($tmp_name, "data/$name"); 
} else { 
    // an error occurred, handle it here 
} 
} 

ORIGINAL

En utilisant HTML et JavaScript seul, il n'y a pas un moyen facile de télécharger plusieurs fichiers en même temps.

Je voudrais utiliser une bibliothèque Flash, comme SWFUpload, faire le téléchargement à la place. Grâce à ce plugin, vous pouvez afficher une fenêtre standard de téléchargement multi-fichiers, comme le montre this demo. Cela permettra aux utilisateurs de sélectionner facilement plusieurs fichiers dans le même navigateur de fichiers.

Si vous ne souhaitez pas utiliser Flash pour une raison quelconque, vous pouvez utiliser JavaScript pour permuter dynamiquement les éléments d'entrée, comme dans this example.

0

utiliser juste JavaScript pour ajouter un autre élément d'entrée à la forme.

+0

s'il vous plaît voir mon edit – Timmy

2

EDIT

Cela dépend de la façon dont vous avez appelé le fichier input éléments. Si vous avez suivi mon approche ci-dessous, vous pouvez obtenir le nombre de fichiers avec:

if (empty($_FILES['attach']['name'])) 
    $count_files = 0; 
else 
    $count_files = count($_FILES['attach']['name']); 

Essayez var_dump($_FILES) voir le tableau $_FILES complet, au cas où vous avez des doutes sur sa structure.

ORIGINAL

Quelque chose comme ça, avec Javascript:

<script type="text/javascript"> 
var j = 2; //default two files 
function novoa() { 
    j = j+1; 
    var elem = document.createElement("input"); 
    var par = document.getElementById("filed"); 
    elem.setAttribute("type", "file"); 
    elem.name = "attach[]"; 
    elem.id = "file_" + j; 
    par.appendChild(elem); 
} 
function delult() { 
    if (j == 0) return; 
    var elem = document.getElementById("file_" + j); 
    var par = document.getElementById("filed"); 
    j = j-1; 
    par.removeChild(elem); 
} 
</script> 
... 
<p id="addupl"><a href="javascript:novoa()">More files</a> | 
    <a href="javascript:delult()">Less files</a></p> 
<p id="filed"> 
<input type="file" name="attach[]" id="file_1" /> 
<input type="file" name="attach[]" id="file_2" /> 
</p> 
+0

désolé pour vous d'avoir à traverser tous ces problèmes, s'il vous plaît voir mon édition. – Timmy

1

OMG vous demandez comment gérer ce formulaire?
il est un exemple à droite sur la page de manuel:
http://www.php.net/manual/en/features.file-upload.post-method.php

<?php 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     move_uploaded_file($tmp_name, "data/$name"); 
    } 
} 
?> 
1

Dans votre script PHP, faire un var_dump($_FILES). La sortie devrait vous aider à aller plus loin dans la direction que vous souhaitez. Jetez un oeil à filesystem functions de PHP pour plus d'informations sur ce que vous pouvez faire avec les fichiers, après avoir utilisé la fonction move_uploaded_file.

Afin de répondre vraiment à votre question Comment gérer le téléchargement, vous auriez besoin de nous dire ce que vous voulez accomplir/faire avec les fichiers.

Questions connexes