仅在 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 视频来确保这一点。
唉....
希望能帮到其他遇到同样情况的人
我无法检查 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 视频来确保这一点。
唉....
希望能帮到其他遇到同样情况的人