2012-08-10 61 views
1

我正在開發一個小型的用戶維護的在線商店,並試圖讓我的最終用戶(商店管理員)能夠上傳產品圖形。但是,當我運行此腳本時,它實際上並不存儲圖像。我從這裏的各種技巧和教程構建了這個腳本,並且除了圖像上傳部分以外都得到了一切。PHP腳本沒有正確上傳圖片

// Set the image target directory here 
$target = "itemImages/"; 
$target = $target . basename($_FILES["image"]["name"]); 

// Variables get POSTed here - just tack new ones on at the end. 
// Various POSTs omitted for brevity 

$pic=($_FILES["image"]["name"]); 

// Places the picture in the folder 
if(move_uploaded_file($_FILES["image"]['tmp_name'], "itemImages/")) 
{ 
echo "The file " . basename($_FILES['uploadedfile']["name"]) . " has been   uploaded.<br />"; 
}else { 
    echo "There was an issue adding this item. Please try again.<br />"; 
} 

// Writes variables to the database 
mysql_query("INSERT INTO tbl_item (itemNAME,itemDESC,itemCOST,itemHCOL,itemHSIZ,itemIMG) 
VALUES ('$itemName','$itemDesc','$itemCost','$hasColor','$hasSize','$pic')"); 

mysql_close($con); 
?> 

任何幫助,提示,建議,洞察力等將非常感激。

+0

是mysql更新和成功消息還行嗎? – 2012-08-10 14:35:26

+1

你的'form'標籤上是否有正確的'enctype'? – Cfreak 2012-08-10 14:35:53

+0

你能告訴我們

標籤嗎? – 2012-08-10 14:37:26

回答

3

move_uploaded_files需要一個文件名作爲其目標。它不盲目地移動到一個目錄下,這樣

move_uploaded_files($_FILES..., 'somedir/somefile.txt'); 

作品,但

move_uploaded_file($_FILES..., 'somedir/'); 

不會。

另外請注意,您的數據庫操作易受到SQL injection attacks的影響。您盲目地插入上傳文件的遠程名稱(['name']通過$ pic),並且該名稱完全由遠程用戶控制。

+0

謝謝,在您的幫助下,我已經完成了這項工作。我也很感謝你對SQL注入的投入,並且會進行一些研究來糾正它。我並不擔心,因爲整個事情是公司員工的內部事務,但使用最佳實踐總是很好。 – CptTritium 2012-08-10 15:01:36

+0

即使它在內部使用並且不太可能受到攻擊,某個人在某個時候會上傳一個文件,該文件中包含一個'''或其他SQL元字符,並將其搞亂。 – 2012-08-10 15:08:40

+0

錯誤的轉義是一個錯誤,並且如果存在安全漏洞,通常可能會引發錯誤。 – tadman 2012-08-10 15:35:47

0

確保itemImages文件夾中有用戶寫權限您的Web服務器(例如Apache)正在運行的(例如www-data

0

確保.php文件和您要寫入的文件夾具有相同的「所有者」。或者嘗試將itemImages文件夾的權限設置爲777(這不是建議的,只是一種調試策略)