【问题标题】:recaptcha in php only with no jquery or ajax仅在没有 jquery 或 ajax 的情况下在 php 中重新验证
【发布时间】:2021-07-04 00:02:50
【问题描述】:

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

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

提交注册表单后,即使成功,我也会返回注册表单,并将 REGISTER 按钮更改为绿色的 EMAIL SENT,并禁用按钮本身。话虽如此,我认为正在发生的事情是,当页面重新加载时,由于我使用的是 PHP,它会丢失复选标记。我怎么知道提交后,checked 不再检查,但我认为必须有一种使用 PURE php 的方法。那么如何First Name,Last name ...在提交后都被识别。现在有点沮丧。这是我如何检查是否在 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。这就是我知道该框是否被选中的方式。如果我必须使用 $data 并成功使用 ajax,那么请如何。请记住我使用 PURE php 而没有 jquery 或 AJAX(尽管我认为我最终可能会使用它,因为 ajax 不会重新加载整个页面,因此我不会丢失复选标记,这可能是我的问题),但 PHP 是首选。谢谢

【问题讨论】:

  • 需要在 javascript 中发生一些事情才能将 g-recaptcha-response 添加到表单中。

标签: php ajax recaptcha


【解决方案1】:

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

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

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

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

这是我关注的视频的链接: 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>

'''

【讨论】:

    【解决方案2】:

    在我决定放弃的时候联系了我的主机后,结论是我的 php 设置中没有选中“allow_url_fopen”。所以这不是我的代码。检查选项后,它就像魅力一样。不知道为什么它在默认情况下首先被取消选中,并且没有 youtube 视频显示可以确保这一点。

    叹息....

    希望它能帮助其他在同样情况下苦苦挣扎的人

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2015-10-26
      • 2018-11-07
      • 2013-05-29
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      相关资源
      最近更新 更多