【问题标题】:Google reCAPTCHA V2 checkbox HTML and PHP Contact Form CodeGoogle reCAPTCHA V2 复选框 HTML 和 PHP 联系表单代码
【发布时间】:2022-06-14 19:53:58
【问题描述】:

我过去曾使用此网站寻找答案,并决定创建一个帐户,以便分享和帮助他人。这篇文章不是一个问题,而是分享我为我创建的几个公司网站使用的代码。我们从我们的联系表格中收到了很多垃圾邮件,因此我实施了“蜜罐”、reCAPTCHA 和其他方法来消除传入的垃圾邮件。下面是我的 HTML 代码和 PHP 代码,供任何为此苦苦挣扎的人使用。到目前为止,自从实施此操作以来,我还没有收到任何垃圾邮件。所有这些代码都是由我在本网站和互联网上的其他网站上找到的信息创建的。

HTML 代码:(蜜罐输入“网站”隐藏在 CSS 中)

<form id="form" action="php/submit-en.php" method="post">

<div class="row">

<div class="col-md-4">

<div class="form-group">

<label>Name</label>

<input class="form-control form-control-name" name="the-name" id="pccn" autocomplete="off" onpaste="return false" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false" placeholder="Required" type="text" maxlength="31" required>

<script>
$(function() {
  $("#pccn").keyup(function() {
    console.log(this.value);
    this.value = this.value.replace(/(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?/mg, 'Links Not Accepted!');
  })
});
</script>
</div>

</div>

<div class="col-md-4">

<div class="form-group">

<label>Email</label>

<input class="form-control form-control-email" name="the-email" id="pcemail" autocomplete="off" onpaste="return false" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false" placeholder="Required" type="email" maxlength="32" required>

</div>

</div>


<div class="col-md-4">

<div class="form-group">

<label>Subject</label>

<input class="form-control form-control-subject" name="the-subject" id="pcsubject" autocomplete="off" onpaste="return false" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false" placeholder="Optional" maxlength="20" type="text">

<script>
$(function() {
  $("#pcsubject").keyup(function() {
    console.log(this.value);
    this.value = this.value.replace(/(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?/mg, 'Links Not Accepted!');
  })
});
</script>
<label class="website">
<input class="blind" name="website" type="text" id="website" placeholder="Website Link:" tabindex="-1" autocomplete="off" onpaste="return false" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false"/>
</label>
</div>
</div>

</div>


<div class="form-group">

<label>Message</label>

<textarea class="form-control form-control-message" name="the-info" id="pcinfo" autocomplete="off" onpaste="return false" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false" placeholder="Required" rows="10" maxlength="2048" required></textarea>

<script>
$(function() {
  $("#pcinfo").keyup(function() {
    console.log(this.value);
    this.value = this.value.replace(/(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?/mg, 'Links Not Accepted!');
  })
});
</script>
<div class="text-right">
<br>
<div class="g-recaptcha" data-sitekey="YOUR SITE KEY"></div>
<button class="btn-primary" data-callback='onSubmit' data-action='submit'>Send Message</button>
</div>

</div>
</form>

我在 HTML 中添加了代码以拒绝表单中的任何 Web 链接,并复制/粘贴。这些网站使用率不高,所以我不太担心人们必须在表单上手动输入。

PHP 代码:(submit-en.php)

<?php
if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {        
        header( 'HTTP/1.0 404 Page not found', TRUE, 404 );
        die( header('location: /no-spam.html') );
    }

if(!isset($_GET)){
   header('Location: /no-spam.html');
}

if(isset($_POST['g-recaptcha-response'])){
          $captcha=$_POST['g-recaptcha-response'];
}

if(!$captcha){
          echo 'Please check the the captcha form.';
          exit;
}

        $secretKey = "YOUR SECRET KEY";
        $ip = $_SERVER['REMOTE_ADDR'];
        // post request to server
        $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secretKey) .  '&response=' . urlencode($captcha);
        $response = file_get_contents($url);
        $responseKeys = json_decode($response,true);
        // should return JSON with success as true
        if($responseKeys["success"]) {
                echo 'Thanks for posting your message';
        } else {
        header('Location: /no-spam.html');
} 
 
// if the url field is empty, but the message field isn't
if(isset($_POST['website']) && $_POST['website'] == '' && $_POST['the-info'] != ''){

// CONTACT INFO
  $name = $_REQUEST['the-name'];
  $subject = $_REQUEST['the-subject'];
  $email = $_REQUEST['the-email'] ;
  $message = $_REQUEST['the-info'];
  $ip = $_SERVER['REMOTE_ADDR'];
  
// ASSEMBLE HEADERS
  $ouremail = "email@yourwebsite.com";
  $subject1 = "Website Contact Form Submission";
  $subject2 = "Website Submission Received";
  $headers = "From: $ouremail\r\n";
  $headers .= "Reply-To: 'email@yourwebsite.com'\r\n";
  $headers .= "MIME-Version: 1.0" . "\r\n";
  $headers .= 'Content-type:text/html;charset=utf-8' . "\r\n";

 // E-MAIL MESSAGE TO YOU
  $message = "
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
<title>Contact Form Submission</title> 
</head> 
<body>
  <h3 style='color: #0D773C;'>Website Submission:</h3>
<p>
<strong>Name:</strong>&nbsp;  $name <br>
<strong>Subject:</strong>&nbsp;  $subject <br>
<strong>Email:</strong>&nbsp;&nbsp;  $email <br>
<strong>IP Address:</strong>&nbsp;&nbsp;  $ip <br>
</p>
<p>
<strong>Message:</strong></p>
<p style='font-style:italic';>$message
</p>
</body>
</html>
";

  // SEND MAIL
mail($ouremail,$subject1,$message,$headers);
 
// E-MAIL MESSAGE TO CUSTOMER
  $message2 = "
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
<title>Contact Form Submission Received</title> 
</head> 
<body>
<h3 style='color: #0D773C;'>Thank you for contacting us!</h3>
<p style='font-style:italic';>Thank you for contacting Your Company Inc.<br>
We have received your message, and will get back to you as soon as possible.<br>
If your message is of an urgent nature, please call us during normal business hours.</p>
<p style='font-style:italic';>
Sincerely,<br><br>
Your Company Inc.<br>
Tel: 123-456-7890</p>
<p>www.yourwebsite.com</p>

</body>
</html>
";

  // SEND MAIL
mail($email,$subject2,$message2,$headers);

header('Location: /thankyou.html');
exit('Redirecting you to /thankyou.html');
}

当直接通过网络浏览器访问时,PHP 的第一部分停止访问 submit-en.php 文件。如果第二部分收到 GET 请求,则重定向到无垃圾邮件页面。其余的验证验证码是否已被检查,然后验证响应。然后它检查蜜罐是否已装满。如果是这样,它不会发送电子邮件,而是重定向到感谢页面,因此垃圾邮件发送者认为电子邮件已通过。其余的会向您发送格式精美的电子邮件并回复客户。

【问题讨论】:

    标签: php html recaptcha


    【解决方案1】:

    非常感谢您这样做。

    您有下载源文件的链接或工作演示的链接吗?

    我已经尝试实现上面的代码,但一直收到“500 - 内部服务器错误”,我不确定我哪里出错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多