В процессе работы сайта, у его посетителей часто возникает необходимость оперативно связаться с администратором.
В этом случае выручает форма обратной связи, где можно оставить сообщение, которое будет отправлено на электронный адрес.
Предлагаю небольшой скрипт, который позволяет используя функцию PHP mail() отправлять сообщения
из формы на странице на почтовый ящик админа. Так же этот скрипт сохраняет почтовые адреса в таблицу,
что в дальнейшем позволит создать свою базу подписчиков. Для этого используется база MySQL.
Код скрипта будет находиться в 5-ти файлах:
- sendmail.php - HTML- страница с формой
- lib.php - с кодом функций и констант
- tb_klient.php - для создания таблицы e-mail адресов.
- captcha.php - для генерации изображения кода CAPTCHA
- send_mess.php - файл с php кодом обработки и отправки сообщения
Ну, начнем по порядку. И так, дизайн страницы можно создать своему усмотрению. Я ограничусь
минимальным.
sendmail.php. HTML- страница с формой
<html>
<head>
<title>Обратная связь</title>
</head>
<body>
<form name="send_mess" action="send_mess.php" method="POST" style="border: 1; border-color: #0000CC">
<center>b><font color="#800080" size="-1"><u>Форма обратной связи</u></font></b></center>
<center><i><font color="#800000" size="-2">Здесь можно задать вопрос администратору сайта</font></i></center><br />
Ваше имя:<br />
<input name="name" type="text" /><br />
Ваш e-mail: <br />
<input name="mail" type="text" /><br />
Сообщение:<br />
<textarea name="message" rows="15" cols="70"></textarea><br /><br />
<input type="hidden" name="date" value="<?php echo date("Y-m-d-H-I-s");?> ">
<table>
<tr>
<td align="center" width="50%">
<img src="captcha.php" />
</td>
<td align="center"><input name="capthca" value="" maxlength="5" size="9" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="Отправить" />
</td>
</tr>
</table>
</form>
</body>
</html>
На странице создается форма состоящая из следующих элементов:
- Поле для ввода своего имени
- Поле для ввода электронного адреса для получения ответа (адрес должен быть реальным)
- Текстовое поля для ввода самого сообщения
- Невидимый элемент для передачи даты отправки сообщения (может пригодиться в дальнейшем :))
- Поле для ввода защитного кода CAPTCHA (от роботов)
- Кнопка для отправки сообщения
lib.php. Функции и константы
В этом файле находятся все настройки и функции для работы скрипта.
<?php
// Параметры подключения к БД
define('DBHOST', 'localhost'); // имя хоста
define('DBUSER', 'username'); // имя пользователя
define('DBPASSWD', '123'); // пароль БД
define('DBNAME', 'test'); // имя БД
define('ADMIN_EMAIL', 'admin@domen.ru'); // email администратора
/**
* проверка на корректность ввода электронного адреса
*/
function check_email($email) {
if (preg_match("%^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$%", $email)){
return true;
}
return false;
}
/**
* Чистка строки
*/
function strings_clear($string)
{
$string = trim($string);
$string = stripslashes($string);
return htmlspecialchars($string, ENT_QUOTES);
}
/** recource db_connect ( string host, string user, string passwd, string dbname )
* Функция соединения с базой данных
*/
function db_connect($host, $user, $passwd, $dbname)
{
$link = mysql_connect($host, $user, $passwd) or die('Could not connect to database');
mysql_select_db($dbname) or die('Could not select database');
return $link;
}
?>
tb_klient.php. Cоздание таблицы e-mail адресов
Файл отрабатывается один раз. В адресной строке браузера вводим путь до файла и таблица в базе будет создана.
<?php
require_once ('lib.php');
// подсоединямся к базе данных
$link = db_connect(DBHOST, DBUSER, DBPASSWD, DBNAME);
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_query("CREATE DATABASE $dbName");
mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
//создаем таблицу для сбора клиентов
mysql_query("CREATE TABLE tb_klient (
id int(10) unsigned NOT NULL auto_increment,
name varchar(50) NOT NULL,
mail varchar(50) NOT NULL,
date varchar(60) NOT NULL DEFAULT '',
PRIMARY KEY (id));") or die(mysql_error());
echo ('таблица tb_klient (клиенты) создана');
?>
captcha.php. Защита от ботов
Код этого файла был взят из Интернета. К сожалению, не могу указать автора.
<?php
session_start();
session_register('code');
$height = 30;//Высота картинки
$width = 100;//Ширина картинки
/*Генерируем случайное число, для кода*/
$_SESSION['code'] = rand(10000, 99999);//генерируем 5-ти значное число
for($i = 0; $i < 10; $i++)
{
$m[$i] = substr($_SESSION['code'], $i, 1);
}
$image = imagecreate($width, $height); //Создаем изображение 100x20
$backgroundColor = imagecolorallocate($image, 204, 216, 6); //Задаем цвет для фона
$noiseColor = imagecolorallocate($image, 90, 120, 180);//Задаем цвет помех
$color = imagecolorallocate($image, 239, 8, 8);//Задаем цвет для чисел
for( $i = 0; $i < ($width*$height)/3; $i++ )
{
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noiseColor);
}
/* Рисуем линии*/
for( $i = 0; $i < ($width * $height)/150; $i++ )
{
imageline($image, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $noiseColor);
}
for($i = 0; $i < 5;$i++)
{
imagestring($image, 8, $y += 15, 8, $m[$i], $color);
}
header('Content-Type: image/jpeg');
imagejpeg($image);
?>
send_mess.php. Файл с кодом обработки и отправки сообщения
Вот, наконец, и сам код отправки сообщения. Данные передаваемые из формы проходят проверку на корректность.
Проверяется на пустые поля. Все поля должны быть заполнены. Также проверяется E-mail адресс на правильное написание.
Для защиты от роботов необходимо ввести код подтверждения.
Если все верно, сообщение уходит на почтовый адрес администратора сайта. Также происходит запись в таблицу. Если уже был
такой адрес в таблице, то новая запись не производится, а только обновляется. Поэтому дублей адресов в базе не будет.
Вот сам код:
<?php
session_start();
require_once ('lib.php');
// получение данных из формы и присваивание значений переменным
$name = trim($_POST['name']);
$mail = trim($_POST['mail']);
$message = strings_clear($_POST['message']);
$captcha = trim($_POST['capthca']);
// переводим дату в формат временной метки
$date = $_POST['date'];
$parts = explode("-",$date);
$timestamp = mktime($parts[3],$parts[4],$parts[5],$parts[1],$parts[2],$parts[0]);
$date = $timestamp;
?>
<html>
<head>
<title> Отправка сообщения</title>
</head>
<body bgcolor="#CCCC33">
<?php
// проверяем значения переменных на правильность ввода
// 1. на пустые поля формы
if ($name == ""){
echo "<center><h1>Введите свое имя</h1></center>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
exit;}
if ($message == ""){
echo "<h1><center>Введите свое сообщение</center></h1>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
exit;}
if ($mail == ""){
echo "<h1><center>Введите свой e-mail</center></h1>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
exit;}
// 2. проверка на корректность электронного адреса
if (check_email($mail)!= True){
echo "<center><h1>Не корректный e-mail</h1></center>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
exit;
}
// 3. проверка капча
if ($_SESSION['code']!=$captcha){
echo "<center><h1>Введите код</h1></center>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
exit;
}else{
// при правильности всех данных начинаем процесс отправки сообщения на почтовый ящик
$body = "Это сообщение отправлено со страницы сайта\n\n";
$body .= "Имя отправителя: ".$name."\n";
$body .= "E-mail: ".$mail."\n\n";
$body .= $message;
if(mail(ADMIN_EMAIL, "Сообщение с сайта ", $body)== true){
echo "<h2><center>Спасибо, ".$name."</center></h2><br />";
echo "<center><b><h3>Ваше сообщение отправлено</h3></b></center>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
}else{
echo "<h2><center>К сожалению, ".$name."</center></h2><br />";
echo "<center><h3>Ваше сообщение не отправлено</h3></center>";
echo "Попробуйте отправить письмо из Вашего почтового клиента,<br />";
echo "перейдя по этой <a href='".ADMIN_EMAIL."'>ссылке</a>";
echo '<br /><a href="javascript:history.back(1)"><center><font color="#FF0000"><<</font>назад</center></a>';
}
// записываем клиента в базу
// подсоединямся к базе данных
$link = db_connect(DBHOST, DBUSER, DBPASSWD, DBNAME);
// проверяем, есть ли в базе такой электронный адрес
$query = "SELECT id FROM tb_klient WHERE mail = '$mail'";
$result = mysql_query($query, $link);
$count = mysql_num_rows($result);
if ($count > 0){
// если в базе уже есть, то обновляем его
$id = mysql_result($result,0,0);
$que = "UPDATE `tb_klient` SET `name` = '$name',`mail` = '$mail',`date` = '$date' WHERE `tb_klient`.`id` = $id LIMIT 1";
mysql_query($que,$link);
}else{
// иначе добавляем в базу
$que = "INSERT INTO `tb_klient` (`id`, `name`, `mail`, `date`) VALUES (NULL, '$name', '$mail', '$date')";
mysql_query($que,$link);
}
mysql_close($link);
}
?>
</body>
</html>
Вот и все. Скрипт бесплатный, только, прошу, указавайте ссылку на мой сайт
http://eske70.ru .