Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352

Переход в скрипт, если флажок reCAPTCHA не установлен

24.08.2017, 19:18. Показов 1484. Ответов 10

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Возникла проблема есть скрипт php к которому обращается форма (index.php) следующим методом:
HTML5
1
2
3
4
5
6
7
8
9
10
<form action="reg.php" method="POST">
          <input type="text" name="name" placeholder="Как Вас зовут?" required />
          <input type="text" name="familiya" placeholder="Ваша фамилия..." requi/> 
          <input type="text" name="login" placeholder="Логин (смена 1 раз в год с запросом на администрацию)" required />
          <input type="tel"  name="telephonenumber" placeholder="Ваш номер телефона (сменить номер без причины и доказательства не возможно):" required />
          <input type="email" name="email" placeholder="Ваш email" required />
          <input type="password" name="password" placeholder="Ваш сложный пароль..." required />
          <div class="g-recaptcha" data-sitekey="6LfmXiQUAAAAAOUVmQctfcPL2oboGke16Jw2Qv5-"></div>
          <input type="submit" name='reg' value="Зарегистрироваться"  />
        </form>
Сам php скрипт reg.php выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
include_once "bd.php";
header("content-type: text/html; charset=utf-8");
session_start();
if (isset($_POST['reg'])) {
    $url = 'https://www.google.com/recaptcha/api/siteverify';
         $secret= '6LfmXiQUAAAAALfxLxUlJgtAejmUHxX37cMGKxhn';
         $response = file_get_contents($url."?secret=".$secret."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']);
         $data = json_decode($response);
         if(isset($_POST["g-recaptcha-response"])&& $_POST["g-recaptcha-response"]){
    if ($_POST['name'] == '' ||
    $_POST['familiya'] == '' ||
    $_POST['login'] == '' || 
    $_POST['telephonenumber'] == '' ||
    $_POST['email'] == '' ||
    $_POST['password'] == '') {
        echo '<script type="text/javascript">alert("Поля обязательны для заполнения!");document.location.href = "/reg/";</script>';   
    }
    else {
        foreach ($_POST as $k=>$v) $_POST[$k] = htmlspecialchars($v);
        extract($_POST);
        $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email' OR telephonenumber='$telephonenumber'") or die(mysql_error());
        if (mysql_num_rows($sql) > 0) {
            echo '<script type="text/javascript">alert("Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН  EMAIL НОМЕР ТЕЛЕФОНА");document.location.href = "/reg/";</script>';
        }
        else {
            $ip = $_SERVER['REMOTE_ADDR'];
            mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber='$telephonenumber',email='$email',password='$password',ip='$ip'");
            echo '<script type="text/javascript">alert("Регистрация завершена успешно!");document.location.href = "/reg/";</script>';
            header("Location: index.php");
            exit;
              
        }
    
    
    }
 
}
      else echo '<script type="text/javascript">alert("Ошибка! Google сообщил нам, что Вы не индефицировались в ReCAPCHA. Мы настоятельно рекомендуем поставить флажок "Я не робот!". Сейчас введенная Вами информация сброшена и Вам придется ввести форму и флажок заново. "); </script>';
      
}
 
?>
Все файлы находятся в одной директории reg . Но php код работает немного не корректно. Ситуация выглядит таким образом:
Если флаг "Я не робот" установлен и кнопка была нажата, то выполнить проверку на ошибки
В данном случае все ошибки на экран выводятся, но если reCAPTCHA отсутствует флажок, то открывается пустая страница с этим скриптом:
http://site.beget.tech/reg/reg.php
Как устранить такую серьезную ошибку? Скрипт вроде бы написан исправно.
Заранее огромное спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2017, 19:18
Ответы с готовыми решениями:

Если флажок установлен, то поле сделать недоступным
Добрый вечер, подскажите пожалуйста, повесила следующий код на кнопочку ZAP.MoveFirst While Not ZAP.EOF If ZAP! = -1 Then 'если в...

Как запретить оптравку формы пока не установлен флажок
Как сделать так что бы пока бы policy checkbox выключен, кнопка отправить была неавктивной(просто нельзя было бы на нее нажать) Вот...

Как запретить оптравку формы пока не установлен флажок
Как сделать так что бы пока бы policy checkbox выключен, кнопка отправить была неавктивной(просто нельзя было бы на нее нажать) ...

10
(ノಠ益ಠ)ノ彡┻━┻
 Аватар для N3stY
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
28.08.2017, 01:52
Uni_programist, из того, что я понял у вас скорее всего не приходит $_POST['reg']. посмотрите что приходит в POST

попробуйте так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
include_once "bd.php";
 
header("content-type: text/html; charset=utf-8");
session_start();
 
$passed = false;
 
if (isset($_POST['reg']))
{
  $url = 'https://www.google.com/recaptcha/api/siteverify';
  $secret = '6LfmXiQUAAAAALfxLxUlJgtAejmUHxX37cMGKxhn';
  $response = file_get_contents($url . "?secret=" . $secret . "&response=" . $_POST['g-recaptcha-response'] . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
  $data = json_decode($response);
  if (isset($_POST["g-recaptcha-response"]) && $_POST["g-recaptcha-response"])
  {
    $passed = true;
    if ($_POST['name'] == '' || $_POST['familiya'] == '' || $_POST['login'] == '' || $_POST['telephonenumber'] == '' || $_POST['email'] == '' || $_POST['password'] == '')
    {
      echo '<script type="text/javascript">alert("Поля обязательны для заполнения!");document.location.href = "/reg/";</script>';
    }
    else
    {
      foreach($_POST as $k => $v) $_POST[$k] = htmlspecialchars($v);
      extract($_POST);
      $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email' OR telephonenumber='$telephonenumber'") or die(mysql_error());
      if (mysql_num_rows($sql) > 0)
      {
        echo '<script type="text/javascript">alert("Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН  EMAIL НОМЕР ТЕЛЕФОНА");document.location.href = "/reg/";</script>';
      }
      else
      {
        $ip = $_SERVER['REMOTE_ADDR'];
        mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber='$telephonenumber',email='$email',password='$password',ip='$ip'");
        echo '<script type="text/javascript">alert("Регистрация завершена успешно!");document.location.href = "/reg/";</script>';
        header("Location: index.php");
        exit;
      }
    }
  }
}
if(!$passed) echo '<script type="text/javascript">alert("Ошибка! Google сообщил нам, что Вы не индефицировались в ReCAPCHA. Мы настоятельно рекомендуем поставить флажок "Я не робот!". Сейчас введенная Вами информация сброшена и Вам придется ввести форму и флажок заново. "); </script>';
 
?>

Не по теме:

Насчёт mysql_...

Внимание
Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL.

1
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
28.08.2017, 12:19  [ТС]
N3stY, а куда можно вставить:
PHP
1
<?php var_dump($POST); ?>
Ну в том смысле, где установить строку?

Добавлено через 13 минут
N3stY, так вот ответ от $_POST:
array(8) { ["name=> string(8) "Вася" ["familiya"]=> string(12) "Петров" ["login"]=> string(6) "vasyli" ["telephonenumber"]=> string(11) "78926747645" ["email"]=> string(16) "vasyli@mail.ru" ["password"]=> string(23) "h98tiughefuitgfyuftuifg" ["g-recaptcha-response"]=> string(0) "" ["reg"]=> string(36) "Зарегистрироваться" }"]

я вижу, что ["g-recaptcha-response"]=> string(0) "" пуста, но в принципе это нормально флаг "Я не робот!" не установлен, или какое то значение все таки должно вернутся?!
Вставил так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
include_once "bd.php";
 
header("content-type: text/html; charset=utf-8");
session_start();
 
$passed = false;
 
if (isset($_POST['reg']))
{
  var_dump($_POST);
  $url = 'https://www.google.com/recaptcha/api/siteverify';
  $secret = '6LfmXiQUAAAAALfxLxUlJgtAejmUHxX37cMGKxhn';
  $response = file_get_contents($url . "?secret=" . $secret . "&response=" . $_POST['g-recaptcha-response'] . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
  $data = json_decode($response);
  if (isset($_POST["g-recaptcha-response"]) && $_POST["g-recaptcha-response"])
  {
    $passed = true;
    if ($_POST['name'] == '' || $_POST['familiya'] == '' || $_POST['login'] == '' || $_POST['telephonenumber'] == '' || $_POST['email'] == '' || $_POST['password'] == '')
    {
      echo '<script type="text/javascript">alert("Поля обязательны для заполнения!");document.location.href = "/reg/";</script>';
    }
    else
    {
      foreach($_POST as $k => $v) $_POST[$k] = htmlspecialchars($v);
      extract($_POST);
      $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email' OR telephonenumber='$telephonenumber'") or die(mysql_error());
      if (mysql_num_rows($sql) > 0)
      {
        echo '<script type="text/javascript">alert("Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН  EMAIL НОМЕР ТЕЛЕФОНА");document.location.href = "/reg/";</script>';
      }
      else
      {
        $ip = $_SERVER['REMOTE_ADDR'];
        mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber='$telephonenumber',email='$email',password='$password',ip='$ip'");
        echo '<script type="text/javascript">alert("Регистрация завершена успешно!");document.location.href = "/reg/";</script>';
        header("Location: index.php");
        exit;
      }
    }
  }
}
if(!$passed) echo '<script type="text/javascript">alert("Ошибка! Google сообщил нам, что Вы не индефицировались в ReCAPCHA. Мы настоятельно рекомендуем поставить флажок "Я не робот!". Сейчас введенная Вами информация сброшена и Вам придется ввести форму и флажок заново. "); </script>';
 
?>
Сейчас посмотрю может внешний ключ не верен, но если честно сомневаюсь.
0
(ノಠ益ಠ)ノ彡┻━┻
 Аватар для N3stY
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
28.08.2017, 12:42
Лучший ответ Сообщение было отмечено Uni_programist как решение

Решение

Цитата Сообщение от Uni_programist Посмотреть сообщение
В данном случае все ошибки на экран выводятся, но если reCAPTCHA отсутствует флажок, то открывается пустая страница с этим скриптом
Вы сами указали скрипту что нужно остаться на текущей странице при неудаче.

Попробуйте заменить эту строку
PHP
1
if(!$passed) echo '<script type="text/javascript">alert("Ошибка! Google сообщил нам, что Вы не индефицировались в ReCAPCHA. Мы настоятельно рекомендуем поставить флажок "Я не робот!". Сейчас введенная Вами информация сброшена и Вам придется ввести форму и флажок заново. "); </script>';
На эту
PHP
1
if(!$passed) die('Ошибка! Google сообщил нам, что Вы не индефицировались в ReCAPCHA. Мы настоятельно рекомендуем поставить флажок "Я не робот!". Сейчас введенная Вами информация сброшена и Вам придется ввести форму и флажок заново. ');
1
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
28.08.2017, 12:59  [ТС]
N3stY, а переадресация, на файл index.php, как быть?
0
(ノಠ益ಠ)ノ彡┻━┻
 Аватар для N3stY
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
31.08.2017, 19:23
Uni_programist, в смысле?
Цитата Сообщение от Uni_programist Посмотреть сообщение
header("Location: index.php");
вроде есть?
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
31.08.2017, 19:53  [ТС]
N3stY, только не работает она...
0
(ノಠ益ಠ)ノ彡┻━┻
 Аватар для N3stY
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
01.09.2017, 21:35
Цитата Сообщение от Uni_programist Посмотреть сообщение
echo '<script type="text/javascript">alert("Регистрация завершена успешно!");document.location.href = "/reg/";</script>';
* * * * header("Location: index.php");
У вас echo стоит перед установкой заголовка.

PHP
1
2
3
header("refresh: 10; url=index.php"); // Редирект через 10 секунд 
echo 'Регистрация завершена успешно!';
exit;
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
02.09.2017, 19:09  [ТС]
N3stY, как раз все работает на этом моменте,а вот на этом моменте:
PHP
1
2
if(!$passed) die('Ошибка! Google сообщил нам, что Вы не индефицировались в ReCAPCHA. Мы настоятельно рекомендуем поставить флажок "Я не робот!". Сейчас введенная Вами информация сброшена и Вам придется ввести форму и флажок заново. ');
header("Location: index.php");
Как быть?
0
(ノಠ益ಠ)ノ彡┻━┻
 Аватар для N3stY
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
22.09.2017, 17:57
Uni_programist, что вы ожидаете от этого куска кода? Должен быть редирект при ошибке или же если ошибки нет?
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
22.09.2017, 18:17  [ТС]
N3stY, спасибо, я нашел ошибку и заключалась она в зарезервированных символах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2017, 18:17
Помогаю со студенческими работами здесь

Переход на файл отправки при использовании invisible recaptcha?
Всем приввет. Сделал форму отправки через ajax без jQuery перед &lt;/head&gt;: &lt;script...

Заблокировать скрипт recaptcha на странице
До недавнего времени парсил страницу сайта, в последнее время там поставили google.com/recaptcha В программе страница загружается в...

Редирект, если не нажата reCAPTCHA в форме обратной связи
Добрый день. Прошу помощи у знатоков. Создала форму заказа с сайта. Прикрутила к форме reCAPTCHA. Если reCAPTCHA нажать и...

ReCAPTCHA внедрение. Как подключить reCAPTCHA от Google
Здравствуйте! Нашел интересный обработчик формы обратной связи, переписал. Работало нормально, но в один момент решил я установить...

Использование БД, даже если не установлен Office
Необходимо использовать БД от акцесс, даже если на компьютере нет майкрософт офиса. Как это реализовать? Или есть какая то СУБД, не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru