Catface

Автор nradiowave, Ограничение по IP для повторной отправки формы RSFrom!Pro, #rsform #joomla

Решение для старой версии модуля RSForm!Pro для Joomla!, в котором не было предусмотрено никаких ограничений по отправки пользователями данных. Боты этим активно пользуются.

Чтобы поставить ограничение на повторную отправку формы можно проверять выполнялась ли отправка данных с текущего IP пользователя ранее за определенный промежуток времени

Для этого в разделе редактирования формы во вкладке "PHP Scripts"

В первую область ввода текста (скрипт исполняемый при выводе формы), с заголовком "The $formLayout string contains the HTML code of the form..." следует прописать следующий код

 

Код php:

$modForm = '';

$ip = $_SERVER['REMOTE_ADDR'];

$db = JFactory::getDbo();

$db->setQuery("SELECT COUNT(`UserIp`) FROM `#__rsform_submissions` WHERE `FormId` = 'ИД_ФОРМЫ' AND `UserIp`='".$db->escape($ip)."' AND `DateSubmitted` > NOW()-INTERVAL 1 HOUR");

 

if ($db->loadResult() > 0){ 

$modForm .= '<p style="color:red;">Превышен интервал запросов (не более одного запроса в час)</p>';

}

 

if ($modForm) $formLayout =  $modForm  . $formLayout ;

 
Где ИД_ФОРМЫ - идентификатор формы, его слудет указать если требуется привязать проверку к конкретной форме (идентификатор формы виден в поле ввода адреса при редактировании соответствующей формы)
 
Это добавит соотвтетсвующее предупреждение при выводе формы
 
Если время базы данных не совпадает с временем заданым для скриптов php следует сделать на это поправку в строке "INTERVAL 1 HOUR"
 
И во вторую область ввода с заголовком "$_POST form data..." (скрипт который выполняется при отправке данных методом POST)
 

Код php:

$ip = $_SERVER['REMOTE_ADDR'];

$db = JFactory::getDbo();

$db->setQuery("SELECT COUNT(`UserIp`) FROM `#__rsform_submissions` WHERE  `FormId` = 'ИД_ФОРМЫ' AND `UserIp`='".$db->escape($ip)."' AND `DateSubmitted` > NOW()-INTERVAL 1 HOUR");

 

if ($db->loadResult() > 0){ 

  $invalid[] = RSFormProHelper::getComponentId("ИД_ПОЛЯ_ФОРМЫ");

}

 

Где так же следует указать идентификатор формы и дополнительно ИД_ПОЛЯ_ФОРМЫ - какое либо существующее поле формы, чтобы форма отработала корректно ошибку подачи запроса и указало что какое либо из полей указано не верно. Можно подвизать под это поле какое либо соответствующее описание ошибки непосредственно в настройках поля.

 

rsform, joomla,

Для добавления комментариев требуется авторизация.

Еще нет аккаунта ? Пройдите регистрацию