php - 被recaptcha验证步骤难住了
问题描述
我讨厌寻求帮助..但我不知道有多少小时试图弄清楚如何使用 recaptcha 来实现此表单的验证步骤。
我知道我需要在某处定义私钥,但大多数其他指南都使用“isset”函数,我只是不知道在 php 的哪个部分来做。
目前,该按钮显示并且可以选中..但是当我单击提交时,无论是否选中该框,它都会发送。(只是解释以防万一。)
谢谢,对不起。
<?php
$to = 'example@caraudioinc.com';
$subject = 'CarAudioInc.com Form Message';
$errName = $errEmail = $errMessage = "";
$name = $email = $pNum = $message = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$pNum = test_input($_POST["pNum"]);
$message = test_input($_POST["message"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$errName = "*Name field is required.";
} else {
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$errName = "Invaild name.";
}
}
if (empty($_POST["email"])) {
$errEmail = "*Email field is required.";
} else {
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid E-mail.";
}
}
if (empty($_POST["message"])) {
$errMessage = "*Message field is required.";
} else {
$message = test_input($_POST["message"]);
}
$body = <<<EMAIL
Message from: $name
$message
Phone: $pNum
Email: $email
EMAIL;
$header = "From: $email";
if (!$errName && !$errEmail && !$errMessage ) {
if($_POST) {
mail($to, $subject, $body, $header);
header('Location: /sent');
}
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=1152">
<script src="https://www.google.com/recaptcha/api.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-100617570-1" ></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-100617570-1');
</script>
<!--Google meta tags -->
<title>Car Audio Inc | Contact</title>
<!--fb meta tags -->
<link rel="canonical" href="https://www.caraudioinc.com/contact" />
<link href="css/multiColumnTemplate.css" hreflang="en" rel="stylesheet" type="text/css">
<link rel="icon" href="images/favicon.png" type="image/png">
</head>
<body>
<div class="container">
<header>
<div class="primary_header">
<nav class="secondary_header" id="menu">
<ul>
<li><a href="/">HOME</a></li>
<li><a href="about">ABOUT</a></li>
<li><a href="services">SERVICES</a></li>
<li class="current"><a href="contact">CONTACT</a></li>
</ul>
</nav>
</header>
<div class="contactForm">
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"><br>
<label for="name">Name </label><span class="error"><?php echo $errName; ?></span><br>
<input type="text" id="name" name="name" value="<?php echo $name;?>"><br><br>
<label for="email">Email </label><span class="error"><?php echo $errEmail; ?></span><br>
<input type="email" id="email" name="email" value="<?php echo $email;?>"><br><br>
<label for="pNum">Phone Number (optional)<br></label>
<input type="tel" id="pNum" name="pNum" value="<?php echo $pNum;?>"><br><br>
<label for="message">Message </label><span class="error"><?php echo $errMessage; ?></span><br>
<textarea id="message" name="message" style="height:100px"><?php echo $message;?></textarea>
<div class="g-recaptcha" data-sitekey="6LcR-DQUAAAAAB2cXajVPi7lpFEZ_z8vZrS97ZXo"></div><br>
<input type="submit" value="Submit">
</form>
<footer class="secondary_header footer">
<div class="copyright">© Car Audio Inc 2020, All Rights Reserved.</div>
</footer>
</div>
</body>
</html>
解决方案
您可以isset()
在您的条件下将功能设置if()
为
if (isset($_POST)){...}
这意味着如果发布了某些内容或将$_POST
os 设置为某个值,则代码会向前移动。
但是正如您之前提到的那样,它只是检查表单是否已发布,并且每次发布表单时都没有任何值,并且代码正在进一步移动。
推荐阅读
- node.js - RabbitMQ 心跳超时问题
- performance - FabricJS 自由绘图性能提示?
- linux - ubuntu 18.04 太长了
- dataframe - 根据pyspark中的多个条件删除行
- android - Delphi 10.3 CE 关于 Android 应用程序开发
- java - 添加 jnpclient maven 依赖项时 Spring Boot 应用程序卡住
- postgresql - 如何将 PSQl 查询转换为聚合 2 个表的 KnexJS
- javascript - 反应
设置默认值 - aws-lambda - 如何在 terraform 中创建 aws lambda 触发器?
- json - 导出 CLOB Json 文件