【问题标题】:Ajax File Upload works with xampp but not on online serverAjax 文件上传适用于 xampp,但不适用于在线服务器
【发布时间】:2020-02-17 19:56:50
【问题描述】:

我有 2 个 HTML 页面。一个带有用于添加帖子的表单(在这种情况下我有一个输入类型文件),另一个带有用于更新帖子的表单(在这种情况下我没有输入类型文件)。两种形式都具有相同 id 的按钮来执行 ajax 调用。两种形式的 PHP 文件是相同的,它插入或更新帖子的数据。 js 文件获取用户输入的值并执行 ajax 调用。

HTML(添加帖子)

<form id="form">
   <input id="titleID" type="text" value="" required />
   <input type="file" id="inputVideo" required />
   <input type="submit" id="submitData" value="SEND DATA" />
</form>

HTML(更新帖子。这是另一个页面。所以相同的 id 没关系)

<form id="form">
   <input id="titleID" type="text" value="SomeTitleValue" />
   <input type="hidden" id="idHidd" value="SomeIdValue" />
   <input type="submit" id="submitData" value="SEND DATA" />
</form>

JS(获取输入值并对php文件进行ajax调用)

$(document).ready(function() {
   $(document).on('submit', '#form', function(e) {
      e.preventDefault();

      // get values of inputs and create a formData object
      // if the value is undefined, append in formData a empty string; else append the value

      // Get id
      if ( $('#idHidd').val() != undefined ){
         var id= $('#idHidd').val();
         formData.append('id', id);
      } else {
         var id= ""
         formData.append('id', id);
      }

     // Get file video
     if ( $('#inputVideo')[0] != undefined ){
         var video= $('#inputVideo')[0].files[0]
         formData.append('video', video);
     } else {
         var video =""
         formData.append('video', video);
     }

     // Get title (always present)
     var title= $('#title').val();
     formData.append('title', title);


     // AJAX Call
     $.ajax({
        type: "POST",
        url: "urlToPHP", 
        dataType: "JSON",   
        processData: false,
        contentType: false,
        cache: false,
        data: formData,
        success: function(msg) { 
                    alert(msg)
        }
      });
   });
});

PHP

//include connect db   

//Get tite and id 
$id= $_POST['id'];
$title= $_POST['title'];

// if there isn't an id, i do an insert and get the video in $_FILES
if ($id == ""){
    $video= $_FILES['video'];

    // DO QUERY FOR INSERT NEW POST AND MOVES THE FILE ON SERVER
}

if ($id != ""){

    // DO QUERY FOR UPDATE A POST
}

问题:在本地使用 xampp,一切正常。我可以插入新帖子,也可以进行更新。在在线服务器上,它仅适用于更新。当我进行插入时,在 log_err 中我有消息指出索引“id”、“视频”和“标题”未定义。就像 $_POST 和 $_FILES 为空一样。但是在控制台(使用console.log)中,我可以看到formData 对象很好,并且所有值都完美地附加了所有索引。事实上,更新工作,数据与插入相同,除了文件视频。也许是因为在插入中有一个输入类型“文件”?但是使用 xampp 它可以工作。 我还尝试从 CPanel 禁用 mod_security。但它不一样。 有人有解决办法吗?

Ps:对不起,如果代码不完美,但我必须做一个简短的版本以获得更好的压缩。

【问题讨论】:

  • 首先启用错误报告并查看开发者控制台。
  • 已经完成。控制台中没有错误。当我在 php 文件中插入时,唯一的错误是在日志文件中。错误在 php.ini 中。不在js中。 $_POST 为空。但仅限在线服务器上。不在本地使用 xampp
  • 处理文件通常涉及使用带有 POST 方法的$_FILES 超全局。我知道的就这么多。我不是 JS 人,所以如果这是 JS 相关的,你需要等待可以帮助的人。
  • 是的,你是对的。当我进行插入时,$ _FILES 也是空的。我忘了说。谢谢你
  • 在网络面板中检查请求时看到了什么?确保您的 urlToPHP 没有无意重定向,因为这就是您丢失 POST 数据的方式。

标签: php jquery json ajax xampp


【解决方案1】:

好的,我解决了我的问题。

问题在于文件的大小。我在 xampp 上更改了它,但在服务器上没有。

我以为自动报告了有关文件大小的错误, 无需检查。相反,如果没有具体检查文件的大小,我只有未定义索引的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 2012-09-09
    • 2014-03-07
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多