Форма обратной связи — нужная вещь для любого сайта. С помощью неё пользователь может отправить сообщение администратору ресурса, т.е. иметь какой-то контакт с сайтом. Вот как примерно выглядит форма:
Главным 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)\r\n\n"; //Формируем текст сообщения foreach($rules as $rule){ if($rule['field'] == 'keystring') continue; $mail_body .= $rule['label'].': '.$validator->postdata($rule['field'])."\r\n"; } $header = "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=windows-1251\n"; $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 ленту на сайт
• Как скрыть ссылку от поисковиков