2017-10-14 33 views
0

以下是我的代碼,它可以正常工作,但是如何在圖像名稱已經存在時在圖像名稱中添加「_copy」,然後將其上傳到「藝術品」目錄並插入更新「藝術作品」表中的名稱更改圖像名稱,如果已經存在,然後上傳到數據庫和目錄

$targeta = "artworks/"; 
    $targeta = $targeta . basename($_FILES['image']['name']); 
    $pic=($_FILES['image']['name']); 

    if(move_uploaded_file($_FILES['image']['tmp_name'], $targeta)){ 
     echo "Image uploaded"; 
    } 
    else { 
     echo "Image name already exist"; 
    } 
    $results = $db->query("INSERT INTO Artworks (`Image`) VALUES ('$pic');"); 
    if($results){ 
    echo "New row inserted"; 
    } 
+0

在將prrfix添加到文件名之前,先用'file_exists'和'!is_dir'進行檢查。 – frz3993

+1

_NEVER_ trust'$ _FILES ['image'] ['name']'以任何方式。將它存儲在數據庫中,但是使用從數據庫返回的_id_作爲文件系統上的實際密鑰(並且如果要將它們存儲在Web可訪問的位置中,則添加一個隨機密鑰)。 – MatsLindh

+1

當你將'$ pic'插入數據庫時​​,你並沒有逃避'$ pic'的價值,所以你很容易受到SQL注入攻擊(即不信任上傳文件的'name') – MatsLindh

回答

0

檢查是否file_exists($targeta)並重命名並將其移動到目的地。

$target_path = "artworks/"; 
$targeta = $target_path . basename($_FILES['image']['name']); 
$pic=($_FILES['image']['name']); 

if(file_exists($targeta)) { 
    $lastdot = strrpos($_FILES['image']['name'], '.'); 
    $basefilename = substr($_FILES['image']['name'], 0, $lastdot); 
    $extension = substr($_FILES['image']['name'], $lastdot); 
    $pic = $basefilename . '_copy' . $extension; 
    $targeta = $target_path . $pic; 
    echo "Image name already exist. Renaming to: " . $pic; 
} 

if(move_uploaded_file($_FILES['image']['tmp_name'], $targeta)){ 
    echo "Image uploaded"; 
} 
else { 
    echo "Cannot move file to destination"; 
} 
$results = $db->query("INSERT INTO Artworks (`Image`) VALUES ('$pic');"); 
if($results){ 
echo "New row inserted"; 
} 
+0

你的回答看起來正確我沒有工作,顯示語法錯誤,線350上的意外'$ extension'(T_VARIABLE)(其中聲明瞭$ extension變量)@Memborg –

+0

它是因爲Memborg在'$ basefilename = substr($ _ FILES [ 'image'] ['name'],0,$ lastdot)'我已經更新了它。現在嘗試@ShujaatShaikh –

+0

是@B。德賽絕對正確,這是問題..解決!謝謝 –

相關問題