使用 ajax 和 php 从多个表单上传图片
upload image from multiple form with ajax and php
在PHP页面用多个表单标签注册用户信息。
使用 ajax 收集数据并使用 post 注册 PHP 页面现在我想将图像上传到服务器文件夹,但我失败了。
我的html代码:
<label for="upimage" class="btn btn-sm btn-primary mb-75 mr-75">Upload Image</label>
<input type="file" id="upimage" hidden accept="image/*" name="image"/>
Javascript代码:
let data1 = document.getElementById('data1').value,
data2 = document.getElementById('data1').value,
data3 = document.getElementById('data1').value,
upimage = document.getElementById('upimage').value;
$.ajax({
url:"././newregister.php",
method:"POST",
data:{action:'newregister', data1:data1, data2:data2,
data3:data3, upimage:upimage},
success:function(data){
alert(data);
}
});
newregister php 代码:
$uploads_dir = './uploads';
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["file"]["tmp_name"];
$name = $_FILES["file"]["name"];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
echo "Sucsess";
}
else
{
echo "Error" . $_FILES["file"]["error"] ;
}
ERR: Undefined index: file in .... on line ....
$_FILES["file"]
,这是你的问题。
在 $_FILES
中,数组键 "file"
不存在。如我所见,您需要将 $_FILES["file"]
更改为 $_FILES["upimage"]
。
提供
Be sure your file upload form has attribute enctype="multipart/form-data" otherwise the file upload will not work.
您当前的解决方案缺少 enctype,这就是为什么您的文件没有上传到服务器,因此不在超全局变量 $_FILES 中。
正如所说。将您的数据包装在 FormData 对象中并以这种方式发送。
参见:
JavaScript
let fd = new FormData();
fd.append("you_file_key_here", $("#upimage")[0].files[0]);
fd.append("data1", $("#data1")[0].value);
fd.append("data2", $("#data2")[0].value);
fd.append("data3", $("#data3")[0].value);
$.ajax({
url: "././newregister.php",
method: "POST",
data: fd,
processData: false,
contentType: false,
success: function(data){
alert(data);
}
});
在PHP页面用多个表单标签注册用户信息。 使用 ajax 收集数据并使用 post 注册 PHP 页面现在我想将图像上传到服务器文件夹,但我失败了。
我的html代码:
<label for="upimage" class="btn btn-sm btn-primary mb-75 mr-75">Upload Image</label>
<input type="file" id="upimage" hidden accept="image/*" name="image"/>
Javascript代码:
let data1 = document.getElementById('data1').value,
data2 = document.getElementById('data1').value,
data3 = document.getElementById('data1').value,
upimage = document.getElementById('upimage').value;
$.ajax({
url:"././newregister.php",
method:"POST",
data:{action:'newregister', data1:data1, data2:data2,
data3:data3, upimage:upimage},
success:function(data){
alert(data);
}
});
newregister php 代码:
$uploads_dir = './uploads';
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["file"]["tmp_name"];
$name = $_FILES["file"]["name"];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
echo "Sucsess";
}
else
{
echo "Error" . $_FILES["file"]["error"] ;
}
ERR: Undefined index: file in .... on line ....
$_FILES["file"]
,这是你的问题。
在 $_FILES
中,数组键 "file"
不存在。如我所见,您需要将 $_FILES["file"]
更改为 $_FILES["upimage"]
。
Be sure your file upload form has attribute enctype="multipart/form-data" otherwise the file upload will not work.
您当前的解决方案缺少 enctype,这就是为什么您的文件没有上传到服务器,因此不在超全局变量 $_FILES 中。
正如
JavaScript
let fd = new FormData();
fd.append("you_file_key_here", $("#upimage")[0].files[0]);
fd.append("data1", $("#data1")[0].value);
fd.append("data2", $("#data2")[0].value);
fd.append("data3", $("#data3")[0].value);
$.ajax({
url: "././newregister.php",
method: "POST",
data: fd,
processData: false,
contentType: false,
success: function(data){
alert(data);
}
});