在我描述我的問題之前,我真的在互聯網上進行了搜索,並在此處查找了解決方案。我發現了一個和我的問題非常相似的問題,但是給出的答案並不是很接近,所以我在這裏寫下我的問題。
問題是:
我有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']
是空的。
任何幫助將不勝感激。
謝謝。
如果您使用ajax提交,那麼在表單上設置'enctype'就沒用了。你需要設置ajax請求來做同樣的事情。谷歌的「上傳文件與Ajax」有一堆示例,顯示如何使用'formData'而不是序列化。 –
Ajax上傳二進制數據需要一些額外的工作和瀏覽器支持。你在測試什麼? –