Почти на каждой интернет страничке вы можете встретить подобную форму. Для чего она нужна не особо то известно, ведь в случае если кто-то хочет связаться с Вами, для этого обычно оглашают свой почтовый ящик, и как говорится: "Дело в шляпе". Как мне кажется, такая форма существует лишь для удобства, и не более того. Несмотря, как мне кажется, на бесполезность данной формы, она нужна почти на каждом проекте, стало быть нам нужно уметь ее реализовывать. Я практиковал как минимум два типа таких форм.
Не без известная форма отправляющая письмо на почтовый адрес администрации, и простое текстовое сообщение которое сохраняется прямиком в базе данных самого сайта. Неоспоримый плюс первого подхода в том, что ответить на сообщение пользователя можно сразу же после получения сообщения, то бишь прямиком из своего почтового клиента. Второй же подход будет актуален в случае если у Вас по какой то причине отсутствует возможность отсылать почту с вашего сайта, либо стоит ограничение на отправленную почту. Этот подход так же имеет свой плюс - Вся работа с сайтом проходит из Вашей админ панели. Мне такой подход более удобен, но я приведу оба варианта кода.
Для этого модуля нам потребуется создать шаблон с формой, и обработчик. Так же подправить наш файл index.php и все
В шаблон формы (contacts.html) будет входить четыре поля: автор, мыло, тема и текст. Приступим к реализации этой формы:
<center><p style="width:500px;">Если Вам нужно, по какой то причине связаться со мной, то Вы можете это сделать через форму обратной связи, которую Вы видите ниже.</p></center><br>
<form action="index.php?contact=1" method="post" name="form2">
<input style="width:500px;" name="author_contact" type="text" value="Введите ник*">
<br>
<input style="width:500px;" name="email_contact" type="text" value="E-mail*">
<br>
<input style="width:500px;" name="them_contact" type="text" value="Тема*">
<br>
<textarea style="width:500px;" name="txt_contact" rows="10">Введите текст*</textarea>
<br>
<p><input type="submit" value="Отправить сообщение"></p>
</form>
Ничего сложно тут нет, обычна форма для отправки информации.
Далее нам потребуется написать модуль вывода этой формы. Как Вы могли заметить, мы не использовали код-слова, поэтому сам модуль вывода формы будет выглядеть неприлично коротким в тоже время у нашего модуля будет два назначения, первый - вывод формы, а второй - вывод сообщения об отправки, вот код с комментариями:
<?
function contact($contact)
{
if($contact == 1)//Если пользователь еще не отправлял сообщение
{
$sm_read = file("templates/contacts.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
}
if($contact == 2)//Если пользователь уже отправил сообщение
$sm_read = "<p align='center'>Ваше сообщение отправлено</p>";//Пользователь увидит следующее сообщение
return $sm_read;//Выводим с генерированный html код
}
?>
Тут все должно быть понятно Как Вы могли заметить, переменная $contact определяет какое результат выдаст нам функция. Я назвал этот файл contact.php и поместил в папку moduls
Думаю пришло время подправить наш файл index.php и посмотреть выводится ли наша форма. Что стоит исправить в нашем главном файле? Первое что стоит сделать, это определить переменную $contact. Вставляем следующий код сразу после определения переменной $blog, вот как это выглядит:
if($_GET['blog'])$blog = $_GET['blog'];
if($_GET['contact'])$contact = $_GET['contact'];//Новая строчка
Далее, нам стоит исправить условие вывода нашего модуля "мини новостей", вот как должно выглядеть условие подключение этого модуля
//МОДУЛЬ МИНИ НОВОСТЕЙ
if(!$blog AND !$contact)//Новое условие
{
include("moduls/news.php");
$txt = index_page();//Выводим результат функции в переменную, которая отобразится на экране пользователя
}
//МОДУЛЬ МИНИ НОВОСТЕЙ
После чего подключаем наш новый модуль. Я его подключил перед модулем "мини новостей", Вот кусочек кода:
//МОДУЛЬ КОНТАКТЫ
if($contact)//Если существует переменная
{//то
include("moduls/contact.php");//подключаем модуль
$txt = contact($contact);//Выводим результат функции в переменную, которая отобразится на экране пользователя
}
//МОДУЛЬ КОНТАКТЫ
Проделывание этих операций вполне должно хватить для того чтобы увидеть нашу форму. Если Вы все сделали правильно, то по адресу index.php?contact=1 она должна отобразится.
Если Вы видите созданную форму, значит пора создать обработчик для нее.. Перед тем как я вывешу код с комментариями, хотел бы кое что пояснить. В коде будет два метода отправки сообщения, по почте и в базу данных. Отправку сообщения на почту будем реализовывать с помощью функции mail(); Что касается второго способа отправки. Для корректной записи в базу данных, Вам следует создать таблицу, вот ее sql запрос:
CREATE TABLE IF NOT EXISTS `mess_admin` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`login` varchar(255) NOT NULL,
`them` varchar(255) NOT NULL,
`date_g` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Так, продолжу... Обработчик я писал непосредственно в файле contact.php перед функцией contact($contact), вот код с комментариями:
//--------------ОБРАБОТЧИК КОНТАКТОВ
$date_day = date("d");//Определяем день
$date_month = date("m");//Определяем месяц
$date_year = date("Y");//Определяем год
$date_time = date("H:i");//Определяем часы и минуты
$date_cont = $date_day."/".$date_month."/".$date_year." ".$date_time;//Склеим все переменные в одну
//получим дату для записи в формате день/месяц/год часы:минуты
//Определяем посланные переменные из формы
if(isset($_POST['author_contact']))$author_contact = $_POST['author_contact'];
if(isset($_POST['email_contact']))$email_contact = $_POST['email_contact'];
if(isset($_POST['them_contact']))$them_contact = $_POST['them_contact'];
if(isset($_POST['txt_contact']))$txt_contact = $_POST['txt_contact'];
if($author_contact & $email_contact & $them_contact & $txt_contact)//Если посланные переменные определены как существующие
{
//Переводим html код (если есть) в каракозябры =)
//Вообщем то тут несколько лишних строк, но у меня параноя, поэтому я проверяю ВСЕ переменные
$author_contact = htmlspecialchars($author_contact);
$email_contact = htmlspecialchars($email_contact);
$them_contact = htmlspecialchars($them_contact);
$txt_contact = htmlspecialchars($txt_contact);
//Избавляемся от кавычки
$author_contact = str_replace("'","'",$author_contact);
$email_contact = str_replace("'","'",$email_contact);
$them_contact = str_replace("'","'",$them_contact);
$txt_contact = str_replace("'","'",$txt_contact);
$txt_contact = str_replace("\n","<BR>",$txt_contact);//Заменяем переносы строки на тег <BR>
//ДОБАВЛЯЕМ СООБЩЕНИЕ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO mess_admin (login,them,date_g,email,text)
VALUES ('$author_contact','$them_contact','$date_cont','$email_contact','$txt_contact')");
//ДОБАВЛЯЕМ СООБЩЕНИЕ В БАЗУ ДАННЫХ
//ИЛИ
//ООТПРАВЛЯЕМ СООБЩЕНИЕ ПО ПОЧТЕ
$to = "test@test.ru";//Ваш почтовый адрес
$txt_contact = $author_contact." <".$email_contact."> Вам пишет: ".$txt_contact;//Приклеиваем к тексту сообщения
//контактную информацию отправителя
mail($to,$them_contact,$txt_contact);//Собственно сама отправка
//ООТПРАВЛЯЕМ СООБЩЕНИЕ ПО ПОЧТЕ
header("location: index.php?contact=2");//Перенаправляем пользователя
exit;//к сообщениею об успешной отправки
}
//--------------ОБРАБОТЧИК КОНТАКТОВ
В коде нет никаких условий по отправки, так что если вы скопируете его без изменений, то он будет отправлять сообщения и в базу данных и на почту (test@test.ru) Так что выберите один из способов и удалите лишний Так же хочу заметить, что отправка по почте происходит по самой простейшей форме. Надеюсь Вам статья оказалась хоть немного полезной, у меня все, удачи Вам!
Исходник |