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

AJAX提交表单调用sendmail.php写入本地数据库失败求助

问题诊断与修复方案

我一眼就看到了两个关键问题导致你的AJAX提交没生效,咱们一个个解决:

1. AJAX请求的URL文件名拼写错误

你的后台文件是sendmail.php,但AJAX代码里写的是url:'send-mail.php'——注意文件名里的横杠!这个错误会导致服务器返回404错误,请求根本到不了处理逻辑。

2. sendmail.php依赖的$_POST['Submit']参数不存在

你用isset($_POST['Submit'])作为判断是否执行插入的条件,但通过jQuery.serialize()序列化表单时,<button>标签的name参数不会被包含进去(只有<input>/<select>/<textarea>这类表单控件会被序列化),所以这个判断永远不成立,插入代码根本不会执行。


修复后的完整代码

修正后的AJAX脚本(解决URL拼写问题+添加错误调试)

jQuery('#get-quote').on('submit',function(e) {
    e.preventDefault();
    jQuery('#Submit').html('Please Wait');
    jQuery('#Submit').attr('disabled',true);
    $.ajax({
        url:'sendmail.php', // 修正文件名,去掉多余横杠
        type:'POST',
        data:jQuery('#get-quote').serialize(),
        success:function(result){
            jQuery('#msg').html(result);
            jQuery('#Submit').html('Submit');
            jQuery('#Submit').attr('disabled',false);
            jQuery('#get-quote')[0].reset();
        },
        // 新增错误回调,方便调试请求失败原因
        error:function(xhr, status, error){
            console.log('AJAX请求出错:', error);
            jQuery('#msg').html('提交失败,请稍后重试');
            jQuery('#Submit').html('Submit');
            jQuery('#Submit').attr('disabled',false);
        }
    });
});

修正后的sendmail.php(解决参数判断问题+增强错误处理)

<?php
$msg="";
$con=mysqli_connect('localhost','root','','loans4you');

// 检查核心字段是否存在,替代依赖按钮参数的判断
if (isset($_POST['name'])) {
    $name=mysqli_real_escape_string($con, $_POST['name']);
    $email=mysqli_real_escape_string($con, $_POST['email']);
    $phone=mysqli_real_escape_string($con, $_POST['phone']);
    $amount=mysqli_real_escape_string($con, $_POST['amount']);
    $years=mysqli_real_escape_string($con, $_POST['years']);
    
    // 新增插入结果判断,返回更精准的提示
    if(mysqli_query($con,"insert into getquote(name,email,phone,amount,years) values('$name','$email','$phone','$amount','$years')")){
        $msg="Thank you!";
    } else {
        $msg="提交失败:".mysqli_error($con);
    }
    echo $msg;
}
?>

额外安全优化建议

为了进一步提升安全性,建议使用PHP预处理语句替代mysqli_real_escape_string,能更彻底地防止SQL注入:

// 预处理语句示例
$stmt = $con->prepare("INSERT INTO getquote(name, email, phone, amount, years) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $name, $email, $phone, $amount, $years);
$stmt->execute();

内容的提问来源于stack exchange,提问作者Sarcasm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:52:47