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

PHP联系表单提交后跳转空白页且校验错误不显示如何解决

问题根因

  1. 提交按钮缺失name属性:你的HTML代码中提交按钮没有设置name="submit",PHP代码入口判断isset($_POST['submit'])永远不成立,整个业务逻辑代码都不会执行,因此页面直接空白。
  2. 条件判断逻辑错误:当前else分支仅和最后一个校验主题、留言的if语句绑定,就算姓名、邮箱校验失败,只要主题和留言非空,程序依然会执行发邮件+跳转逻辑,前面的错误提示会被跳转直接覆盖。
  3. 主题校验逻辑失效:下拉选的默认选项值为basic,并非空值,原有empty($chosenSubject)判断永远触发不了,用户没选主题也能通过校验。
  4. 逻辑顺序不合理:先拼接邮件内容再做校验属于无效操作,且如果校验错误输出内容后再执行跳转,会报headers already sent的系统错误。

修复方案

第一步:修改HTML提交按钮

给提交按钮添加name="submit"属性,确保PHP能接收到提交标识:

<button type="submit" class="send" name="submit">SEND</button>

第二步:重构PHP逻辑

调整校验顺序、修复判断逻辑,代码如下:

<?php
// 开发阶段开启报错提示,上线后可关闭
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (isset($_POST['submit']) && !empty($_POST)) {
    $myEmail = "xxxxxxxxxx";
    $timeStamp = date("d/M/Y H:i:s"); // 修正原日期格式重复输出的问题
    $error = [];

    // 先接收字段并去空格
    $fullName = trim($_POST['fullName']);
    $customerEmail = trim($_POST['customerEmail']);
    $chosenSubject = trim($_POST['subject']);
    $message = trim($_POST['message']);

    // 姓名正则可根据需求调整,当前已支持带空格的英文名,要支持中文可替换为/^[\x{4e00}-\x{9fa5}a-zA-Z\s]+$/u
    $nameRegularExpression = "/^[a-zA-Z\s]+$/";
    $emailRegularExpression = "/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/";

    // 逐个字段校验,错误信息存入数组
    if (empty($fullName) || !preg_match($nameRegularExpression, $fullName)) {
        $error[] = "您的姓名未填写或格式不正确";
    }
    if (empty($customerEmail) || !preg_match($emailRegularExpression, $customerEmail)) {
        $error[] = "您的邮箱未填写或格式不正确";
    }
    if ($chosenSubject == 'basic') {
        $error[] = "请选择咨询主题";
    }
    if (empty($message)) {
        $error[] = "请填写留言内容";
    }

    // 无错误才发邮件跳转
    if (empty($error)) {
        $body = "";
        $body .= "From: " . $fullName . " at $timeStamp" . "\r\n";
        $body .= "Email: " . $customerEmail . "\r\n";
        $body .= "Message: " . $message . "\r\n";
        // 补充邮件头避免被判定为垃圾邮件
        $headers = "From: $customerEmail" . "\r\n" .
            "Reply-To: $customerEmail" . "\r\n" .
            "X-Mailer: PHP/" . phpversion();
        mail($myEmail, $chosenSubject, $body, $headers);
        header("Location: mail_sent.php");
        exit(); // 跳转后必须终止代码执行
    } else {
        // 输出所有错误提示
        foreach ($error as $msg) {
            echo "<p>$msg</p>";
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:39:03