Расширеная форма обратной связи на PHP

При использовании простых форм обратной связи мы не можем защитить себя от спама и ввода специальных символов. Когда у меня на сайте появилась такая проблема, как спамеры, я подумал и создал данный скрипт. Он позволяет избавиться от 80-90% процентов спамерских ботов. Вы спросите, почему не 100%? Я овечу. На сто процентов никто не может гарантировать защиту от спамеров.

Давайте начнем урок. Сейчас мы рассмотрим часть кода. Это простой код, какой просто отправляет нам письмо на e-mail. Мы возьмем его за основу.

				$name =  $_POST['name']; 
				$email =  $_POST['email']; 
				$url =  $_POST['url']; 
				$comments =  $_POST['comments']; 
				$recipient  = "youremail@url.com"; 
				$subject  = "Вам прислали письмо"; 
				$message =  "Имя: $name  n"; 
				$message .=  "E-mail: $email n"; 
				$message .=  "URL сайта: $url  n"; 
				$message .=  "Коментарий:  $comments nn"; 
				$headers =  "From: My Form n"; 
				$headers .=  "Reply-To: $email"; 
				mail($recipient,$subject,$message,$headers); 
				

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

				if  (!isset($_POST['submit'])) { 
					echo  "<h1>ОШИБКА</h1>n 
					<p>Эта  страница не доступна по прямому запросу!</p>"; 
					exit(); 
				}
				

Примечание: функция exit(); останавливает процесс обработки страницы.

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

				function  cleanUp($data) { 
					$data =  trim(strip_tags(htmlspecialchars($data))); 
					return  $data; 
				}
				

Написанную нами функцию разместим примерно так.

			    function  cleanUp($data) { 
					$data =  trim(strip_tags(htmlspecialchars($data))); 
					return  $data; 
				}
			    $name =  cleanUp($_POST['name']); 
				$email =  cleanUp($_POST['email']); 
				$url =  cleanUp($_POST['url']); 
				$comments =  cleanUp($_POST['comments']);
			    

Теперь нам необходимо сделать проверку на пустые поля. Для этого мы будем использовать встроенную PHP функцию.

				if  ((empty($name)) or (empty($email)) or (empty($comments))) { 
					echo  "<h2>Ошибка  ввода данных</h2>n 
					<p><strong>Имя</strong>,  <strong>e-mail</strong> и <strong>Коментарии</strong> обязательны для заполнения. Пожалуйста, заполните их и  попробуйте еще раз:</p>"; 
					echo  "<form action="process.php"  method="post"><p>"; 
					echo  "<input type="text" name="name" id="name"  value="$name" /> Имя<br />"; 
					echo  "<input type="text" name="email"  id="email" value="$email" /> E-mail<br />"; 
					echo  "<input type="text" name="url" id="url"  value="$url" /> URL сайта<br />"; 
					echo  "<textarea name="comments"  id="comments">$comments</textarea> Комментарии<br />"; 
					echo  "<input type="submit" name="submit"  id="submit" value="Send" />"; 
					echo  "</p></form>"; 
					exit  (); 
				}
				

Выше приведенный код, которые проверяет поля на заполнения. Если поле не заполнено, скрипт выводит ошибку и заново форму. Это действие позволяет пользователям заполнить полу, какое не было заполнено, без потери данных.

Далее будем проверять правильность ввода E-mail адреса.

				if  (!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*$",$email))  { 
					echo  "<h2>Ошибка ввода</h2>n 
					<p>Адресс электронной почты введен не верно :</p>"; 
					echo  "<form action="process.php"  method="post"><p>"; 
					echo  "<input type="text" name="name" id="name"  value="$name" /> Имя<br />"; 
					echo  "<input type="text" name="email"  id="email" value="$email" /> E-mail<br />"; 
					echo  "<input type="text" name="url" id="url"  value="$url" /> URL сайта<br />"; 
					echo  "<textarea name="comments"  id="comments">$comments</textarea> Комментарий<br />"; 
					echo  "<input type="submit" name="submit"  id="submit" value="Send" />"; 
					echo  "</p></form>"; 
					exit(); 
				}
				

Затем будем блокировать ввод мэта тегов.

			    $email =  preg_replace("([rn])", "", $email);
			    $find =  "/(content-type|bcc:|cc:)/i"; 
				if  (preg_match($find, $name) or preg_match($find, $email) or preg_match($find,  $url) || preg_match($find, $comments)) { 
					<p>Вводите  без мэта тегов.</p>"; 
					exit(); 
				}
			    

После того, как Вы объедините все шаги, сохраните PHP файл под именем process.php. Код примерно должен быть таким::

				<?php 
					if  (!isset($_POST['submit'])) { 
						echo  "<h1>Ошибка</h1>n 
						<p>  Эта страница не доступна по прямому запросу!</p>"; 
						exit(); 
					}
					function  cleanUp($data) { 
						$data =  trim(strip_tags(htmlspecialchars($data))); 
						return  $data; 
					}
					$name =  cleanUp($_POST['name']); 
					$email =  cleanUp($_POST['email']); 
					$url =  cleanUp($_POST['url']); 
					$comments =  cleanUp($_POST['comments']);
					if  ((empty($name)) or (empty($email)) or (empty($comments))) { 
						echo  "<h2>Ошибка ввода</h2>n 
						<p><strong>Имя</strong>,  <strong>e-mail</strong> или <strong>комментарии</strong> не были заполнены, попробуйте еще  раз:</p>";
						echo  "<form action="process.php"  method="post"><p>"; 
						echo  "<input type="text" name="name" id="name"  value="$name" /> Имя<br />"; 
						echo  "<input type="text" name="email"  id="email" value="$email" /> E-mail<br />"; 
						echo  "<input type="text" name="url" id="url"  value="$url" /> URL сайта<br />"; 
						echo  "<textarea name="comments"  id="comments">$comments</textarea> Комментарий<br />"; 
						echo  "<input type="submit" name="submit"  id="submit" value="Send" />"; 
						echo  "</p></form>";
						exit(); 
					}
					if (!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*$",$email))  { 
						echo  "<h2>Ошибка ввода</h2>n 
						<p>Вы  ввели неверный формат e-mail адреса:</p>";
						echo  "<form action="process.php"  method="post"><p>"; 
						echo  "<input type="text" name="name" id="name"  value="$name" /> Имя<br />"; 
						echo  "<input type="text" name="email"  id="email" value="$email" /> E-mail<br />"; 
						echo  "<input type="text" name="url" id="url"  value="$url" /> URL сайта<br />"; 
						echo  "<textarea name="comments"  id="comments">$comments</textarea> Комментарий<br />"; 
						echo  "<input type="submit" name="submit"  id="submit" value="Send" />"; 
						echo  "</p></form>";
						exit(); 
					}
					$email =  preg_replace("([rn])", "", $email);
					$find =  "/(content-type|bcc:|cc:)/i"; 
					if  (preg_match($find, $name) || preg_match($find, $email) || preg_match($find,  $url) || preg_match($find, $comments)) { 
						echo  "<h1>Error</h1>n 
						<p>Вводите  без мета тегов.</p>"; 
						exit; 
					}
					$recipient  = "youremail@url.com"; 
					$subject =  "Сообщение из сайта";
					$message =  "Имя: $name  n"; 
					$message .=  "E-mail: $email n"; 
					$message .=  "URL сайта: $url  n"; 
					$message .=  "Коммментарий:  $comments";
					$headers =  "From: My Form rn"; 
					$headers .=  "Reply-To: $email";
					if  (mail($recipient,$subject,$message,$headers)) { 
						echo  "<p>Сообщение  отправленно.</p>"; 
					} else { 
						echo  "<p>Сообщение  не было отправлено, попробуйте позже.</p>"; 
					} 
			    ?>
			    

На этом все. Желаю всем меньше проблем со спамом.

Просмотров: 3152      Опубликовал: Евгений Фединчик      Дата: 03.04.2010 18:41:17
  • Понравился урок? Добавьте его к себе в закладки.

    Последние уроки категории:

    Сокращение PHP кода

    Вы задумывались когда — нибудь о том, что лишний и бесполезный код убивает ваше время разработки приложения/сайта. Хотя это и кажется мелочью, но когда такой мелочи становится много, то время, потраченное впустую, становится ценным. И так давайте посмотрим, что можно и нужно сокращать...

    Видимость переменных в PHP

    В данном уроке рассматривается область видимости переменных PHP. Объясняется различие локальной и глобальной области видимости, показывается как получить доступ к глобальным переменным внутри функции, как работать с суперглобалами и создавать статические переменные.

    Как читать Rss ленты?

    Читалки и агрегаторы RSS используются для доступа, чтения и управления периодически-обновляемыми лентами RSS (или Atom), которые генерируются веб-сайтами. Эти ленты предоставляют доступ к последним материалам с этих сайтов.

    Установка и настройка PHP+Apache

    В этом уроке хотелось бы поднять очень интересную тему – Установка и настройка веб сервера PHP5 + Apache. В интернете довольно много различных инструкций по данной теме, но только вот в основном это копипаст, а не инструкция для человека, я же постараюсь объяснить все намного проще – на пальцах. Причина для установки локального вебсервера довольно много, например скорость выполнения и отладки скриптов, простота загрузки и модернизации контента и еще много чего.

    Как выбрать фреймворк

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

    Комментарии:

    • Осталось: 1000 символов.
      Сохранить комментарий Отправка комментария
    lessons
    downloads
    search
    hosting

    Ищите хороший и не дорогой хостинг?

    Хостинг avahost.ua
    VPS VDS - виртуальный выделенный сервер
    sistems
    RBK Money

    Обменник.ws
    Статистика HitUa