2013-09-24 4 views
0

Я создаю простой загрузочный портал для своего офиса. Я успешно закодировал его, чтобы передать загруженные элементы в папку с именем/uploads, однако я хотел бы добавить выпадающий список, чтобы выбрать между несколькими подпапками, чтобы люди могли лучше организовать материал, который там находится.Загрузка файла PHP - выпадающий список подкачки

Это мой HTML

<html> 
    <body> 
     <form action="upload.php" method="post" enctype="multipart/form-data"> 
      <label for="file">Filename:</label> 
      <input type="file" name="file" id="file"><br> 
      <select name="Folder"> 
       <option value="OurPhoto">Our Photos</option> 
       <option value="StockPhoto">Stock Photos</option> 
       <option value="Video">Videos</option> 
       <option value="Document">Documents</option> 
       <option value="Other">Other</option> 
      </select> 
      <input type="submit" name="submit" value="Submit"> 
     </form> 
    </body> 
</html> 

И это мой PHP для upload.php

if ($_FILES["file"]["error"] > 0) { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
} 
else { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) { 
     echo $_FILES["file"]["name"] . " already exists. "; 
    } 
    else { 
     move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
    } 
} 

Мои подкаталоги с именем MCPhoto, Stockphoto, видео, документы и прочее. Мое знание PHP слабое, поэтому я действительно не знаю, куда идти отсюда.

+0

ли ** НЕ ** использовать этот код. Вы открываете свой доступ к компромиссу удаленного ПО COMPLETE, позволяя вашим пользователям набирать файл ANYWHERE на вашем сервере с именем THEIR. –

+0

Что бы вы предложили? У меня есть пароль для паролей, поэтому для того, чтобы даже получить доступ к нему, вам нужно установить login/psw, установленный с помощью cpanel, а также пароль, который установлен в access.php – Artsen

+0

, по крайней мере, вычистить HELL из '[' name '] '. Это полностью под контролем пользователя и может включать в себя информацию о пути. Вы, по крайней мере, проверяете дубликаты загрузок, но подумайте, что может произойти, если '['name'] =/etc/passwd' или' c: \ windows \ system32 \ ntoskrnl.exe'. Вы также должны ограничивать допустимые типы файлов, а ** NOT ** помещать их в то место, где они могут быть достигнуты прямым URL-адресом. –

ответ

1

Вам нужно будет получить значение поля папки из переменной $_POST и включить его в код загрузки.

if (file_exists("upload/".$_POST["Folder"] . "/" . $_FILES["file"]["name"])) 
    { 
    echo $_FILES["file"]["name"] . " already exists. "; 
    } 
else 
    { 
    move_uploaded_file($_FILES["file"]["tmp_name"], 
    "upload/" . $_POST["Folder"] . "/" . $_FILES["file"]["name"]); 
    echo "Stored in: " . "upload/" . $_POST["Folder"] . "/" . $_FILES["file"]["name"]; 
    } 
} 
1

Вы могли бы использовать что-то вроде этого:

$folder = $_POST['Folder']; 

// sanitise $folder 

$location = 'upload/' . rtrim($folder, '/') . '/' . $_FILES['file']['name']; 

if(file_exists($location)) { 
    echo $_FILES['file']['name'] . ' already exists.'; 
} 
else { 
    move_uploaded_file($_FILES['file']['tmp_name'], $location); 
    echo 'Stored in: ' . $location; 
} 

сделать абсолютно уверены, что Folder вход безопасен, прежде чем использовать его в $location.

+0

Убедитесь, что папки уже существуют. В противном случае OP необходимо будет добавить директиву 'mkdir'. –

+0

Санитария '$ folder' должна запрещать запись в папку, которая не существует - это одна из ее целей. –

+0

Это отлично поработало для меня, спасибо большое – Artsen

0

Этот код имеет слишком много отверстий для защиты. Я пытаюсь помочь вам, когда я говорю, что вы должны сделать гораздо больше исследований, прежде чем пытаться это сделать.

Пожалуйста, по крайней мере читать: http://blog.insicdesigns.com/2009/01/secure-file-upload-in-php-web-applications/

Вы можете нанять профессионала, потому что безопасность вашего сервера находится под угрозой.

0

Это то, что вы можете сделать здесь ..

, так как вы хотите хранить файлы в подпапках вашего выбора, вам нужно сначала получить имя вложенной с помощью

$_POST['folder'] 

или

$GLOBALS['_POST']['folder'] 

, а затем хранить в переменной $ LOC, а затем вы можете добавить коды таким образом

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" .$loc."/". $_FILES["file"]["name"]); 

Довольно новый с этим сайтом, так что я не знаком с тем, как показать коды в хорошем образе ...

Надеется, что это поможет вам

Смежные вопросы