За годы своей практики поступало много просьб остановить поток спама с форм обратной связи. Какое-то время классические способы борьбы помогали, до тех пор, пока боты не обучатся обходить такие запреты. К этим способам относятся:

  • валидация заполненных полей на js и php
  • проверка полей на пустоту
  • скрытое поле
  • чекбокс "я не робот"
  • символьная каптча

В настоящее время принцип построения форм у меня следующий: js валидация, ajax отправка данных, php обработчик данных из формы.

JavaScript валидация

Для этих целей подойдет отличный плагин jQuery Validation Plugin. Правила валидации можно прописать, используя атрибуты инпутов, либо прописать все в js. Исчерпывающею информацию можно найти в документации.

<form id="id-form" action="/contact.php?op=contact" method="post">
<input required type="text" name="fio" placeholder="ваше имя">
<input type="text" name="phone" placeholder="телефон">
<input type="submit" value="отправить">
<div class="g-recaptcha" data-sitekey="6Le98hEUAAAAAJFs_BAprcZKMaTRXm_C9RjRGJMM"></div>
<div class="answer"></div>
</form>

  

Ajax отправка формы

Здесь также можно использовать готовый плагин jQuery Form Plugin.

Ниже приведен код совмещения валидации с последующей отправкой формы. Адрес отправки формы указывается в атрибуте action формы.

<script>$('#id-form').validate({submitHandler:function(form){$(form).ajaxSubmit({target:$('.answer')
resetForm:true,});}})</script>

Установка captcha

Поставить каптчу на сайт проще простого. Заходим на сайт гугла, добавляем сайт, получаем ключи для сайта. Один ключ для html кода, см. выше. Другой для проверки на сервере.

Php обработка формы

Что же у нас происходит в php:

  • Проверяем присланные данные с формы
  • Формируем тело письма
  • Отправляем на сервер гугла каптчу
  • Отправляем письмо
  • Информируем посетителя о результатах
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
	$to='mail@yandex.ru'; // получатель письма
		
	$fio = htmlspecialchars($_POST['fio']);
	$phone = htmlspecialchars($_POST['phone']);
	$subject = "Письмо с сайта";
	$message = '<html><head><title>'.$subject.'</title></head><body>
			Имя: '.$fio.'<br>
			Телефон: '.$phone.'<br>
</body></html>';

	$headers="MIME-Version: 1.0\r\n"
	."Content-type: text/html; charset=UTF-8\r\n"
	."From: ".$fio."  <".$to.">\r\n"
	."Reply-To: ".$to."\r\n"
	."X-Mailer: PHP/" . phpversion();

	$recaptcha=$_POST['g-recaptcha-response'];
	if(!empty($recaptcha)){
		$google_url="https://www.google.com/recaptcha/api/siteverify";
		$secret='6Le98hEUAAAAAAm5DW6o50LryqZxFPIouFPjluGu';
		$ip=$_SERVER['REMOTE_ADDR'];
		$url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
		$res=getCurlData($url);
		$res= json_decode($res, true);

		if($res['success']){
			$mail = mail($to, $subject, $message,$headers);
				if($mail)
					echo 'Ваше сообщение отправлено.';
				else 
					echo '<div class="notification_error">Что-то пошло не так, попробуйте позже.</div>';
		}
		else{
			echo 'Пройдите спам проверку!';
		}
	}
	else{
		echo 'Пройдите спам проверку!';
	}		
	
}
else echo "error";


function getCurlData($url){
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_TIMEOUT, 10);
	curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");
	$curlData = curl_exec($curl);
	curl_close($curl);
	return $curlData;
}
?>

Готовую форму можно скачать

Оставить Заявку

Хотите получить консультацию или заказать разработку сайта,
оставьте вашу заявку в форме ниже и с вами обязательно свяжутся.


Я принимаю соглашение

Контакты

г. Владимир

Созвониться можно по телефону

8 (919) 026 93 58

Оставить заявку можно на e-mail:

Он-лайн помощь

Вы всегда можете получить
помощь или задать вопрос, касающиеюся вашего сайта:

открыть диалог

(skype) skype_zvon