2016-11-15 44 views
1

在我描述我的問題之前,我真的在互聯網上進行了搜索,並在此處查找了解決方案。我發現了一個和我的問題非常相似的問題,但是給出的答案並不是很接近,所以我在這裏寫下我的問題。

問題是:
我有form有一些輸入字段加上input type='file'上傳圖像。這個表格在jquery-ui dialog裏面,當我提交form時,所有字段的響應應該是這樣的,除了input type='file'這個圖片以外,它永遠不會攜帶任何圖片數據。
這裏是解釋我的問題代碼:

update_form.php:

<form action="" class="fixed-dialog" method="post" id="customForm" enctype="multipart/form-data"> 
    <input type="file" class="form-group input-field" accept="image/jpg,image/png,image/jpeg,image/gif" id="image" name="image" /> 
</form> 

當用戶點擊按鈕Send,該代碼將火(JQuery的)

$("#send").click(function(){ 
    var all = $("#customForm").serialize(); 
    //the following condition is to check if all input fields were filled. 
    $.ajax({ 
     type: "POST", 
     url: "includes/update_user_info.php", 
     data: all, 
     success: function(data){ 
      if(data == 1){ 
       alert("You have update data successfuly"); 
       window.location = "index.php"; 
      }else{ 
       alert("there is an error"); 
      } 
     } 
    }); 
}); 

這裏是update_user_info.php:將圖像從tmp文件到其他文件

$user_image   = &$_FILES['image']['name']; 
$user_image_type  = &$_FILES['image']['type']; 
$user_temp_image  = &$_FILES['image']['tmp_name']; 
if(isset($_FILES['image'])){ 
    $_SESSION['errors'] = "it's set.\n"; 

    //the next statement is empty, it should carry some data. 
    $_SESSION['errors'] .= $_FILES['image']['tmp_name']; 
}else{ 
    $_SESSION['errors'] = "NOT SET YET!!!"; 
} 

$target = "./images/users_img/".$user_image; 
$source = $_FILES['image']['tmp_name']; 
//  if($_FILES['image']['error'] == 0){ 
      move_uploaded_file($_FILES['image']['tmp_name'],$target); 
      $_SESSION['errors'] .= "Target is: ".$_FILES['image']['tmp_name']; 
      if(is_uploaded_file($_FILES['image']['tmp_name'])){ 
       $_SESSION['errors'] .= "Target is: it Worked"; 
       echo 1; 
      }else{ 
       $_SESSION['errors'] .= "Target is: NOT WORKING"; 
       echo 1; 
      } 
//  }else{ 
//   $_SESSION['errors'] .= "Something went Wrong!!"; 
//   echo 1; 
//  } 

,當我試圖呼應$_FILES['image']['tmp_name'],或['name']['error'],它總是給我一個錯誤:
未定義指數:名稱/ tmp_name的值/或錯誤
isset($_FILES['image']) = TRUE 。但是:
$_FILES['image']['name']是空的。

任何幫助將不勝感激。
謝謝。

+1

如果您使用ajax提交,那麼在表單上設置'enctype'就沒用了。你需要設置ajax請求來做同樣的事情。谷歌的「上傳文件與Ajax」有一堆示例,顯示如何使用'formData'而不是序列化。 –

+0

Ajax上傳二進制數據需要一些額外的工作和瀏覽器支持。你在測試什麼? –

回答

1

我不相信你可以用這種方式發送文件輸入(只是通過序列化)。

這裏是你必須做的:

var data = new FormData(); 
jQuery.each(jQuery('#file')[0].files, function(i, file) { 
    data.append('file-'+i, file); 
}); 

然後你就可以通過AJAX

firstnameInputValue = $('#firstnameInput').val(); 
jQuery.ajax({ 
    url: 'php/upload.php', 
    data: { 
    file: data, 
    firstname: firstnameInputValue 
    }, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function(data){ 
    alert(data); 
    } 
}); 

發現有送他們吧:Sending multipart/formdata with jQuery.ajax

過去處理這個。

+1

作爲額外的參考,這裏是一個壯觀的插件,用於抽象此行爲並確保跨瀏覽器的一致性:http://malsup.com/jquery/form/。我以前用過它,它很棒。 – War10ck

+0

如果你在那裏發現它,那麼這個問題就是這個問題的重複。 –

+0

@CharlotteDunois是我已經標記了它 –