#php #ajax #recaptcha
Вопрос:
У меня возникли проблемы с проверкой, проверена ли recaptcha или нет authController.php. В signup.php страница, когда пользователь отправляет форму, метод формы-post и действие = authController.php
Моя страница регистрации отлично работает без рекапчи. Предполагая, что я правильно определяю div recaptcha вместе с допустимым секретным ключом на signup.php чтобы мне не нужно было помещать сюда ненужные вещи, мой ЕДИНСТВЕННЫЙ вопрос в том, как мне проверить СООБЩЕНИЕ recaptha в authController.php. Что происходит прямо сейчас, так это то, что если я проверю или не проверю рекапчу, когда форма будет отправлена, она вернется с сообщением, что требуется рекапча. Если я сообщу код, то, очевидно, регистрация сработает.
После отправки формы регистрации я возвращаюсь к форме регистрации ДАЖЕ в случае успеха и меняю кнопку РЕГИСТРАЦИИ на электронную почту, ОТПРАВЛЕННУЮ зеленым цветом, и саму кнопку отключения. Сказав это, я думаю, что происходит то, что, когда страница перезагружается, она теряет галочку, так как я использую PHP. Откуда я знаю, что после отправки проверка больше не проверяется, но я думаю, что должен быть способ использовать ЧИСТЫЙ php. Также затем, как вас Зовут, Фамилия … все они признаются после отправки. Теперь я немного расстраиваюсь из-за этого. Вот как я проверяю, была ли проверена рекапча или нет authController.php файл.
'''
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.'amp;response='.$_POST['g-recaptcha-response'];
$response = file_get_contents($url);
$response_data = json_decode($response);
if($response_data->success)
$errors['captcha_error'] = null;
}
'''
ошибки — это массив, определенный выше, синтаксис правильный. На signup.php страница, я проверяю, установлен ли массив ошибок captcha_error или равен НУЛЮ. Вот как я узнаю, был ли флажок установлен или нет. Если мне ПРИДЕТСЯ использовать ajax с использованием $data и успеха, то как, пожалуйста. Пожалуйста, помните, что я использую ЧИСТЫЙ php, а не jquery ИЛИ AJAX (хотя я думаю, что в конечном итоге я могу использовать его, так как ajax не будет перезагружать всю страницу, и поэтому я НЕ потеряю галочку, и, возможно, это моя проблема), но PHP предпочтительнее. Спасибо
Комментарии:
1. Что-то должно произойти в javascript, чтобы добавить g-recaptcha-ответ в форму.
Ответ №1:
Я сделал очень простую страницу регистрации под названием experiment.php с минимальным содержанием, и это все еще не работает. Мне все еще вторят НЕУДАЧИ. Я смотрел видео на YouTube о том, как использовать recaptcha с PHP. Я удалил и переустановил recaptcha около 9 раз, теперь думаю, может быть, у меня что-то не так с настройками. Кстати, используя recaptcha v2. Наконец, я поискал в Google, и в итоге я использовал их демонстрационные ключи и отобразил предупреждение (что нормально, так как они предназначены только для эксперимента), и все еще не работает. Если кто-нибудь из вас может использовать мой код ниже и заставить его работать, я буду признателен, пожалуйста. Вы более чем можете поменять ключи на свои ключи и посмотреть, сработает ли это для вас с вашей стороны. В настоящее время ниже используются демо-ключи Google. 3 картинки, на которые нужно нажать, всплывут, на них появится зеленая отметка, но после отправки будет написано «СБОЙ».
Я просто хочу посмотреть, не ошиблись ли мои ключи ИЛИ что-то не так с моей кодировкой???
Кстати, на моем сайте recaptcha также написано: Мы обнаружили, что ваш сайт не проверяет решения reCAPTCHA. Это необходимо для правильного использования reCAPTCHA на вашем сайте. Пожалуйста, посетите наш сайт разработчика для получения дополнительной информации. Я погуглил, но бесполезно, если это сообщение означает, что мои настройки неверны, пожалуйста, намекните мне.
Если мое кодирование неверно, то понятно, ИНАЧЕ я действительно удивляюсь, как они превратились в индустрию стоимостью 136 миллиардов долларов. Очень, очень расстроен этим делом с рекапчей.
Вот ссылка на видео, за которым я следил: 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=$secretKeyamp;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:
Связавшись со своим хостингом примерно в тот момент, когда я решил отказаться, я пришел к выводу, что «allow_url_fopen» не был отключен в моих настройках php. Так что это был не мой код. Это сработало как заклинание после того, как опция была проверена. Не знаю, почему он был снят по умолчанию в первую очередь, и нет видео на YouTube, чтобы убедиться в этом.
Вздох….
Надеюсь, это поможет другим людям, которые находятся в такой же ситуации