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

表单提交后页面重载、显示PHP源码且无法发送邮件如何修复?

问题修复方案

1. 修复PHP文件被当作纯文本展示的问题

这是优先级最高的故障,只有PHP正常解析后其余功能才能正常运行:

  • 确认你的运行环境已安装PHP服务,且使用的Web服务器(Apache/Nginx/IIS)已开启PHP解析模块
  • 确认你是通过http/https协议访问站点,而非直接双击打开本地HTML文件(file://本地协议无法解析PHP)
  • 检查站点根目录配置,确保.php后缀的文件会被转发到PHP处理器执行,而非直接返回静态文本内容

2. 修复现有代码中的语法&逻辑错误

HTML代码问题

你的提交按钮存在标签不匹配错误,同时多余的</input>闭合标签可能导致渲染异常:

<!-- 错误写法 -->
<input type="submit" class="btn btn-primary btn-purchase" name="submit">להזמנה</button>
<!-- 修复写法 -->
<button type="submit" class="btn btn-primary btn-purchase" name="submit">להזמנה</button>

所有<input>标签为自闭合标签,可直接删掉多余的</input>。

PHP代码问题

首先存在致命语法错误:isset(_POST['submit'])中_POST前缺失$符号,会导致代码直接终止运行,其次邮件头格式不符合规范,会被邮件服务商拒收,修复后代码如下:

<?php
// 修复POST变量缺失$的语法错误
if (isset($_POST['submit'])) {
    $subject = "הזמנה חדשה";
    $name = $_POST['inpName'];
    $phone = $_POST['inpPhone'];
    $city = $_POST['inpCity'];
    $address = $_POST['inpAddress'];
    // 补充你遗漏的日期字段取值
    $delivery_date = $_POST['inpDate'];

    $mailTo = "sappati@outlook.com";
    // 修复From头格式,必须为合法邮箱,建议使用你站点域名下的官方发件邮箱
    $headers = "From: 站点订单通知 <noreply@你的域名.com>\r\n";
    // 新增UTF-8编码声明,避免希伯来文内容乱码
    $headers .= "Content-Type: text/plain; charset=utf-8\r\n";
    $txt =
        "התקבלה הזמנה חדשה! אלו פרטי ההזמנה:\n".
        "שם: ".$name."\n".
        "טלפון: ".$phone."\n".
        "עיר: ".$city."\n".
        "כתובת: ".$address."\n".
        "תאריך אספקה: ".$delivery_date."\n";

    // 新增发送状态判断,提交完成后跳转回表单页避免重复提交
    if(mail($mailTo, $subject, $txt, $headers)){
        header("Location: 你的表单页面地址?status=success");
        exit();
    }else{
        header("Location: 你的表单页面地址?status=fail");
        exit();
    }
}
?>

3. 修复页面提交重载的问题

如果不需要页面跳转刷新,可通过AJAX提交表单,阻止默认提交行为即可:

const form = document.querySelector('form');
form.addEventListener('submit', function(e) {
  // 阻止表单默认提交行为,不会触发页面重载
  e.preventDefault();
  const formData = new FormData(form);
  fetch('mail.php', {
    method: 'POST',
    body: formData
  }).then(res => res.text()).then(data => {
    // 自定义提交成功提示逻辑
    alert('订单提交成功,我们会尽快联系您');
    form.reset();
  }).catch(err => {
    alert('提交失败,请稍后重试');
  })
})

4. 邮件发送失败额外排查点

  • 确认服务器已开启mail()函数,多数虚拟主机会默认禁用该函数,若禁用可改用PHPMailer等第三方邮件库,通过SMTP协议关联你的邮箱账号发信,成功率更高
  • 检查收件邮箱的垃圾邮件文件夹,未配置SPF/DKIM的发件人发送的邮件大概率会被归为垃圾邮件
  • 建议给你的站点域名配置SPF、DKIM解析记录,可大幅降低邮件被拒收的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:06:02