AJAX表单提交无报错但数据库未插入,变量未接收值求助
问题排查与修复方案
从你描述的症状(变量接收为空、仅清空输入框但无数据插入)来看,问题核心出在前端AJAX的语法错误以及PHP端的逻辑顺序混乱,下面一步步拆解修复:
1. 前端AJAX的语法错误(最关键)
你的AJAX配置里,dataType: "json"被错误地放在了success回调函数内部,这属于语法错误,会导致AJAX请求的配置失效,直接干扰了数据的传输与响应处理逻辑。
修复后的前端脚本:
$(".btn_contact").click(function () { $.ajax({ type: "POST", url: "./inserir", data: $("#feedback_form").serialize(), dataType: "json", // 移到AJAX配置顶层,与其他配置同级 success: function (data) { if ($.trim(data) === 'true') { $("#feedback_form").find('input').val(''); $(".success_messages").removeClass('hide'); } else { $(".error_message").removeClass('hide'); } }, error: function(xhr, status, error) { // 新增错误回调,方便排查请求问题 console.log("请求错误:", status, error); console.log("响应内容:", xhr.responseText); } }); });
2. PHP端的逻辑顺序与数据接收问题
你的PHP代码存在两个致命问题:
- 先输出响应,再执行数据库插入:你在连接数据库、执行插入操作之前就已经echo了响应结果,这会导致后续的数据库操作即使执行,前端也已经收到了响应;更严重的是,当
$name或$unid为空时,你输出了false,但后面仍会执行插入空值的SQL语句。 - 未处理编码与SQL注入风险:缺少编码设置可能导致特殊字符接收异常,直接拼接SQL语句存在注入风险。
修复后的PHP代码:
<?php // 设置编码,避免特殊字符接收异常 header('Content-Type: application/json; charset=utf-8'); // 接收并过滤POST数据 $name = isset($_POST["DescricaoProd"]) ? trim($_POST["DescricaoProd"]) : ''; $unid = isset($_POST["DescricaoUnid"]) ? trim($_POST["DescricaoUnid"]) : ''; $response = false; if (!empty($name) && !empty($unid)) { $conn = new mysqli("localhost", "USUARIO", "SENHA", "nome_DB"); // 检查数据库连接 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } // 使用预处理语句,彻底避免SQL注入 $sql = "INSERT INTO ProdHigieneteste (DescricaoProd, DescricaoUnid) VALUES (?, ?)"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $name, $unid); // 执行第一个插入 if ($stmt->execute()) { // 执行第二个插入 $sql1 = "INSERT INTO StockHigieneteste (DescricaoProd, DescricaoUnid) VALUES (?, ?)"; $stmt1 = $conn->prepare($sql1); $stmt1->bind_param("ss", $name, $unid); if ($stmt1->execute()) { $response = true; } $stmt1->close(); } $stmt->close(); $conn->close(); } // 最后统一输出响应 echo json_encode($response ? "true" : "false"); ?>
3. 额外排查建议
- 打开浏览器开发者工具(F12),切换到Network标签,点击"Registo"按钮后,查看
inserir请求的Form Data部分,确认表单数据是否正确发送。如果这里为空,再检查表单的name属性是否与PHP接收的字段一致。 - 确认PHP文件
inserir的路径正确,AJAX的url: "./inserir"是相对当前页面的路径,路径错误会导致请求到无效页面,自然接收不到POST数据。 - 检查PHP的
post_max_size配置,确保表单数据大小未超过限制(你的表单是文本,一般不会触发,但可以排除)。
为什么之前能正常工作?
大概率是之前的AJAX代码没有语法错误,或者PHP逻辑顺序是正确的,后来修改代码时不小心把dataType移到了success内部,导致请求处理异常,进而POST数据无法被正确接收。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

