Капча своими руками

Тема в разделе "Общие вопросы", создана пользователем Raven, 12 дек 2017.

  1. Raven

    Raven Новичок

    Сообщения:
    4
    Симпатии:
    0
    Всем привет! У меня OpenCart (русская сборка v2.0.2.0). В ней нет базовой капчи, а есть капча гугл, которая, как оказалось не работает. Вот я и решил установить свою капчу. Но не как модуль, а просто привязав ее к форме обратной связи. Создал в корневой папке папку captcha. В нее поместил файлы index.html (сама капча), captcha.php (генерация капчи), background.png (фон капчи) и verify.php (файл обработки капчи). Саму капчу вывел в форме без проблем. Но вот код обработки капчи:
    <?php
    session_start();
    //проверяет соответствие коду CAPTCHA
    if ($_SESSION["code"] == $_POST["captcha"]) {
    //сообщаем строку true, если код соответствует
    echo 'true';
    }
    else {
    //сообщаем строку false, если код не соответствует
    echo 'false';
    header("Location: captcha.php");
    }
    ?>
    )
    который находится в файле verify.php не знаю куда и как правильно вставить. Форма обратной связи обрабатывается другим файлом (<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" class="form-horizontal">). Подскажите, если кто знает, как мне это реализовать
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
  3. Raven

    Raven Новичок

    Сообщения:
    4
    Симпатии:
    0
    Я пробовал уже. Ничего не вышло. Вот я и решил по более простой схеме сделать. Но и тут неудача
     
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
    1. В директорию catalog\controller\tool кидаем файл captcha.php


    2. В шаблоне \catalog\view\theme\default\template\information\contact.tpl
    вставим код капчи
    Код:
              <div class="form-group required">
                <label class="col-sm-2 control-label" for="input-captcha"><?php echo $entry_captcha; ?></label>
                <div class="col-sm-2">
                  <input type="text" name="captcha" id="input-captcha" class="form-control" />
                </div>
         
                <div class="col-sm-6">
                  <img src="index.php?route=tool/captcha" alt="" />
                  <?php if ($error_captcha) { ?>
                    <div class="text-danger"><?php echo $error_captcha; ?></div>
                  <?php } ?>
                </div>
              </div>


    3. Далее в контроллере \catalog\controller\information\contact.php

    перед
    Код:
    return !$this->error;
    вставим
    PHP:
            if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {
                
    $this->error['captcha'] = $this->language->get('error_captcha');
            }

    перед
    Код:
            $data['column_left'] = $this->load->controller('common/column_left');
    вставим
    PHP:
            if (isset($this->request->post['captcha'])) {
                
    $data['captcha'] = $this->request->post['captcha'];
            } else {
                
    $data['captcha'] = '';
            }
    перед
    Код:
    $data['button_submit'] = $this->language->get('button_submit');
    вставим
    PHP:
            if (isset($this->error['captcha'])) {
                
    $data['error_captcha'] = $this->error['captcha'];
            } else {
                
    $data['error_captcha'] = '';
            }
    и после
    Код:
    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
    вставим
    PHP:
    unset($this->session->data['captcha']);

    Ну и в яз файл добавить переменные error_captcha и entry_captcha и назначить их при необходимости.

    Должно работать.. если постараться...
     

    Вложения:

    • captcha.php
      Размер файла:
      1,3 КБ
      Просмотров:
      67
  5. Raven

    Raven Новичок

    Сообщения:
    4
    Симпатии:
    0
    Безмерно Вам благодарен! Все отлично работает.
     
  6. Raven

    Raven Новичок

    Сообщения:
    4
    Симпатии:
    0
    Ravilr, здравствуйте! Спасибо еще раз за помощь с капчей. Скажите, а как-то можно прикрутить к ней кнопку обновления?
     
  7. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
    Не наглейте ;) Пусть кто нибудь другой продолжит при желании.
     
  8. елена81

    елена81 Новичок

    Сообщения:
    1
    Симпатии:
    0
    Добрый вечер. Помогите, пожалуйста, установить капчу на страницу Регистрация.
    У меня OpenCart 1.5.6.4
     
  9. fanatic

    fanatic Продвинутый пользователь

    Сообщения:
    1.415
    Симпатии:
    239
    HTML:
    <img src="index.php?route=tool/captcha" alt="" onclick="this.src='index.php?route=tool/captcha&id=' + (+new Date());"/>
    при клике по капче, должна изменяться. пробуйте. я не проверял
     
  10. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    То вы писали для сборки v2.0.2.0, как понимаю. А относительно 2.3 можете разложить в таком же виде? По указанному адресу в 2.3 нет капчи и как она где должна располагаться ума не приложу (не, ну она есть тут admin/controller/extension/captcha/basic_captcha.php - однако название другое имеет)

    Не могу понять, куда эта капча у меня подевалась со страниц. Точно помню, шо она была. А потом в процессе всяких правок кудась исчезла. Когда - не помню. Куда - не знаю.

    Посмотрела - в настройках магаза в опциях включена. В модулях включена (обычная капча, по умолчанию).
    Грешу на всякие правки и конфликты в результате этого, но думаю - дайка перед заменой сайта на серваке - спрошу, мож умные люди чего скажут доброго...

    Фактически она конечно не сильно спасает от ботов, они ща научились обходить всё. Но важно мне понять, куда она делась. Для порядку. Вот в голове крутится, шо мне она как-то даже надоела и я могла сгоряча её удалить. Так я бы заблокировала её работу и всё. А тут всё открыто вроде, а её нет. Чертовщина какая-то :(

    У меня вместо for="input-captcha" везде писано for="input-name" - это нормально?

    П.С. Усиленно соображаю - может я даже ставила ваш модуль раньше
    https://forum.opencart-russia.ru/threads/modul-forma-obratnoj-svjazi.4230/#post-41086

    (это я с положительной интонацией сказала - вдруг я не там где надо кнопку включения ищу)
     
    Последнее редактирование: 28 сен 2021
  11. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
    Лежит она в 2.3 как отдельные модули, в директории *\extension\captcha
    Соответственно в контроллере необходимых "страниц" есть код
    PHP:
            // Captcha
            
    if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('contact', (array)$this->config->get('config_captcha_page'))) {
                
    $data['captcha'] = $this->load->controller('extension/captcha/' $this->config->get('config_captcha'), $this->error);
            } else {
                
    $data['captcha'] = '';
            }
    который проверяет статус капчи и для какой защищаемой странице включено. На основе этих данных и происходит включение капчи в контроллер странице.
     
  12. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    В 9 файлах этот код есть. В том числе и в Контактах, например, но капчи там почему-то нет :(

    [​IMG]
     

    Вложения:

  13. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Ан нет!!! Взяла в поиск ВСЮ строчку и указанный вами код только в одном файле обнаружен - в catalog\controller\information\contact.php
    А в других уже другой код. Буду сравнивать их разницу...

    [​IMG]
     

    Вложения:

  14. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Ага, вот поняла - код прописан под каждую конкретную папку (с её названием), потому и разные они все
     
  15. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    У меня почему-то там лежат другие файлы:

    admin/controller/extension/captcha/basic_captcha.php
    Но в нём нет такого кода, как вы показали

    catalog/controller/extension/captcha/--- нет файла с базовой капчей---
    По этому адресу совсем нет такого файла (там только Гуглевская капча)
    :(

    ПС. Приложила на всяк случай базовую капчу из адреса admin/controller/extension/captcha/basic_captcha.php
     

    Вложения:

  16. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
    Должна быть. Значит вы ее удалили. Откройте дистрибутив нужной версии и проверьте наличие.
     
  17. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Вау! Вставила из базовой версии прямо, из оСторе 2.3.02 (какую быстро нашла под рукой)
    И о, чудо, появился код! :)
    Благодарю,Ravilr, за поддержку!

    [​IMG]
     

    Вложения:

  18. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Но есть одна особенность - код не меняется. Я написала сообщение, отправила, а код остался таким же. Написала следующее, отправила, всё опубликовалось. Понимаю так, шо он под сессией работает одного человека. Выхожу, захожу с другого браузера и там уже другой код.
    А может кто помнит, как сделать код постоянно сменяемым? Отправил чел сообщение - и код изменился. Шоб не привязывался к сессии? Я не уверена, что захочу такое внедрять, но шоб принять решение хотелось бы попробовать для начала...
     
    Последнее редактирование: 28 сен 2021