Расширеная форма обратной связи на 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>";
}
?>
На этом все. Желаю всем меньше проблем со спамом.
Последние уроки категории:
Сокращение PHP кода
Вы задумывались когда — нибудь о том, что лишний и бесполезный код убивает ваше время разработки приложения/сайта. Хотя это и кажется мелочью, но когда такой мелочи становится много, то время, потраченное впустую, становится ценным. И так давайте посмотрим, что можно и нужно сокращать...
Видимость переменных в PHP
В данном уроке рассматривается область видимости переменных PHP. Объясняется различие локальной и глобальной области видимости, показывается как получить доступ к глобальным переменным внутри функции, как работать с суперглобалами и создавать статические переменные.
Как читать Rss ленты?
Читалки и агрегаторы RSS используются для доступа, чтения и управления периодически-обновляемыми лентами RSS (или Atom), которые генерируются веб-сайтами. Эти ленты предоставляют доступ к последним материалам с этих сайтов.
Установка и настройка PHP+Apache
В этом уроке хотелось бы поднять очень интересную тему – Установка и настройка веб сервера PHP5 + Apache. В интернете довольно много различных инструкций по данной теме, но только вот в основном это копипаст, а не инструкция для человека, я же постараюсь объяснить все намного проще – на пальцах. Причина для установки локального вебсервера довольно много, например скорость выполнения и отладки скриптов, простота загрузки и модернизации контента и еще много чего.
Как выбрать фреймворк
Так уж повелось, что лень – это двигатель прогресса и как бы странно это не звучало, все те блага цивилизации, которые мы имеем сейчас были сделаны в первую очередь для нашего комфорта. Так и программисты чтобы облегчить себе жизнь и тем самым получить возможность создавать более сложные проекты за менее долгое время придумали сделать себе фреймворки.




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