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

Дело в том, что без предварительных правок кода соответствующих файлов компонента, в которых описаны функции для элементов «Load Security Question» и «Check Security Question», кириллица в парах «вопрос-ответ» не поддерживается.

Первоначально, устраняя эту проблему, необходимо убедиться в том, что форма не кэшируется. Не смотря на то, что в нашем распоряжении есть плагин, позволяющий располагать формы где угодно на странице, сами разработчики рекомендуют использовать его с осторожностью. Если форма размещена в теле кэшируемой страницы, то и она сама со всеми своими установками (в том числе и блоки антиспама) так же кэшируется. Поэтому, если нет возможности отключить кэширование страницы, то форму лучше выводить в модуле, или же в качестве отдельной страницы (тип пункта меню «Форма Chronoforms»).

Итак, если форма не кэшируется, но сообщение валидатора «Вы неправильно ответили на вопрос» никуда не делось и отправка не получается, приступаем к устранению проблемы.

Нам нужны два файла:

  1. www/administrator/components/com_chronoforms5/chronoforms/actions/load_security_question/load_security_question.php
  2. www/administrator/components/com_chronoforms5/chronoforms/actions/check_security_question/check_security_question.php

В файле load_security_question.php нужно найти:

  $answers[$k] = strtolower($answer);

и заменить на:

   $answ = json_decode (json_encode($answer));
   $answers[$k] = mb_strtolower($answ);

В файле check_security_question.php найти строчку:

   $chrono_security_answer = strtolower(trim($form->data['chrono_security_answer']));

и заменить на:

   $secquest = json_decode (json_encode( trim($form->data['chrono_security_answer']) ) );
   $secquest = mb_strtolower($secquest);
   $chrono_security_answer = $secquest;

Сохраняем. Закрываем. Проверяем. Теперь правильные ответы должны пройти валидацию, независимо от того, в каком регистре их вводит пользователь.

P.S.:

Создавая список проверочных вопросов и ответов, так же не помешает убедиться в том, что в конце отсутствуют пустые строки. Если в списке будут пустые строки, то форма будет выбрасывать пустые вопросы случайным образом, так же, как и любые другие. Разумеется, в этом случае, она валидацию не пройдет.

 
Добавить комментарий