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

使用PHPMailer发送邮件后数据库仅插入Null值的问题

我来帮你排查这两个问题——数据库插入Null值和成功提示不显示,咱们一步步拆解:

问题1:数据库插入Null值的核心原因

你在SQL语句里用了$Nome、$Email、$Mensagem这三个变量,但代码里完全没给它们赋值!你明明已经获取了$_POST['NomeReser']这些表单值,却没把它们存到对应的变量里,执行SQL时这些变量都是未定义状态,最终插入数据库的自然就是Null。

另外还有个严重的安全隐患:直接把用户输入的POST值拼接到SQL语句里,会触发SQL注入攻击,绝对不能这么写,必须用预处理语句来规避风险。

问题2:成功提示未显示的可能原因

  • 你的$result变量虽然赋值了,但代码里没有输出它的逻辑(比如echo $result;),就算赋值成功,前端也看不到内容;
  • 你现在把SQL执行放在了邮件发送的分支外面,不管邮件发送成功还是失败都会执行插入,这逻辑明显不合理——应该只在邮件发送成功后再写入数据库对吧?

修复后的完整代码

我把所有问题都修正了,标注了关键改动点:

<?php
$result = "";
// 注意:这里必须确保数据库连接$lig已经正确初始化!
// 示例:$lig = new mysqli('数据库主机', '用户名', '密码', '数据库名');

if(isset($_POST['submit'])){
    require 'PHPMailer/PHPMailerAutoload.php';
    $mail = new PHPMailer;
    
    // 修正笔误:Porto → Port(PHPMailer的端口属性是Port)
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'tls';
    $mail->Username = '****';
    $mail->Password = '****';
    
    // 第一步:把表单值赋值给变量,方便后续使用
    $nome = $_POST['NomeReser'];
    $email = $_POST['EmailReser'];
    $mensagem = $_POST['MensagemR'];
    
    $mail->setFrom($email);
    $mail->addAddress('filipajoao1933@gmail.com');
    $mail->addReplyTo($email);
    $mail->isHTML(true);
    $mail->Subject = 'Reversa';
    $mail->Body = "<h1>Name: $nome<br>Email: $email<br>Message: $mensagem</h1>";
    
    if(!$mail->send()){
        $result = "Something went wrong. Please try again";
    } else{
        $result = "Thanks $nome for contacting us. We´ll get back to you soon!";
        
        // 第二步:仅在邮件发送成功时执行数据库插入
        // 使用预处理语句彻底避免SQL注入
        $sql = "INSERT INTO Reservas (NomeReser, EmailReser, MensagemR) VALUES (?, ?, ?)";
        $stmt = $lig->prepare($sql);
        // 绑定参数:s表示字符串类型,对应三个占位符?
        $stmt->bind_param("sss", $nome, $email, $mensagem);
        $stmt->execute();
        $stmt->close();
    }
    
    // 第三步:输出提示信息,让前端能看到结果
    echo $result;
}
?>

额外要检查的细节

  • 确认你的表单提交按钮的name属性是submit,因为代码里判断的是isset($_POST['submit']),如果按钮name不对,整个逻辑都不会触发;
  • 确保数据库连接$lig已经正确建立,不然插入数据时会直接报错;
  • 如果前端是HTML表单,记得表单的method是post,并且正确设置了action。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:12