【发布时间】: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