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

HTML5联系表单无内容即可提交的问题求助

解决联系表单验证与Google ReCaptcha失效问题

嘿,刚在社区发帖完全不用紧张,有问题太正常了!我帮你一步步搞定表单验证和ReCaptcha的问题——毕竟前端光有界面没用,得前后端一起把关才行:

一、先搞定前端基础验证(拦住粗心用户)

首先给表单里的必填字段加上原生HTML5验证,这样浏览器会先帮你拦一波空提交:

  • 给每个必填输入框加上required属性,比如姓名、邮箱、消息框:
<input type="text" name="name" placeholder="Your Name" required>
<input type="email" name="email" placeholder="Your Email" required>
<textarea name="message" placeholder="Your Message" required></textarea>

然后针对ReCaptcha,得在表单提交前检查用户是否真的勾选了。给表单加个提交事件监听:

// 假设你的表单有个id叫"contact-form",或者直接用querySelector选表单
document.getElementById('contact-form').addEventListener('submit', function(e) {
    // 检查ReCaptcha是否已勾选
    const recaptchaToken = grecaptcha.getResponse();
    if (!recaptchaToken) {
        e.preventDefault(); // 阻止表单提交
        alert('请先完成ReCaptcha人机验证哦!');
        return;
    }

    // 额外检查下字段是否真的有内容(防止用户只填空格)
    const requiredFields = this.querySelectorAll('[required]');
    let isEmpty = false;
    requiredFields.forEach(field => {
        if (!field.value.trim()) {
            isEmpty = true;
        }
    });
    if (isEmpty) {
        e.preventDefault();
        alert('所有必填字段都要填写完整哦!');
    }
});

二、后端必须做ReCaptcha验证(关键!前端验证可被绕过)

前端验证只是给用户友好提示,真正的安全验证必须在你的mail.php里做——不然恶意用户可以直接跳过前端提交请求。

修改你的mail.php,添加ReCaptcha验证逻辑:

<?php
// 1. 获取表单提交的数据
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$message = trim($_POST['message'] ?? '');
$recaptchaResponse = $_POST['g-recaptcha-response'] ?? '';

// 2. 先检查必填字段是否为空
if (empty($name) || empty($email) || empty($message)) {
    echo '请填写所有必填字段!';
    exit;
}

// 3. 验证ReCaptcha(替换成你自己的Secret Key!)
$secretKey = '你的Google ReCaptcha Secret Key';
$verifyUrl = 'https://www.google.com/recaptcha/api/siteverify';

// 准备请求数据
$postData = http_build_query([
    'secret' => $secretKey,
    'response' => $recaptchaResponse,
    'remoteip' => $_SERVER['REMOTE_ADDR']
]);

// 发送请求到Google验证API
$options = [
    'http' => [
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postData
    ]
];
$context = stream_context_create($options);
$verifyResult = file_get_contents($verifyUrl, false, $context);
$resultData = json_decode($verifyResult);

// 4. 判断验证结果
if (!$resultData->success) {
    echo '人机验证失败,请重试!';
    exit;
}

// 5. 这里放你原来的发送邮件代码
// 比如用mail()函数或者PHPMailer发送邮件
// ... 你的邮件发送逻辑 ...

echo '邮件发送成功!';
?>

几个关键提醒

  • 一定要替换代码里的你的Google ReCaptcha Secret Key,这个可以在你的Google ReCaptcha控制台里找到(和你前端用的Site Key是一对)。
  • 确保你的服务器支持file_get_contents,如果不行,可以换成Curl请求(搜下PHP Curl调用ReCaptcha的代码就行)。
  • 前端要正确加载ReCaptcha脚本:<script src="https://www.google.com/recaptcha/api.js"></script>,并且表单里要有ReCaptcha的容器:<div class="g-recaptcha" data-sitekey="你的Site Key"></div>。

这样改完后,不管是用户空提交还是没勾选ReCaptcha,都会被拦住,而且后端也能防止恶意提交啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:02