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

如何用PHP实现联系表单正常功能及表单验证?

问题修复与表单验证实现

一、修复表单无法获取输入信息的问题

表单无法获取数据的核心原因是所有输入字段都缺少name属性——PHP通过$_POST['字段名']接收数据时,完全依赖字段的name属性,而非placeholder或视觉标签。同时PHP代码中存在未定义的$type变量,需要删除。

修改后的HTML代码

<div class="form-container">
    <section class="contact-wrap">
        <form method="post" name="myemailform" action="mail.php">
            <div class="col1">
                <p><label>Name</label><br />
                    <input type="text" name="name" placeholder="name" required></p>
            </div>
            <div class="col1">
                <p><label>Email</label><br />
                    <input type="email" name="email" placeholder="email" required></p>
            </div>
            <div class="col1">
                <p><label>Business Name</label><br />
                    <input type="text" name="business" placeholder="business" required></p>
            </div>
            <div class="col1">
                <p><label>Website</label><br />
                    <input type="url" name="website" placeholder="website"></p>
            </div>
            <p><label>How can I help you?</label><br />
                <textarea name="message" placeholder="message" required></textarea></p>
            <p><input type="submit" value="Send"></p>
        </form>
    </section>
</div>
  • 给每个输入字段添加对应name属性,与PHP中$_POST的键名匹配
  • 邮箱字段改为type="email"、网站字段改为type="url",利用HTML5原生格式验证
  • 必填字段添加required属性,触发原生必填校验

修改后的PHP代码

<?php
// 初始化变量,避免未定义报错
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$business = $_POST['business'] ?? '';
$website = $_POST['website'] ?? '';
$message = $_POST['message'] ?? '';

// 移除不存在的$type变量
$formcontent = " Name: $name 
 Email: $email 
 Business Name: $business 
 Website: $website 
 Message: $message";
$recipient = "hi@helloarchie.co";
$subject = "Contact Form";
$mailheader = "From: $email\r\n";

// 处理邮件发送结果
if(mail($recipient, $subject, $formcontent, $mailheader)){
    header('Location: thankyou.php');
    exit;
} else {
    echo "邮件发送失败,请稍后重试";
}
?>
  • 使用??运算符避免未定义变量报错
  • 优化邮件头格式(用\r\n替代换行,符合邮件标准)
  • 增加发送结果判断,替换生硬的die提示

二、实现仅字段正确时提交(完整验证方案)

前端验证提升用户体验,后端验证保障数据安全(必须做,前端验证可被绕过)

1. 前端JavaScript增强验证

在HTML表单末尾添加脚本,实现自定义验证逻辑:

<script>
document.querySelector('form').addEventListener('submit', function(e) {
    let isValid = true;
    const emailField = document.querySelector('input[name="email"]');
    const websiteField = document.querySelector('input[name="website"]');
    
    // 自定义邮箱格式验证
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if(!emailRegex.test(emailField.value)){
        alert('请输入有效的邮箱地址');
        isValid = false;
        emailField.focus();
    }
    
    // 网站字段非空时验证格式
    if(websiteField.value && !/^https?:\/\/.+/i.test(websiteField.value)){
        alert('请输入有效的网站地址(需包含http/https)');
        isValid = false;
        websiteField.focus();
    }
    
    if(!isValid){
        e.preventDefault(); // 阻止表单提交
    }
});
</script>

2. 后端PHP严格验证

在PHP代码最开头添加验证逻辑,确保接收的数据符合要求:

<?php
// 检查请求是否为POST
if($_SERVER['REQUEST_METHOD'] !== 'POST'){
    header('Location: 你的表单页面URL');
    exit;
}

// 验证必填字段
$requiredFields = ['name', 'email', 'business', 'message'];
foreach($requiredFields as $field){
    if(empty($_POST[$field])){
        echo "请填写所有必填字段";
        exit;
    }
}

// 验证邮箱格式
$email = $_POST['email'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
    echo "请输入有效的邮箱地址";
    exit;
}

// 验证网站格式(非必填)
$website = $_POST['website'] ?? '';
if(!empty($website) && !filter_var($website, FILTER_VALIDATE_URL)){
    echo "请输入有效的网站地址";
    exit;
}

// 后续邮件发送代码...
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:25:00