仅在 php 中重新验证,没有 jquery 或 ajax

recaptcha in php only with no jquery or ajax

我无法检查 authController.php 中是否检查了 recaptcha。在signup.php页面,用户提交表单时,form method为post,action=authController.php

我的注册页面在没有重新验证的情况下工作得很好。假设我正确定义了 recaptcha div 以及 signup.php 上的有效密钥,这样我就不必在此处放置不相关的东西,我唯一的问题是如何检查 recaptha POST 在 authController.php。现在发生的事情是,如果我检查或不检查 recaptcha,当提交表单时,它会返回说 recaptcha 是必需的。如果我将代码注释掉,那么显然注册有效。

提交注册表单后,即使成功,我也会返回注册表单并将注册按钮更改为绿色的电子邮件发送,并禁用按钮本身。话虽如此,我认为正在发生的事情是,当页面重新加载时,它会失去对复选标记的跟踪,因为我正在使用 PHP。我怎么知道提交后,检查不再检查,但我认为必须有一种使用 PURE php 的方法。还有怎么来的名字,姓氏......提交后都被识别了。现在有点沮丧。这是我检查是否在 authController.php 文件中检查了 recaptcha 的方法。

    '''
    if(empty($_POST['g-recaptcha-response']))
    {
      $errors[captcha_error'] = "Captcha is required";
    }
    else
    {
        $secretKey = "mykey";
        $url = 'https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$_POST['g-recaptcha-response'];
        $response = file_get_contents($url);
        $response_data = json_decode($response);
        
        if($response_data->success)
            $errors['captcha_error'] = null;
    }
    '''

errors是上面定义的数组,语法正确。在 signup.php 页面上,我检查错误数组 captcha_error 是 SET 还是 NULL。这就是我知道该框是否被选中的方式。如果我必须使用 ajax 使用 $data 并成功,那么请如何。请记住我使用的是 PURE php 而没有 jquery 或 AJAX(尽管我认为我可能最终会使用它,因为 ajax 不会重新加载整个页面,因此我不会丢失复选标记,可能是我的问题),但 PHP 是首选。谢谢

我制作了一个名为 experiment.php 的非常简单的注册页面,内容很少,但仍然无法正常工作。我仍然收到失败的回应。我看过关于如何使用 PHP 的 recaptcha 的 youtube 视频。我已经卸载并重新安装了大约 9 次 recaptcha,我想可能是我的设置有问题。顺便使用 recaptcha v2。最后我搜索了 google,我最终使用了他们的 DEMO 密钥,并且会显示警告(这是正常的,因为它们仅用于实验),但仍然无法正常工作。如果你们中的任何人可以使用我下面的代码并使其工作,我将不胜感激。非常欢迎您将密钥更改为您的密钥,看看它是否适合您。目前 google 个演示密钥在下面使用。点击后会弹出3张图片,显示绿色勾号,提交后显示失败。

我只是想看看我的密钥是否错误或我的编码有问题???

顺便说一下,它还在我的 recaptcha 网站上说:我们检测到您的网站没有验证 reCAPTCHA 解决方案。这是在您的网站上正确使用 reCAPTCHA 所必需的。请查看我们的开发者网站了解更多信息。我googled但是没有用,如果这个信息是说我的设置有误,请提示我。

如果我的编码是错误的,那么理解,否则我真的很想知道他们是如何成为 1360 亿美元的产业的。对这个 recaptcha 业务非常非常失望。

这是我关注的视频的 link: https://www.youtube.com/watch?v=xyOu0b6R3m0

    '''
       <?php 
         if(isset($_POST["submit"]))
         {
             $e = $_POST['myemail'];
             $secretKey = '66LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe';
             $responseKey = $_POST['g-recaptcha-response'];
             $url='https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey';
             $response = file_get_contents($url); 
             $response = json_decode($response);
        if($response->success)
              echo "success";
        else
              echo "failure";
       }
       ?>
        <!DOCTYPE html>
       <style>
  .success {
      background-color: lightseagreen;
      border: none;
      border-radius: 20px;
      color: white;
      padding: 15px 32px;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      font-size: 22px;
      margin: 4px 2px;
      cursor: pointer;
      width: 100%;
 }

.register {
  background-color: white;
  border: none;
  border-radius: 20px;
  border: 2px solid lightseagreen;
  color: green;
  padding: 15px 32px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 22px;
   margin: 4px 2px;
   cursor: pointer;
   width: 100%;
  }

</style>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<title> Registration </title>
<link rel="stylesheet" href="style2.css">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 </head>
 <body>
 <div class="container" style = "transform:scale(.8);">
 <div class="title">Registration</div><br>
 <div>
  <form action="experiment.php" method = "post">

    <div class="user-details">
      <div class="input-box">
        <span class="details">Email</span>
        <input type="email" name = "myemail" required>
      </div>
     </div>
    <div class="g-recaptcha" data- 
    sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
    <input type="submit" name="submit" value="Register">
  </div>
  </form>
  </div>
  </div>
  <script src="https://www.google.com/recaptcha/api.js"async defer></script>
  </body>
  </html>

'''

在我决定放弃时联系我的主机后,结论是我的 php 设置中没有勾选“allow_url_fopen”。所以这不是我的代码。选中该选项后,它就像魅力一样工作。不确定为什么一开始默认情况下未选中它,并且没有显示任何 youtube 视频来确保这一点。

唉....

希望能帮到其他遇到同样情况的人