2016-06-23 1 views
1

Je dois autoriser les utilisateurs à télécharger plusieurs fichiers, puis choisir le nom de fichier en utilisant un menu déroulant. Les fichiers seront utilisés pour le site Web des options de mon école et les fichiers doivent être nommés en utilisant les codes de cours. Malheureusement, les utilisateurs nomment souvent mal, donc je veux leur permettre de télécharger des fichiers et de sélectionner le cours. Le plan est de les renommer automatiquement pour que le code soit correct. Les utilisateurs sélectionnent leur nom, puis téléchargent les fichiers afin que leurs téléchargements se fassent dans un dossier dédié.Comment puis-je utiliser PHP pour télécharger et renommer plusieurs fichiers en utilisant un menu déroulant pour les noms de fichiers?

Je peux le faire pour un fichier mais je dois pouvoir le faire pour plus d'un fichier. Je peux télécharger plusieurs fichiers, mais je n'arrive pas à les renommer. Le problème est que je ne sais pas comment lier plusieurs nouveaux noms de fichiers au tableau qui peut être créé en utilisant $ _FILES

Voici le code pour télécharger et renommer un seul fichier (il utilise des fichiers .jpg mais sera changé pour les fichiers .pdf en temps voulu) ...

<?php 
 

 
// Makes directory and changes file name for one file 
 

 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
 
\t 
 
\t $uploads = $_POST['name']; 
 
\t if (!is_dir($uploads)) 
 
\t { 
 
\t \t mkdir($uploads); 
 
\t } 
 
\t 
 
\t $info = pathinfo($_FILES['userFile']['name']); 
 
\t $ext = $info['extension']; // get the extension of the file 
 
\t $newname = $_POST['new_name'].".".$ext; 
 

 
\t $target = $uploads.'/'.$newname; 
 
\t move_uploaded_file($_FILES['userFile']['tmp_name'], $target); 
 
\t 
 
} 
 
?> 
 

 
<form name="UploadForm" enctype="multipart/form-data" method="post"> 
 
    
 
    <p> 
 
    Find the file(s) you want to upload and click the "Upload" button below. 
 
\t </p> 
 
\t <p> 
 
\t <b>Teacher Code:</b> 
 
\t \t <select name="name"> 
 
\t \t \t <option value="Mr_A">Mr A</option> 
 
\t \t \t <option value="Mr_B">Mr_B</option> 
 
\t \t \t <option value="Mr_C">Mr C</option> 
 
\t \t </select> 
 
\t </p> 
 
\t 
 
\t <p>Select the course from the box and then select the .pdf outline...</p> 
 

 
    
 
\t \t <p> 
 
\t \t 
 
\t \t <select name="new_name"> 
 
\t \t \t <option value="">Choose...</option> 
 
\t \t \t <option value="L1PROG01">Programming - Level 1</option> 
 
\t \t \t <option value="L2PROG01">Programming - Level 2</option> 
 
\t \t \t <option value="L3PROG01">Programming - Level 3</option> 
 
\t \t \t <option value="L1WEBD01">Web Design - Level 1</option> 
 
\t \t \t <option value="L2WEBD01">Web Design - Level 2</option> 
 
\t \t \t <option value="L3WEBD01">Web Design - Level 3</option> 
 
\t \t </select> 
 
\t \t 
 
\t \t <input name="userFile" type="file" /> 
 
\t \t 
 
\t \t </p> 
 
\t \t 
 
    <br/>Check this box <input autocomplete="off" type="checkbox" checked name="overwrite" /> to <strong>overwrite</strong> existing files. 
 
    <input type="submit" value="Upload" /> 
 
    </form>

Répondre

0

Html

<input name="files[]" type="file" multiple="multiple" />

PHP

$count = count($_FILES['files']['name']); 

for($i=0; $i<$count; $i++) {  

$temp = explode(".", $_FILES["files"]["name"][$i]); 
$newfilename = "new_name". '.' . end($temp); 
move_uploaded_file($_FILES["files"]["tmp_name"][$i], "upload/" . $newfilename); 

} 
+0

Désolé, ce qui précède ne fonctionne pas pour moi. Il déplace les fichiers dans le dossier 'uploads' mais appelle le fichier 'new_name.jpg' . Les bonnes nouvelles sont qu'il renomme les fichiers. Les mauvaises nouvelles sont que je ne sais toujours pas comment renommer le fichier afin qu'il corresponde à la valeur que mes utilisateurs ont sélectionnée dans le menu déroulant. –

+0

ajouter un certain nombre de rand() avec ce nouveau nom, si vous fournissez le même nom pour tout le remplissage remplacera – Mani

+0

Le code que vous m'avez donné était génial - il manquait juste un peu dans le html (les crochets après 'new_name') . J'ai également modifié le php afin qu'il obtienne à la fois le nom du fichier et le fichier du formulaire que mes utilisateurs remplissent. J'ai posté le code de travail ci-dessous au cas où d'autres ont un problème similaire. J'avais besoin de noms différents pour mes fichiers ce qui rendait les choses un peu compliquées. –

0

Mise à jour: J'utilise le code de Mani (qui a beaucoup aidé) et il fonctionne maintenant. Voici le panneton ...

html:

\t <p>Select the course from the box and then select the .pdf outline...</p> 
 

 
\t \t <?php 
 
\t \t for ($n=0; $n<10; $n++) { 
 
\t \t ?> 
 
\t \t <p> 
 
\t \t \t \t 
 
\t \t <select name="new_name[<?php $n ?>]" value=""> 
 
\t \t \t <option value="">Choose...</option> 
 
\t \t \t <option value="L1PROG01">Programming - Level 1</option> 
 
\t \t \t <option value="L2PROG01">Programming - Level 2</option> 
 
\t \t \t <option value="L3PROG01">Programming - Level 3</option> 
 
\t \t \t <option value="L1WEBD01">Web Design - Level 1</option> 
 
\t \t \t <option value="L2WEBD01">Web Design - Level 2</option> 
 
\t \t \t <option value="L3WEBD01">Web Design - Level 3</option> 
 
\t \t </select>

et est ici le php mis à jour (ce qui est vers le haut de la page)

<?php 
 

 
// Makes directory and changes file name for many files. 
 

 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
 
\t 
 
\t $uploads = $_POST['name']; \t // folder name 
 
\t \t 
 
\t if (!is_dir($uploads)) 
 
\t { 
 
\t \t mkdir($uploads); 
 
\t } 
 
\t 
 
\t $count = count($_FILES['files']['name']); 
 

 
\t for($i=0; $i<$count; $i++) {  
 

 
\t $temp = explode(".", $_FILES["files"]["name"][$i]); 
 
\t $new_name = $_POST['new_name'][$i]; 
 
\t $newfilename = $new_name. '.' . end($temp); 
 
\t $target = $uploads.'/'.$new_name.".jpg"; 
 
\t move_uploaded_file($_FILES["files"]["tmp_name"][$i], $target); 
 

 
\t } 
 
\t \t 
 
\t } 
 

 
?>

Ce qui précède crée un dossier en fonction du nom des enseignants, puis leur permet de télécharger leurs fichiers (en les renommant correctement). Il écrase automatiquement les anciens fichiers, ce que je veux faire. Il ne pas encore données invalides/inattendues.