猿问

在 php 中处理带有文件和其他输入的已发布 formData 对象

我需要处理来自表单发布的输入,但我不知道如何在 php 中执行此操作,因为当我编写 $_POST[“header”] 时,它 var_dumps null。

我正在创建 formData 对象并插入表单中的所有输入。然后用ajax发布。

你能帮我么?我需要处理“标题”、“内容”、“密码”和文件。

<form method="post" enctype="multipart/form-data" id="uploadFiles">

    <label for="newsHeader" id="headerLabel">Nadpis</label>

    <input type="text" name="newsHeader" id="newsHeader">

    <label for="content" id="contentLabel">Text novinky</label>

    <textarea name="content" id="content"></textarea>

    <label for="files" id="filesLabel">Fotky</label>

    <input type="file" name="files" id="files" accept="image/jpeg" multiple>

    <label for="password" id="passwordLabel">Heslo pro upload</label>

    <input type="text" name="password" id="password">

    <button type='submit' id='uploadFilesSubmit'>NAHRÁT</button>

</form>




$("#uploadFiles").submit(function(event){

        event.preventDefault();

        var formDataObj = new FormData(),

        header = $("#newsHeader").val(),

        content = $("#content").val(),

        password = $("#password").val();


        formDataObj.append("header", header);

        formDataObj.append("content", content);

        formDataObj.append("password", password);

        $.each($("#files")[0].files, function(i, file) {

            formDataObj.append('file', file);

        });


        console.log(Array.from(formDataObj));



        $("#uploadFilesSubmit").html("<div class='buttonSubmitIcon'><i class='fas fa-sync'></i></div>");

        $.ajax({

            method: "POST",

            url: "uploadNews.php",

            data: {

                formDataObj: formDataObj

            },

            dataType: 'json',

            contentType: false,

            processData: false,

            success: function(results){


            }, error: function(){


            }


        });



    });

在 uploadNews.php 我有这个:


exit(json_encode(var_dump($_POST["header"])));

它总是返回“未定义索引:标题”,与内容或计数相同($_FILES[“文件”][“名称”])


我想要的只是以某种方式获得发布的值..非常感谢


慕桂英4014372
浏览 127回答 0
0回答

慕哥6287543

您只需通过 传递实际的 formDataObj 变量即可。这不是通过 ajax => 传递 的正确 $.ajaxsyntaxFormDataformDataObj: formDataObjA FormData 本身是一个 object ,它存储您的数据,因此您正在做的是创建另一个 < /span>object 当你通过 data您现在可以var_dump(header)或var_dump($_FILES["file"]["name"])查看进入您的PHP文件的所有内容。现场演示:(将 jQuery 代码更改为下面的代码即可正常工作)$("#uploadFiles").submit(function(event) {  event.preventDefault();  var formDataObj = new FormData(),    header = $("#newsHeader").val(),    content = $("#content").val(),    password = $("#password").val();  formDataObj.append("header", header);  formDataObj.append("content", content);  formDataObj.append("password", password);  $.each($("#files")[0].files, function(i, file) {    formDataObj.append('file', file);  });  $("#uploadFilesSubmit").html("<div class='buttonSubmitIcon'><i class='fas fa-sync'></i></div>");  $.ajax({    method: "POST",    url: "uploadNews.php",    data: formDataObj, //just pass the form Data object.    dataType: 'json',    contentType: false,    processData: false,    success: function(results) {    },    error: function() {    }  });});<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><form method="post" enctype="multipart/form-data" id="uploadFiles">  <label for="newsHeader" id="headerLabel">Nadpis</label>  <input type="text" name="newsHeader" id="newsHeader">  <label for="content" id="contentLabel">Text novinky</label>  <textarea name="content" id="content"></textarea>  <label for="files" id="filesLabel">Fotky</label>  <input type="file" name="files" id="files" accept="image/jpeg" multiple>  <label for="password" id="passwordLabel">Heslo pro upload</label>  <input type="text" name="password" id="password">  <button type='submit' id='uploadFilesSubmit'>NAHRÁT</button></form>
随时随地看视频慕课网APP
我要回答