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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:17:14