【问题标题】:upload image from multiple form with ajax and php使用 ajax 和 php 从多个表单上传图像
【发布时间】:2021-08-14 15:06:03
【问题描述】:

在 PHP 页面中使用多个表单标签来注册用户信息。 使用 ajax 收集数据并发布到注册 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);
    }
});

新注册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:未定义索引:文件在 .... 在线 ....

【问题讨论】:

  • 你应该发布一个FormData 对象。
  • 我知道,但要在注册 php 文件中管理我的数据,我需要通过数据发送它。
  • 你知道如何通过追加或其他方式将这种类型的数据转换为FormData吗?
  • 您创建一个 FormData 对象 (new FormData()),然后将值附加到它。另一种方法可能是在html中设置一个表单,类型(方法?)multipart/formdata,并使用提交按钮/功能发布。

标签: javascript php jquery ajax upload


【解决方案1】:

POST method uploads提供

确保您的文件上传表单具有属性 enctype="multipart/form-data" 否则文件上传将无法正常工作。

您当前的解决方案缺少 enctype,这就是为什么您的文件没有上传到服务器,因此不在超全局变量 $_FILES 中。


正如ferikeem 已经说过的那样。将您的数据包装在 FormData 对象中并以这种方式发送。 见:https://stackoverflow.com/a/5976031/10887013

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);
    }
});

【讨论】:

    【解决方案2】:

    $_FILES["file"],这是你的问题。

    $_FILES 数组键 "file" 不存在。如我所见,您需要将$_FILES["file"] 更改为$_FILES["upimage"]

    【讨论】:

    • 不,我为示例编写此代码,这也不适用于 $_FILES["upimage"]。
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2017-11-11
    • 2023-03-04
    • 2015-04-23
    • 2017-01-21
    相关资源
    最近更新 更多