【问题标题】:How to integrate reCAPTCHA with a form如何将 reCAPTCHA 与表单集成
【发布时间】:2015-10-28 20:48:54
【问题描述】:

我不知道如何将 Google reCAPTCHA 添加到此联系表单中。我在前端添加没有问题,但似乎无法应用于服务器端。

<!-- Form -->
    <div id="contact-form">
        <form method="post" action="contact.php">

            <div class="field">
                <label>Name:</label>
                <input type="text" name="name" class="text" />
            </div>

            <div class="field">
                <label>Email: <span>*</span></label>
                <input type="text" name="email" class="text" />
            </div>

            <div class="field">
                <label>Message: <span>*</span></label>
                <textarea name="message" class="text textarea" ></textarea>
            </div>

            <div class="field">
                <input type="button" class="button light medium" id="send" value="Send Message"/>
            </div>

            <div class="field">
            <input type="button" class="button gray medium" value="Reset!"/>
            </div>      
            <div class="loading"></div>

        </form>
    </div>

PHP 服务器端

<?php

//Retrieve form data. 
//GET - user submitted data using AJAX
//POST - in case user does not support javascript, we'll use POST instead
$name = ($_GET['name']) ? $_GET['name'] : $_POST['name'];
$email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];
$message = ($_GET['message']) ?$_GET['message'] : $_POST['message'];

//flag to indicate which method it uses. If POST set it to 1
if ($_POST) $post=1;

//Simple server side validation for POST data, of course, you should    validate the email
if (!$name) $errors[count($errors)] = 'Please enter your name.';
if (!$email) $errors[count($errors)] = 'Please enter your email.'; 
if (!$message) $errors[count($errors)] = 'Please enter your message.'; 

//If the errors array is empty, send the mail
if (!$errors) {

// ====== Your mail here  ====== //
$to = 'admin@mysite.com <admin@mysite.com>';

// Sender
$from = $name . ' <' . $email . '>';

//subject and the html message
$subject = 'Contact Message from the Byblos Group Website'; 
$message = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table>
    <tr><td>Name:</td><td>' . $name . '</td></tr>
    <tr><td>Email:</td><td>' . $email . '</td></tr>
    <tr><td>Message:</td><td>' . nl2br($message) . '</td></tr>
</table>
</body>
</html>';

// Send the mail
$result = sendmail($to, $subject, $message, $from);

//if POST was used, display the message straight away
if ($_POST) {
    if ($result) echo 'Thank you! We have received your message.';
    else echo 'Sorry, unexpected error. Please try again later';

//else if GET was used, return the boolean value so that 
//ajax script can react accordingly
//1 means success, 0 means failed
} else {
    echo $result;   
}

// If the errors array has values
} else {}


// Simple mail function with HTML header
function sendmail($to, $subject, $message, $from) {
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: ' . $from . "\r\n";

$result = mail($to,$subject,$message,$headers);

if ($result) return 1;
else return 0;
}

?>

【问题讨论】:

    标签: php recaptcha


    【解决方案1】:

    我们正在像这样验证 google reCAPTCHA

    $fileContent = '';
    if (isset($_REQUEST['g-recaptcha-response']) && !empty($_REQUEST['g-recaptcha-response'])) {
        $fileContent = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=your_recaptcha_secret_key&response=". $_REQUEST['g-recaptcha-response']);
    }
    
    $jsonArray = json_decode($fileContent, true);
    if (isset($jsonArray['success']) && $jsonArray['success']==true) {
        // process your logic here
    } else {
        echo 'Invalid verification code, please try again!';
    }
    

    【讨论】:

      【解决方案2】:

      我其实是在用这个自制的功能来检查reCAPTCHA在我的网站上是否有效

      function checkCaptcha($cResp) {
          $captchaSecret = "yourSecret";
          $captchaRequestUrl = 'https://www.google.com/recaptcha/api/siteverify?secret='.$captchaSecret.'&response='.$cResp;
          $captchaResponse = @file_get_contents($captchaRequestUrl);
          if (!$captchaResponse) {
              return 2;
          }
          $captchaResponse = json_decode($captchaResponse);
          $captchaSuccess = $captchaResponse->{'success'};
          if (!$captchaSuccess) {
              return 3;
          }
          return 1;
      }
      

      然后你可以像下面这样检查

      if (checkCaptcha($_POST['g-recaptcha-response']) === 1) // success
      if (checkCaptcha($_POST['g-recaptcha-response']) === 2) // no resp
      if (checkCaptcha($_POST['g-recaptcha-response']) === 3) // fail
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-19
        • 2015-10-12
        • 2021-06-02
        • 2011-04-20
        • 2018-01-26
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多