Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果Google ReCaptcha没有通过,我怎么才能不允许用户登录呢?_Php_Recaptcha - Fatal编程技术网

Php 如果Google ReCaptcha没有通过,我怎么才能不允许用户登录呢?

Php 如果Google ReCaptcha没有通过,我怎么才能不允许用户登录呢?,php,recaptcha,Php,Recaptcha,首先,我很难将GoogleReCAPTCHA绑定到我的登录表单中。只需要一些背景信息,这些都是在一个带有SSL证书的实时Web服务器上运行的,我有正确的站点和密钥以及所有这些 这是我的登录表: <html> <head> <script src='https://www.google.com/recaptcha/api.js'></script> </head> <body> <br /> <p&

首先,我很难将GoogleReCAPTCHA绑定到我的登录表单中。只需要一些背景信息,这些都是在一个带有SSL证书的实时Web服务器上运行的,我有正确的站点和密钥以及所有这些

这是我的登录表:

<html>

<head>

<script src='https://www.google.com/recaptcha/api.js'></script>

</head>

<body>

<br />
<p>Please log in to your account below:</p>

<form action="index.php" method="post" target="_self">
    <b>User Name:</b><br>
    <input type="text" size="20" name="userid"><br />
<br />
    <b>Password:</b><br>
    <input type="password" size="20" name="password"><br />
<br />

<div class="g-recaptcha" data-sitekey="_MY PUBLIC SITE KEY_"></div>
<br />
    <input type="submit" name="submit" value="Login">
    <input type="hidden" value="validate" name="content">
</form>
现在,由于我被一个永恒的错误所困扰,我决定尝试一下if语句并在中实现,如果成功为false,即0,那么不要登录,否则登录。非常简单,您可以在if语句的验证页面底部看到:

if (!$stmt->rowCount() & $response->success == 0)
到目前为止还不错,我把它上传到服务器上,刷新并试一试。但这次我得到一个错误,它表明变量$response未定义。我在验证页面的顶部定义了变量,我说:

if (isset($_POST['submit'])) // Checks to see if the form was submitted
它是在我点击登录按钮时提交的,这个按钮的name=submit,所以它看到submit被设置为Login的值,所以如果你知道PHP是如何工作的,它会执行下面的命令,在底部它定义了$response。据我所知,在PHP中,定义变量的块并不重要,只要它被执行,它就可以在任何地方使用

总而言之,我面临的问题是:

ReCaptcha的计算结果始终为False 抛出错误,说明$response未定义,尽管已定义 与2关联,因为变量未定义,所以无法执行if语句。
我几乎已经尝试了我的所有技能。

再次检查您要传递到的参数。 响应参数必须是response而不是respone

这会导致服务器返回错误-缺少输入响应意味着您没有传递g-recaptcha-response参数

现在,响应工作正常:

file_get_contents将返回一个字符串,其中包含JSON响应。如果您希望以您在此处访问的方式访问JSON中的成功值

if (!$stmt->rowCount() & $response->success == 0) {
然后您必须首先使用json_decode从字符串中创建一个对象

同一行中的if逻辑使用的是按位AND运算符,就像使用单个“与”一样&而不是&&

逻辑本身-当前,如果不存在任何用户帐户,并且recaptcha失败,则将出现错误,否则它是有效的。问题在于,如果没有用户,但recaptcha正常,则该用户有效;如果用户正常,且recaptcha失败,则该用户仍然有效。我猜你是想用或代替和:

if (!$stmt->rowCount() || $response->success == 0) {

我能看看你在哪里验证你的recaptcha吗?比如$response->is\u valid{//code}@Brian您使用的是哪个版本的recaptcha?2.0最新版本?@SaadSuri是的,它位于验证表单的底部。如果$stmt->rowCount&$response->success==0$stmt正在将我的$userid和$password与数据库进行比较,因此如果返回false,而我的response->success返回false/0,它将执行下面的内容,重定向回登录。但recaptcha的评估结果总是错误的。编辑:是的,我正在使用v2.0。在使用$response->success之前,您是否检查了$response->success以查看其中的内容?@SaadSuri是的,在我的验证页面顶部,我将g-recaptcha-reponse存储到$responsekey中,然后将其发送到谷歌,并附加到URL,并将$URL的内容存储到$response中,然后我回应$response,我得到了成功的回应-错,我在我的帖子中说了这一切。哇!总是一个简单的错误把一切都抛在脑后!非常感谢你。现在我得到了一个响应,它正确地返回,成功为true,时间戳和主机名。亲爱的,现在我正在努力让if/else语句正常工作。我目前的设置方式是否不正确?
if (!$stmt->rowCount() & $response->success == 0) {
if (!$stmt->rowCount() || $response->success == 0) {