Как сделать форму обратной связи для сайта

Форма обратной связи — нужная вещь для любого сайта. С помощью неё пользователь может отправить сообщение администратору ресурса, т.е. иметь какой-то контакт с сайтом. Вот как примерно выглядит форма:

Главным html тегом на котором основывается работа обратной связи является — тег <form>.

Простой вариант реализации формы обратной связи

Давайте рассмотрим для начала простейшую форму для отправки писем.

HTML-код самой простой формы обратной связи

<form method="post" action="">
Имя:
<input type="text" class="text" name="user_name" size="50"/>
Е-mail:
<input name="user_email" type="text" class="style" size="50"/>
Тема:
<input type="text" class="text" name="mess_subj" size="50"/>
Сообщение:
<textarea name="mess" class="textarea" rows="8" cols="45"></textarea>
<input type="submit" value="Отправить сообщение"/>
</form>

Это всего лишь форма, которая не содержит обработчика для отправки сообщения. Давайте напишем обработчик.

Код обработчика нужно вставить где-то в начале страницы или хотя бы перед формой:

<?php
$flag_error = false;
if (isset($_POST['user_name'])) {$user_name = $_POST['user_name'];}
if (isset($_POST['user_email'])) {$user_email = $_POST['user_email'];}
if (isset($_POST['mess_subj'])) {$mess_subj = $_POST['mess_subj'];}
if (isset($_POST['mess'])) {$mess = $_POST['mess'];}
if (empty($user_name))
{
echo "Не указано имя!";
$flag_error = true;
}
if (empty($user_email))
{
echo "Не указан e-mail!";
$flag_error = true;
}
if (empty($mess_subj))
{
echo "Тема письма не написано!";
$flag_error = true;
}
if (empty($mess))
{
echo "Сообщение не написано!";
$flag_error = true;
}
$to = "электронная почта кому отправлять";
$headers = "Content-type: text/plain; charset = windows-1251";
$subject = "Сообщение".$mess_subj;
$message = "Имя пославшего: $user_name nЭлектронный адрес: $user_email nСообщение: $mess";
if ($flag_error == false && mail($to, $subject, $message, $headers) )
{
echo "Сообщение отправлено";
}
else
{
echo "Сообщение не удалось отправить!";
}
?>

Не забудьте изменить значение переменной $to, в которой нужно прописать адрес почты куда будет отправлять письмо. Например:

$to = "petrov_ivan@yandex.ru";

К этой конструкции было бы не плохо прописать и стиль. Например такой:

.text, .textarea{
font: normal 12pt verdana;
border: 1px solid #808080;
color: #6C3DD3;
border-radius: 5px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
}

Минусом этой формы безусловно является отсутствие каптчи. Без каптчи приходит множество спам писем. Также отсутствует анализ сообщения на html-код, специальные символы, что является не безопасным для сервера.

Давайте рассмотрим более “умный” вариант формы обратной связи.

Реализация формы обратной связи с каптчей и проверкой символов

Здесь нужно будет подключать дополнительные файлы, поскольку уместить все в одном будет проблематично. Рассмотрим все по шагам.

1. Скачайте архив: feedback.rar, в котором будут файлы:

  • captcha.php и captcha.class.php — модули для обработки капчи
  • validator.php — модуль для проверки полей на ошибки и специальные символы
  • feedback.html — файл с примером формы для отправки
  • form.css — файл со стилями
  • Десять изображений — для генерации капчи

2. Залейте все файлы к себе на хостинг. Рекомендую десять изображений залить в папку /images. Остальные файлы либо в корень, либо создайте отдельную директорию, где обрабатываются php функции.





3. Рассматривать подробно содержимое файлов валидации и капчи заняло бы очень много времени. Уверен, что Вы и сами при желании сможете разобраться. Давайте рассмотрим основной код в feedback.html:

<?php
session_start();
require_once 'validator.php';
$validator = new Validator();
$validator->set_error_delimiters('<div class="error">', '</div>');
//Задаем правила валидации
$rules = array(
array(
'field' => 'user_name',
'label' => 'Ваше имя',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения'
)
),
array(
'field' => 'user_email',
'label' => 'Ваш e-mail адрес',
'rules' => array(
'trim' => '',
'required' => 'Поле %s обязательно для заполнения',
'valid_email' => 'Поле %s должно содержать правильный email-адрес'
)
),
array(
'field' => 'subject',
'label' => 'Тема письма',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения'
)
),
array(
'field' => 'text',
'label' => 'Текст сообщения',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения'
)
),
array(
'field' => 'keystring',
'label' => 'Капча',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'required' => 'Вы не ввели цифры изображенные на картинке',
'valid_captcha[keystring]' => 'Вы ввели не правильный цифры с картинки'
)
)
);
//Устанавливаем правила валидации
$validator->set_rules($rules);
$message = '';
//Запускаем валидацию POST данных
if($validator->run()){

//Здесь впишите свой e-mail адрес
//на негу будут приходить уведомления с формы
$to = 'VASHA_POCHTA@yandex.ru';

$from = "=?WINDOWS-1251?b?" . base64_encode($validator->postdata('user_name')) . "?=";
$subject = "=?WINDOWS-1251?b?" . base64_encode( $validator->postdata('subject') ) . "?=";

$mail_body = "Поступил новый ответ от формы обратной связи (VASH_SITE)rnn";

//Формируем текст сообщения
foreach($rules as $rule){
if($rule['field'] == 'keystring') continue;
$mail_body .= $rule['label'].': '.$validator->postdata($rule['field'])."rn";
}

$header = "MIME-Version: 1.0n";
$header .= "Content-Type: text/plain; charset=windows-1251n";
$header .= "From: ". $from . " <" . $validator->postdata('user_email'). ">";
//Отправка сообщения
if(mail($to, $subject, $mail_body, $header)){

$message = '<div class="noerror">Ваше сообщение успешно отправлено!</div>';

//Очищаем форму обратной связи
$validator->reset_postdata();
}
else{

$message = '<div class="error">Ваше сообщение не отправлено!</div>';
}
}
else{

//Получаем сообщения об ошибках в виде строки
$message = $validator->get_string_errors();

//Получаем сообщения об ошибках в виде массива
$errors = $validator->get_array_errors();
}
?>
<?=(!empty($message))? '<div class="errors">'.$message.'</div>': ''?>
<form action="" method="post" class="form">
<div <?=(!empty($errors['user_name']))? 'class="error_field"': '';?>>
<label>Ваше имя:</label>
<input type="text" class = "text" name="user_name" value="<?=$validator->postdata('user_name');?>" />
</div>

<div <?=(!empty($errors['user_email']))? 'class="error_field"': '';?>>
<label>Ваш e-mail:</label>
<input type="text" class = "text" name="user_email" value="<?=$validator->postdata('user_email');?>" />
</div>

<div <?=(!empty($errors['subject']))? 'class="error_field"': '';?>>
<label>Тема письма:</label>
<input type="text" class = "text" name="subject" value="<?=$validator->postdata('subject');?>"/>
</div>

<div class="area<?=(!empty($errors['text']))? ' error_field': '';?>">
<label>Текст сообщения:</label>
<textarea cols="40" class = "textarea" rows="5" name="text"><?=$validator->postdata('text');?></textarea>
</div>

<div <?=(!empty($errors['keystring']))? 'class="error_field"': '';?>>
<label class="captcha">Капча:</label>
<div class="capth_images"><?php require 'captcha.php';?></div>
<label class="captcha">Введите цифры:</label>
<input type="text" class = "text" name="keystring" value=""/>
</div>
<div>
<label> </label>
<input type="submit" class="btn" value="Отправить сообщение" />
</div>
</form>

Работу этой формы можно посмотреть на странице контакты. Главные особенности работы этого скрипта:

1. Происходит проверка всех полей (благодаря валидации). Поэтому можно быть спокойным вредоносные скрипты и прочие спецсимволы, которые могут нарушить работу сервера.

2. В случае если поле заполнено некорректно или не заполнено вообще, будет выведено сообщение об ошибке

Неправильно введен E-mail:

Неправильно введена капча:

3. Этот код можно интегрировать в любой движок. Либо на статичный сайт.




Читайте также:

• Как добавить счетчики посещений на сайт

• Как сделать выпадающие меню

• Как сделать меню для сайта на PHP

• Как сделать сайт на PHP

• Как добавить RSS ленту на сайт

• Как скрыть ссылку от поисковиков

← Перейти в каталог html уроков и советов

Читайте также:

Copy Protected by Chetan's WP-Copyprotect.