【发布时间】:2017-03-29 22:56:53
【问题描述】:
在描述我的问题之前,我确实在互联网和本网站上进行了搜索以找到解决方案。我发现了一个与我的问题非常相似的问题,但是给出的答案甚至不接近,所以我在这里写我的问题。
问题是:
我有form 有一些输入字段加上input type='file' 用于上传图像。 jquery-ui dialog 里面的这个表单,当我提交 form 时,所有字段都应该是响应,除了 input type='file'for 图像它从不携带图像的任何数据。
这是解释我的问题的代码:
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 上传二进制数据需要一些额外的工作和浏览器支持。你在测试什么?
标签: javascript php jquery ajax jquery-ui