За последние 24 часа нас посетили 22720 программистов и 1212 роботов. Сейчас ищет 721 программист ...

Форма обратной связи с ReCaptcha

Тема в разделе "Сделайте за меня", создана пользователем vlvshein, 23 авг 2022.

  1. vlvshein

    vlvshein Новичок

    С нами с:
    23 авг 2022
    Сообщения:
    1
    Симпатии:
    0
    Добрый день. Помогите, пожалуйста, разобраться с добавление капчи от google в форму обратной связи. Сайт сделан на umicms, но формы, на сколько я понимаю, самописные. Я не программист, просто админ, которому достался сайт. Перечитал много статей по данной теме. Сама капча выводится, но не работает проверка, поставили "галочку" или не поставили. Т.е. добавляю код, но кнопка "отправить" срабатывает даже когда мы ставим "галочку" я не робот. Нашёл 2 файла, в которых прописана работа формы. Один файл называется callback.php
    С 4 по 19 строки - это я добавил, нашёл в похожих темах.
    Код (Text):
    1. <?php
    2. //session_start();
    3.  
    4. require_once "recaptchalib.php";
    5. $secret = "сюда вставляем ключ";
    6. // пустой ответ
    7. $response = null;
    8. // проверка секретного ключа
    9. $reCaptcha = new ReCaptcha($secret);
    10. if ($_POST["g-recaptcha-response"]) {
    11.         $response = $reCaptcha->verifyResponse(
    12.         $_SERVER["REMOTE_ADDR"],
    13.         $_POST["g-recaptcha-response"]
    14.     );
    15.     if ($response != null && $response->success)
    16.         echo "Hi " . $_POST["name"] . " (" . $_POST["email"] . "), thanks for submitting the form!";
    17. } else {
    18.     echo 'Упс,вы не ввели капчу';
    19. }
    20.  
    21.  
    22. error_reporting(E_ALL);
    23. ini_set('display_errors',0);
    24.  
    25. if (isset( $_POST['phone'])) {
    26.  
    27.     //if($_POST['bot'] != '')die('BIT');
    28.  
    29.     $mail_to='support@.........ru';
    30.    
    31.  
    32.     $phone   = htmlspecialchars(stripslashes($_POST['phone']));
    33.     $fio   = htmlspecialchars(stripslashes($_POST['fio']));
    34.     $city   = htmlspecialchars(stripslashes($_POST['city']));
    35.     $accept   = htmlspecialchars(stripslashes($_POST['accept']));
    36.  
    37.     if(!$city)die();
    38.  
    39.     $body .= "\nФИО:".$fio."\r\n\r\n";
    40.     $body .= "\nГород:".$city."\r\n\r\n";
    41.     $body .= "\nСогласен на обработку данных:".$accept."\r\n\r\n";
    42.     $body .= "\nТелефон:".$phone."\r\n\r\n";
    43.  
    44.     $picture = "";
    45.  
    46.     $thm = 'Новая заявка обратного звонка';
    47.     $msg = $body;
    48.  
    49.  
    50.     // Отправляем почтовое сообщение
    51.     if (empty($picture))
    52.         send_mail($mail_to, $thm, $msg, '');
    53.     else
    54.         send_mail($mail_to, $thm, $msg, $picture);
    55.  
    56. }
    57.  
    58. // Вспомогательная функция для отправки почтового сообщения с вложением
    59. function send_mail($to, $thm, $html, $path='')
    60. {
    61.     if($path){
    62.         $fp = fopen($path,"r");
    63.         if (!$fp)
    64.         {
    65.           print "Файл $path не может быть прочитан";
    66.           exit();
    67.         }
    68.  
    69.         $file = fread($fp, filesize($path));
    70.         fclose($fp);
    71.  
    72.     }
    73.  
    74.     $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    75.     $headers .= "MIME-Version: 1.0\n";
    76.     $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    77.  
    78.     if($path){
    79.         $multipart .= "--$boundary\n";
    80.         $kod = 'utf-8'; // или $kod = 'windows-1251';
    81.         $multipart .= "Content-Type: text/html; charset=$kod\n";
    82.         $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    83.         $multipart .= "$html\n\n";
    84.  
    85.         $message_part = "--$boundary\n";
    86.         $message_part .= "Content-Type: application/octet-stream\n";
    87.         $message_part .= "Content-Transfer-Encoding: base64\n";
    88.         $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
    89.         $message_part .= chunk_split(base64_encode($file))."\n";
    90.         $multipart .= $message_part."--$boundary--\n";
    91.     }else{
    92.         $multipart .= "--$boundary\n";
    93.         $kod = 'utf-8'; // или $kod = 'windows-1251';
    94.         $multipart .= "Content-Type: text/plain; charset=$kod\n";
    95.         $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    96.         $multipart .= "$html\n\n";
    97.     }
    98.  
    99.     if(!mail($to, $thm, $multipart, $headers))
    100.     {
    101.         die('К сожалению, письмо не отправлено');
    102.         //echo "К сожалению, письмо не отправлено";
    103.         header('Location: '.$_SERVER['HTTP_REFERER'].'?error=1');
    104.     }else {
    105.         mail('info@...........ru', $thm, $multipart, $headers);
    106.         die('ok');
    107.         header('Location: /company/partnership/sent1/');
    108.     }
    109.  
    110. }
    Второй файл header.phtml, здесь только добавил код
    Код (Text):
    1. <div class="g-recaptcha" data-sitekey="google ключ"></div>
    в том месте где капча появляется.

    Есть еще скрипт, в котором выводится сообщение об успешной отправке письма
    Фрагмент этого скрипта
    Код (Text):
    1. $('#callback_form').submit(function(){
    2.         /*alert($(".modalka__check").attr("checked"));
    3.  
    4.         if($(".modalka__check").attr("checked") != 'checked') {
    5.             alert('Вы не согласились согласие на обработку своих персональных данных в соответствии с ФЗ №152-ФЗ "О персональных данных".');
    6.             return false;
    7.         }*/
    8.  
    9.         var msg   = $(this).serialize();
    10.         $.ajax({
    11.             type: 'POST',
    12.             url: '/callback.php',
    13.             data: msg,
    14.             success: function(data) {
    15.                 //console.log(data);
    16.                 if(data == 'ok'){
    17.                     $('#callback_form').remove();
    18.                     $('.modalka__content').find('h3').html('Заявка успешно отправлена');
    19.                 }
    20.             },
    21.             error:  function(xhr, str){
    22.                 alert('Возникла ошибка: ' + xhr.responseCode);
    23.                }
    24.         });
    25.         return false;
    26.     });
    Заранее благодарен всем, кто поможет.
     
  2. sereginpro

    sereginpro Новичок

    С нами с:
    2 сен 2022
    Сообщения:
    5
    Симпатии:
    0
    Добавлена переменная для проверки каптчи. $recaptcha_check
    PHP:
    1. <?php
    2. //session_start();
    3. require_once "recaptchalib.php";
    4. $secret = "сюда вставляем ключ";
    5. // пустой ответ
    6. $response = null;
    7. // проверка секретного ключа
    8. $reCaptcha = new ReCaptcha($secret);
    9. if ($_POST["g-recaptcha-response"]) {
    10.         $response = $reCaptcha->verifyResponse(
    11.         $_SERVER["REMOTE_ADDR"],
    12.         $_POST["g-recaptcha-response"]
    13.     );
    14.     if ($response != null && $response->success)
    15.         echo "Hi " . $_POST["name"] . " (" . $_POST["email"] . "), thanks for submitting the form!";
    16.     $recaptcha_check = true;
    17. } else {
    18.     echo 'Упс,вы не ввели капчу';
    19.     //
    20.     $recaptcha_check = false;
    21. }
    22. ini_set('display_errors',0);
    23. if (isset( $_POST['phone']) && $recaptcha_check) {
    24.     //if($_POST['bot'] != '')die('BIT');
    25.     $mail_to='support@.........ru';
    26.  
    27.     $phone   = htmlspecialchars(stripslashes($_POST['phone']));
    28.     $fio   = htmlspecialchars(stripslashes($_POST['fio']));
    29.     $city   = htmlspecialchars(stripslashes($_POST['city']));
    30.     $accept   = htmlspecialchars(stripslashes($_POST['accept']));
    31.     if(!$city)die();
    32.     $body .= "\nФИО:".$fio."\r\n\r\n";
    33.     $body .= "\nГород:".$city."\r\n\r\n";
    34.     $body .= "\nСогласен на обработку данных:".$accept."\r\n\r\n";
    35.     $body .= "\nТелефон:".$phone."\r\n\r\n";
    36.     $picture = "";
    37.     $thm = 'Новая заявка обратного звонка';
    38.     $msg = $body;
    39.     // Отправляем почтовое сообщение
    40.     if (empty($picture))
    41.         send_mail($mail_to, $thm, $msg, '');
    42.     else
    43.         send_mail($mail_to, $thm, $msg, $picture);
    44. }
    45. // Вспомогательная функция для отправки почтового сообщения с вложением
    46. function send_mail($to, $thm, $html, $path='')
    47. {
    48.     if($path){
    49.         $fp = fopen($path,"r");
    50.         if (!$fp)
    51.         {
    52.           print "Файл $path не может быть прочитан";
    53.           exit();
    54.         }
    55.         $file = fread($fp, filesize($path));
    56.         fclose($fp);
    57.     }
    58.     $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    59.     $headers .= "MIME-Version: 1.0\n";
    60.     $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    61.     if($path){
    62.         $multipart .= "--$boundary\n";
    63.         $kod = 'utf-8'; // или $kod = 'windows-1251';
    64.         $multipart .= "Content-Type: text/html; charset=$kod\n";
    65.         $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    66.         $multipart .= "$html\n\n";
    67.         $message_part = "--$boundary\n";
    68.         $message_part .= "Content-Type: application/octet-stream\n";
    69.         $message_part .= "Content-Transfer-Encoding: base64\n";
    70.         $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
    71.         $message_part .= chunk_split(base64_encode($file))."\n";
    72.         $multipart .= $message_part."--$boundary--\n";
    73.     }else{
    74.         $multipart .= "--$boundary\n";
    75.         $kod = 'utf-8'; // или $kod = 'windows-1251';
    76.         $multipart .= "Content-Type: text/plain; charset=$kod\n";
    77.         $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    78.         $multipart .= "$html\n\n";
    79.     }
    80.     if(!mail($to, $thm, $multipart, $headers))
    81.     {
    82.         die('К сожалению, письмо не отправлено');
    83.         //echo "К сожалению, письмо не отправлено";
    84.         header('Location: '.$_SERVER['HTTP_REFERER'].'?error=1');
    85.     }else {
    86.         mail('info@...........ru', $thm, $multipart, $headers);
    87.         die('ok');
    88.         header('Location: /company/partnership/sent1/');
    89.     }
    90. }