2014-02-11 38 views
0

如果有人可以幫我解決這個問題,我將不勝感激。 問題是我有一個頁面,我上傳的圖像和它的描述,但是當我更新圖像描述,並保持空白時,我按下提交更新描述文件,我的圖像消失,因爲我離開了文件空白,所以它將我以前的圖像替換爲空白。move_uploaded_file只有在選擇了文件

有什麼辦法可以更新描述字段,只有在設置了filefield的情況下才更新圖像?

在此先感謝。

繼承人我的代碼:

$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 

    move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name'])); 

    $updateSQL = sprintf("UPDATE tab_imagens SET imagem=%s, titulo=%s, idUser=%s WHERE idImagem=%s", 
         GetSQLValueString("images/slide/".($_FILES['imagem']['name']), "text"), 
         GetSQLValueString($_POST['titulo'], "text"), 
         GetSQLValueString($_POST['idUser'], "text"), 
         GetSQLValueString($_POST['idImagem'], "int")); 

    mysql_select_db($database_ligar, $ligar); 

    $Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error()); 
    $updateGoTo = "verImagensSlide.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
    $updateGoTo .= $_SERVER['QUERY_STRING']; 
    } 
    header(sprintf("Location: %s", $updateGoTo)); 
} 

謝謝大家對你的反應! 這是我如何解決它:

//do this if there is a file in filefield 
if(!empty($_FILES[ 'imagem' ]) && !empty($_FILES[ 'imagem' ][ 'tmp_name' ])){ 
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 

     move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name'])); 

    $updateSQL = sprintf("UPDATE tab_imagens SET imagem=%s, titulo=%s, idUser=%s WHERE idImagem=%s", 
         GetSQLValueString("images/slide/".($_FILES['imagem']['name']), "text"), 
         GetSQLValueString($_POST['titulo'], "text"), 
         GetSQLValueString($_POST['idUser'], "text"), 
         GetSQLValueString($_POST['idImagem'], "int")); 


    mysql_select_db($database_ligar, $ligar); 

    $Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error()); 

    $updateGoTo = "verImagensSlide.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
    $updateGoTo .= $_SERVER['QUERY_STRING']; 
    } 
    header(sprintf("Location: %s", $updateGoTo)); 
}} 
//do this if there is NO FILE in filefield 
else 
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 
    $updateSQL = sprintf("UPDATE tab_imagens SET titulo=%s, idUser=%s WHERE idImagem=%s", 
         GetSQLValueString($_POST['titulo'], "text"), 
         GetSQLValueString($_POST['idUser'], "text"), 
         GetSQLValueString($_POST['idImagem'], "int")); 


    mysql_select_db($database_ligar, $ligar); 

    $Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error()); 

    $updateGoTo = "verImagensSlide.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
    $updateGoTo .= $_SERVER['QUERY_STRING']; 
    } 
    header(sprintf("Location: %s", $updateGoTo)); 
} 
+0

如果您在上傳之前未在中選擇圖片,是否會有$ _FILES ['imagem'] [...]'的值?或換句話說,它不會拋出一個錯誤? – Martin

+1

使用條件語句構建您的sql,只添加非空變量的字段/值。如果沒有錯誤,只移動上傳的文件,請參閱手冊。 – jeroen

+0

嗨馬丁,沒有沒有錯誤,它只是刪除了以前的圖像,我想保留以前的圖像,當我按下提交時,文件空間是空的。 –

回答

0
if(!empty($_FILES[ 'imagem' ]) && !empty($_FILES[ 'imagem' ][ 'tmp_name' ]) 
    move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name'])); 

應該做的伎倆。

請確保您還使用相同的if語句來修改SQL查詢。它應該更新表

0

一個方法是測量上傳圖片的大小,如果它的體積更小,然後讓我們說1KB不移動文件和更新數據庫

if($_FILES['file']['size'] > 1024) // bigger then 1 KB 

這樣你也可以防止腳趾上傳大文件。

if ( (isset($_POST["MM_update"])) && 
     ($_POST["MM_update"] == "form1") && 
     ($_FILES['file']['size'] > 1024)) && 
     ($_FILES['file']['size'] < 1024000)) 
{ 

    move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name'])); 

    $updateSQL = sprintf("UPDATE tab_imagens SET imagem=%s, titulo=%s, idUser=%s WHERE idImagem=%s", 
         GetSQLValueString("images/slide/".($_FILES['imagem']['name']), "text"), 
         GetSQLValueString($_POST['titulo'], "text"), 
         GetSQLValueString($_POST['idUser'], "text"), 
         GetSQLValueString($_POST['idImagem'], "int")); 

    mysql_select_db($database_ligar, $ligar); 

    $Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error()); 
    $updateGoTo = "verImagensSlide.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
    $updateGoTo .= $_SERVER['QUERY_STRING']; 
    } 
    header(sprintf("Location: %s", $updateGoTo)); 
} 
1

如果你可以告訴一個文件是真的,你有該文件的細節在陣列中檢查「錯誤」字段的值上傳的圖片路徑和名稱。

只要你使用的是「不對tmp_name」字段來獲得臨時名稱,將上傳的文件,你可以在同一水平上檢查文件是否被成功上傳的方式。

該字段的值是0(或更好,它是恆定UPLOAD_ERR_OK的值),如果一切正常。

因此,所有你需要做的是if語句您的來電換到move_uploaded_file功能的,這樣的事情:

if (UPLOAD_ERR_OK == $_FILES['imagem']['error']) 

後來編輯:一定要使用類似的邏輯來判斷是否您還需要更新數據庫中的名稱。

您可以看到,在move_uploaded_file函數的手冊頁中,有一個示例使用類似的邏輯來判斷上傳是否成功。唯一的區別是在那個例子中上傳了多個文件,並且在「錯誤」鍵下有一個數組,而你將有一個標量(int)值。

相關問題