2012-08-10 56 views
1

我敢肯定我做的事情很傻,但我已經檢查並重新檢查了這一點。這是我的照片上傳器,意味着將照片文件本身保存到一個文件夾(名爲「reccs」),然後將照片的名稱保存到我的數據庫中的一行。數據庫部分完美工作,但我的照片沒有顯示在文件夾中。 它顯示沒有錯誤,似乎工作(我收到「成功」的消息)。確認!PHP照片上傳到MySQL和單獨的文件夾

代碼如下。感謝任何見解。

$link = mysql_pconnect($host, $username, $password); 
$db = mysql_select_db ($dbname); 

$target = "reccs/"; 
$target = $target . basename($_FILES['photo']['name']); 
$pic=($_FILES['photo']['name']); 

mysql_query("UPDATE login SET recc = '$pic' WHERE username = '".$_SESSION['user']['username']."'"); 

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) 
{ 

echo "The file has been uploaded, and your information has been added to the directory"; 
} 
else { 

echo "Sorry, there was a problem uploading your file."; 
} 
+0

注意,SQL是容易受到SQL注入。一定要在$ _FILES ['photo'] ['name']'上調用'mysql_real_escape_string()'。從長遠來看,考慮轉向更新的MySQL API(如PDO或MySQLi),以支持準備好的語句。 – 2012-08-10 02:17:11

+0

你對目標文件夾有寫入權限嗎? – 2012-08-10 05:22:42

回答

0

reccs在它前面有斜槓嗎?在知道move_upload_file成功之後,似乎mysql更新查詢在if語句內部會更好。

0

試試;

if(move_uploaded_file($pic, $target)) 
0

根據您的服務器設置,你可能必須設置$目標是一個絕對路徑,而不是相對的。至少它對於你的主目錄應該是絕對的,所以如果reccs是根目錄目錄中的目錄,那麼將$ target設置爲/reccs/file.name。

原因是文件被上傳到/ tmp,這是在根(OS)級而不是託管級,所以相對於/ tmp的路徑通常是沒有意義的。

0

保存同名照片是非常糟糕的做法。在上傳照片之前,我會建議你做下面的事情。

  • 提取名稱和擴展名。
  • 現在檢查該分機是否有效。如果有效,則進一步進行
  • 第一次修剪,然後用單個空格清除所有多個空格。
  • 現在小寫的文件名,並改變所有的空間與_和追加時間戳與文件名。
  • 刪除所有特殊字符(', " , \ etc
  • 現在添加具有該擴展名的文件名。

然後存儲到數據庫