2013-09-24 101 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,圖像庫內,視頻,文檔和其他。 我的PHP知識有點弱,所以我不知道該從哪裏去。

+0

做**不**使用此代碼。通過允許您的用戶隨時隨地在您的服務器上隨意塗鴉文件,並選擇他們的名字,您就可以打開一扇完整的遠程服務器折中之門。 –

+0

然後你會有什麼建議?我有目錄密碼保護,所以爲了甚至訪問它,你需要通過cpanel設置的登錄/ psw,以及在access.php – Artsen

+0

中設置的密碼至少將HELL從'['名稱']參數。這完全由用戶控制,並且可以包含路徑信息。你至少要檢查重複上傳,但考慮如果'['name'] =/etc/passwd'或者'c:\ windows \ system32 \ ntoskrnl.exe'會發生什麼情況。你還應該限制允許的文件類型,而不是**將它們放在可以通過直接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

消毒'$文件夾'應該禁止寫入不存在的文件夾 - 這是它的目的之一。 –

+0

這對我很好,非常感謝你 – Artsen

0

這是你可以在這裏做什麼..

既然你想將文件存儲到你的選擇,你需要使用

$_POST['folder'] 

先獲取子文件夾名稱的子文件夾
$GLOBALS['_POST']['folder'] 

,然後存儲到像$ LOC一個變量,然後你可以用這種方式添加代碼

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

與本網站相當新的,所以我不熟悉如何顯示在一個良好的方式代碼...

希望它會幫助你

相關問題