You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提交数据到数据库时持续触发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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:24:52