Last active
March 12, 2024 10:07
-
-
Save 4e6ka/7fcf59b32eca8244a3d80e15476353fe to your computer and use it in GitHub Desktop.
Антиспам для Formit, фильтрует ссылки, емейлы
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[!AjaxForm? | |
&snippet=`FormIt` | |
&hooks=`recaptchav2,email,spam,FormItSaveForm` | |
&form=`tpl.AjaxForm` | |
&customValidators=`antispam` | |
&submitVar=`zayavkamodal` | |
&emailTpl=`MyEmailChunk` | |
&emailTo=`[[++managers_mail]]` | |
&emailFrom=`[[++mail]]` | |
&emailSubject=`From page | [[*pagetitle]] | [[!+nowdate:default=`now`:strtotime:date=`%d.%m.%Y`]]` | |
&validate=`name:required:regexp=^/[^А-я]/^,phone:required:minLength=^7^,mess:antispam,g-recaptcha-response:required` | |
&validationErrorMessage=`В форме содержатся ошибки!` | |
&successMessage=`Сообщение успешно отправлено` | |
]] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/*Сниппет, проверяющий содержание формы на признаки спама*/ | |
//Определяем значения служебных переменных по умолчанию | |
$success=true; | |
$haserror=false; | |
//Массив запрещенных фрагментов строк | |
//Если в каком либо поле формы встретится один из ниже перечисленных фрагментов, то далее обрабатывать сообщение не будем | |
$forb=array( | |
'@', | |
'http', | |
'://', | |
'www' | |
); | |
//Пробегаем по массиву запрещенных фрагментов | |
foreach ($forb as $f){ | |
if($haserror==false){ //Если еще не встретился запрещенный фрагмент | |
$haserror=strpos($value,$f); //Проверяем его в значении текущего проверяемого поля ввода | |
} | |
} | |
//Если была обнаружена ошибка | |
if ($haserror!=false) { | |
$validator->addError($key,'Недопустимое значение!'); | |
$modx->log(xPDO::LOG_LEVEL_ERROR,'Антиспам: IP='.$_SERVER['REMOTE_ADDR'].' СОДЕРЖАНИЕ '.$key.': '.$value); | |
return false; | |
} | |
//Возвращаем результат работы валидатора | |
return $success; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<form action="[[~[[*id]]]]" role="form" id="ajaxform3" class="mainForm-form"> | |
<input type="hidden" name="succes_id" value="[[+succes_id_block]]"> | |
<input type="hidden" name="close_success" value="[[+close_success]]"> | |
<div class="form-group mb-3"> | |
<input type="text" class="form-control" placeholder="Имя" id="name" name="name" value="[[+fi.name]]"> | |
</div> | |
<div class="form-group mb-3"> | |
<input type="phone" class="form-control" placeholder="Телефон" id="phone" name="phone" value="[[+fi.phone]]"> | |
<span class="error_phone">[[+fi.error.phone]]</span> | |
</div> | |
<div class="form-group mb-3"> | |
<textarea class="form-control" id="mess" name="mess" placeholder="Ваш вопрос" rows="3" value="[[+fi.mess]]"></textarea> | |
<span class="error_mess">[[+fi.error.mess]]</span> | |
</div> | |
[[!recaptchav2_render]] | |
[[!+fi.error.recaptchav2_error]] | |
<span class="error_g-recaptcha-response error error_personal"></span> | |
<div class="form-group"><button type="submit" class="btn btn-primary w-100 mt-3" name="zayavkamodal" value="zayavkamodal">Отправить</button></div> | |
[[+fi.success:is=`1`:then=` | |
<div class="alert alert-success">[[+fi.successMessage]]</div> | |
`]] | |
[[+fi.validation_error:is=`1`:then=` | |
<div class="alert alert-danger">[[+fi.validation_error_message]]</div> | |
<script> | |
window.location.href = "ok.html"; | |
</script> | |
`]] | |
</form> |
Пример вызова
[[!AjaxForm?
&snippet=FormIt
&hooks=recaptchav2,email,spam,FormItSaveForm
&form=bigform_bs4
&customValidators=antispam
&submitVar=bigform
&emailTpl=MyEmailChunk_express
&emailTo=[[++managermails]]
&emailFrom=``
&emailSubject=[[*pagetitle]], заявка с проблемой, [[!time:date=
%b %d %Y %R`]]`
&validate=`name:required:regexp=^/[^А-я]/^,phone:required:minLength=^7^, message:antispam, g-recaptcha-response:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено`
]]
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Добавляем к Formit или AjaxForm