提交数据到数据库时持续触发INVALID INPUT错误的求助
问题:提交模态框数据触发"ERROR: INVALID INPUT"错误
用户填写模态框后尝试将数据上传至数据库并在表格展示,点击提交时触发该错误。已检查所有变量名称一致且无拼写错误,但问题仍未解决。
错误来源PHP代码
if (isset($_POST['create'])){ if(isset($_POST['createdby']) && isset($_POST['itemold']) && isset($_POST['itemnew']) && isset($_POST['startdatetime']) && isset($_POST['enddatetime']) && isset($_POST['approver1']) && isset($_POST['approver2']) && isset($_POST['approver3']) && isset($_POST['approver4']) && isset($_POST['approver5']) && isset($_POST['approver6']) && isset($_POST['approver7']) && isset($_POST['approver8']) && isset($_POST['note']) && isset($_POST['file']) && isset($_POST['docname'])){ echo json_encode(createFile($_POST['createdby'], $_POST['itemold'], $_POST['itemnew'], $_POST['startdatetime'], $_POST['enddatetime'], $_POST['approver1'], $_POST['approver2'], $_POST['approver3'], $_POST['approver4'], $_POST['approver5'], $_POST['approver6'], $_POST['approver7'], $_POST['approver8'], $_POST['note'], $_POST['file'], $_POST['docname'])); } else { echo "ERROR: INVALID INPUT"; } }
提交数据的AJAX代码
//Data To Pass Through Ajax Request let formData = new FormData(); formData.append('create', 1); formData.append('createdby', createdby); formData.append('itemold', itemold); formData.append('itemnew', itemnew); formData.append('startdatetime', startdatetime); formData.append('enddatetime', enddatetime); formData.append('approver1', approver1); formData.append('approver2', approver2); formData.append('approver3', approver3); formData.append('approver4', approver4); formData.append('approver5', approver5); formData.append('approver6', approver6); formData.append('approver7', approver7); formData.append('approver8', approver8); formData.append('note', note); formData.append('file', $('#create_file')[0].files[0]); formData.append('docname', docname); $.ajax({ url: './ajax/submitData.ajax.php', type: 'POST', data: formData, processData: false, contentType: false, dataType: 'json', success: function(response) { if (response.success === 1){ closeAndClearCreateModal(); refreshData(); } else { document.getElementById("errorMSGCreate").innerHTML = response.error; } } });
排查与解决步骤
修正文件字段的判断逻辑(核心问题):
文件上传的内容存储在$_FILES数组而非$_POST中,原PHP代码中isset($_POST['file'])永远为false,直接导致进入错误分支。修改如下:// 修改判断条件,将isset($_POST['file'])替换为isset($_FILES['file']) if(isset($_POST['createdby']) && isset($_POST['itemold']) && isset($_POST['itemnew']) && isset($_POST['startdatetime']) && isset($_POST['enddatetime']) && isset($_POST['approver1']) && isset($_POST['approver2']) && isset($_POST['approver3']) && isset($_POST['approver4']) && isset($_POST['approver5']) && isset($_POST['approver6']) && isset($_POST['approver7']) && isset($_POST['approver8']) && isset($_POST['note']) && isset($_FILES['file']) && isset($_POST['docname']))同时调用
createFile时,传入$_FILES['file']而非$_POST['file']:echo json_encode(createFile($_POST['createdby'], $_POST['itemold'], $_POST['itemnew'], $_POST['startdatetime'], $_POST['enddatetime'], $_POST['approver1'], $_POST['approver2'], $_POST['approver3'], $_POST['approver4'], $_POST['approver5'], $_POST['approver6'], $_POST['approver7'], $_POST['approver8'], $_POST['note'], $_FILES['file'], $_POST['docname']));处理未选择文件的场景:
若用户未选择文件,$('#create_file')[0].files[0]会是undefined,FormData不会添加该字段。可在前端补充处理:if ($('#create_file')[0].files.length > 0) { formData.append('file', $('#create_file')[0].files[0]); } else { formData.append('file', ''); // 添加空值确保PHP能检测到字段存在 }添加调试日志定位缺失字段:
在PHP文件开头添加调试代码,查看实际接收的请求数据,快速定位哪个字段未被正确传递:// 调试用,生产环境删除 file_put_contents('debug.log', print_r($_POST, true) . "\n" . print_r($_FILES, true));灵活处理空值字段:
若部分字段(如approver5到approver8)允许为空,可将isset()改为isset() || empty(),避免因空值触发错误判断。
内容的提问来源于stack exchange,提问作者Bradley O.
相关产品推荐
相关产品推荐

