PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
Календарь
Апрель (2021)
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930  
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
    • Возможно с течением времени этот...
  • TOP-5

    • Метод POST (2940402)
    • Привет, МИР! (907353)
    • Метод GET (662403)
    • Операторы (602295)
    • Firefox уже запущен, но не отвечает... (347604)

Форма для отправки сообщения с сайта.

Главная » Уроки PHP » Форма для отправки сообщения с сайта.
PHP урок № 99

Скрипт отправки сообщений с сайта

Работоспособность скрипта следует проверять у хостинг провайдера. Если проверку делать на локальном сервере, письма доходить не будут. Хотя в Денвер есть такая возможность проверки работоспособности отправки сообщений. Эти сообщения складываются в директории локального сервера здесь: \tmp\!sendmail
Скрыть email получателя, чисто технически, не представляет труда. Принцип прост, есть страница с формой для написания сообщения, ввода имени отправителя и кнопка, при нажатии на которую все данные из формы отправляются скрипту обработчику. А если есть регистрация на сайте, то поле для ввода имени отправителя вообще не требуется, но с условием, что письмо может отправить только зарегистрированный пользователь. Сейчас рассмотрим пример отправки сообщения для любого пользователя, зарегистрированного или анонимного.

Листинг № 1 - Форма отправки сообщения файл forms.php

<?php
// инициализируем сессию
session_start();

// выводим сообщения
echo $er;
// форма 
echo "
     <form name='form1' method='post' action='mail.php'>
              <input name='session_id' type='hidden' value="
.session_id().">
         Ваше имя:<br>
              <input type='text' name='name' id='textfield' maxlength='15'>
              <br>
              <br>
         Сообщение:<br>
              <textarea name='message_text' cols='60' rows='5'></textarea><br><br>
              <input type='submit' name='button' id='button' value='Отправить'>
        </form>
    "
;
?>
Давайте разберём скрипт отправки сообщений с сайта. Первая строка кода инициализирует сессию, тем самым мы предохраняем нашу форму от флуда. Не возможно будет отправить сообщение из формы, скопировав её например к себе на локальный хост, ну или скажем так затруднительно :)
Вывод сообщений, что всё прошло успешно или наоборот выводит переменная $er. Далее следует сама форма.
Обратите внимание на первый тэг input с именем session_id. Это скрытая форма отправляет текущий ID сессии методом POST обработчику(mail.php), для сверки его с текущей сессией на странице обработчика. Именно этот кусок кода и защищает форму с помощью сессии от спама или от флуда.
ВНИМАНИЕ! При копировании листинга и проверки его работоспособности к себе на сервер, необходимо чтобы дескриптор ?php - был прижат к верхнему левому углу страницы, а следом за ним шла функция session_start(). Не должно быть ни каких отступов и пробелов перед дескриптором php. В противном случаи будет выдаваться ошибка.

Вроде этой:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /www/pozitivp/www/htdocs/lessons/mail_function/forms.php:1) in /www/pozitivp/www/htdocs/lessons/mail_function/forms.php on line 3

Листинг № 2 - Обработчик формы, файл mail.php

<?php
session_start
();
if(
$_POST['session_id'] != session_id() )
{
    exit(
"Отправкой сообщений можно пользоваться 
              только на  сайте "
.$_SERVER['HTTP_HOST'].".");     
}
else
{
    
// Обработка полей формы
    
$message_text = htmlspecialchars(trim($_POST['message_text']));
    
$name = htmlspecialchars(trim($_POST['name']));
    
    
// Проверяем длину сообщения, она не должна превышать $len знаков
    
$len = 200;
    if(
strlen($message_text) > $len)
    {
        exit(
"Ошибка. Сообщение не должно превышать ".$len. " знаков. ");
    }
    
    
// здесь надо вставить email куда отправлять сообщение
    
$to = "[email protected]";
    
$subject="Письмо от ".$name;
    
    
// конвертируем из windows-1251 в koi8-r
    
$subject = convert_cyr_string($subject,'w','k');
    
    
// это само письмо
    
$message ="<html>
               <head></head>
               <body>
               Письмо отправлено - <font color='red'>"
.date("d.m.Y H:i:s"). "</font><br>
              <h3>Текст письма:</h3>"
. $message_text."
               </body>
               </html>
               "
;
    
// конвертируем из windows-1251 в koi8-r           
    
$message = convert_cyr_string($message,'w','k');
    
// заголовки письма
    
$headers = "Content-Type: text/html; charset=KOI8-R\r\n";
    
// от кого письмо
    
$headers .= "From: server <LPHP.RU>\r\n\r\n";
    if(
mail($to,$subject,$message,$headers))
    {
      echo 
"Письмо успешно отправлено.";    
    }
    else
    {
      echo 
"Ошибка. Письмо не отправлено.";    
    }
}
?>
Не забудьте вписать свой email, на который хотите получать сообщения.
Листинг №2 начинается так же с инициализации сессии для скрипта отправки сообщений. Вторая строка кода как раз сверяет, ID отправленный методом POST со страницы формы, с ID инициализированный этой страницей и если они равны выполняется дальнейший код, в противном случаи функция exit() останавливает выполнения скрипт отправки сообщений с сайта и выводит сообщение: Отправкой сообщений можно пользоваться только на сайте..
Само письмо содержится в переменной $text.
Важно, чтобы на вашем хостинге была включена или разрешена к использованию функция mail().
Подробнее с функцией mail() можно ознакомиться здесь: функция mail()
Информация

При рассылке с сайта имейте ввиду, что у хостера могут быть ограничения на отправку писем. Например Хостинг-Центер (hc.ru), имеет следующие ограничения:

I. На наших почтовых серверах установлены следующие ограничения:

- Разрешена отправка не более, чем 5-и сообщений с одного ящика в минуту.
- В одном письме может быть не более 20-и адресатов.
- Размер письма не может быть более 15-и МБ.

II. При отправке писем с хостинга при помощи скриптов, действуют следующие ограничения:

- Разрешена отправка не более 300 адресатам в сутки. Для увеличения данного лимита - обратитесь в службу Технической поддержки


В случае обнаружения фактов рассылки спама аккаунт может быть заблокирован.
У того же хостера, это правило не распространяется на VPS хостинг!

Урок закончен.

Обсудить на форуме

SETTER © LPHP.RU
Администрация сайта
30.07.2009 12:47:03

Понравился урок? Не пропусти следующий!
Рекомендованные уроки этого раздела:
  • Как определить браузер посетителя (пользователя) сайта.
  • Проверка квадратного уравнения
  • Форма для отправки сообщения с сайта.
  • SSH - вход на сервер без ввода пароля

Напишите свой комментарий
Ваше имя
Сообщение
Введите цифры с картинки:
 

Комментарии

Сергей 31.01.2010 20:34:58
а что в html писать то надо?
SETTER 01.02.2010 08:04:10
В HTML пишится только сама форма для отправки, т.е. поля ввода информации и само сообщение, всё остальное, это скрипт PHP. C помощью HTML нельзя отправить сообщения. HTML всего лишь язык разметки web страницы.
Guest 12.10.2010 12:43:40
Спасибо за урок.Кстати форум сайт разъезжается.
SETTER 12.10.2010 12:47:05
А подробнее можно?
Роман 24.12.2010 14:26:04
В wordpress где должны находиться файлы mail.php и forms.php? Я тоже не понял что указывать на странице отправки содержимое forms.php?
SETTER 24.12.2010 14:45:35
Есть два листинга, каждый листинг это код отдельно взятого файла. Первый файл называется forms.php и в него вставляется (копируется листинг №1). И сохраняется файл на сервере. Второй файл mail.php - это обработчик, который собственно и отсылает сообщение с сайта. Во-второй файл нужно сохранить листинг №2. Расположить оба файла в одной папке. Заменить в листинге №2 адрес [email protected] на свой почтовый адрес, на который вы хотите получать сообщения.
Роман 25.12.2010 20:51:46
Я разобрался. Использую Wordpress. 1) Создаем шаблон для обратной связи в папке с темой 2) Листинг 1 вставляем в шаблон 3) Создаем страницу с применением шаблона 4) Подкручиваем CSS 5) Листинг 2 сохраняем в mail.php 6) Файл mail.php складываем в корень сайта, куда установлен Wordpress. P.S. SETTER не в обиду, но задрали советчики типа эти файлы должны лежать в одной папке!
SETTER 25.12.2010 21:04:50
В одной папке они должны лежать у тех кто самостоятельно не сможет прописать путь от формы отправки до обработчика, а прописывается он в теги form атрибут action="ваш_путь_до файла_обработчика". В нашем примере это будет файл mail.php.
SETTER 26.12.2010 01:18:22
Я сейчас, поправил скрипт, теперь точно, нужно просто сделать два файла, скопировать туда по листингу и изменить email ([email protected]) на свой и всё должно работать. При условии, что файлы в одной директории будут находится, это по умолчанию так настроено, вы вполне может изменить эти настройки.
да хорошо))) видео у 12.01.2011 00:21:49
да хорошо))) видео урок бы
AlexeyRJ 06.05.2011 22:22:38
Хм. ХЕЛП. в html вставил как написано между тегами head и body а саму форму отправки туда куда мне нужно и не работает.Пишет:Отправкой сообщений можно пользоваться только на сайте.. А ведь если чисто два php этих файл то работает.
AlexeyRJ 07.05.2011 12:37:06
SETTER: а можно как то forms.php отдельно иметь и вызывать в html где сама форма будет?| Кстати я до рисовал рефреш и форму c проверкой емайла.Можно свой вклад внести, как то это передатьВам код?
Да 12.12.2011 10:55:20
Сделал файл forms.php и mail.php Не понятно потому что не описали процесс как вставлять эту форму на страницу например Контакты А получается голая страница.
SETTER 12.12.2011 16:34:18
Есть такая коyструкция в php - include. C помощью неё и можно подгружать. Здесь читайте http://lphp.ru/article/337.html
zed221 12.04.2012 08:59:39
Приветствую всех!!! а как к таким скриптам можно прикрепить не 1ну форму отправителя а много, чтоб к таму к каму ты посылаеш письмо оно пришло от множество почтовых адресов??? если кто знает как то напишите можно ко мне на мою почту [email protected]
SETTER 12.04.2012 13:59:32
Это спам.
Владимир 20.02.2013 11:20:39
Как сделать что бы можно было не только текст отсылать в форме, но и картинки , т.е. что бы полную страничку с бекграундом кнопками и так далее одним словом свёрстаную страницу?
Kostya 12.11.2013 21:43:44
А мне выдаёт такую ошибку : Отправкой сообщений можно пользоваться только на сайте example.ru
SETTER 13.11.2013 11:33:47
Это не ошибка, так и должно быть, уберите сверху вот эту часть кода session_start(); if($_POST['session_id'] != session_id() ) { exit("Отправкой сообщений можно пользоваться только на сайте ".$_SERVER['HTTP_HOST']."."); } else { И в самом конце закрывающую скобку удалите и можно пробовать.
Вадим 23.11.2013 19:30:11
Здравствуйте, у меня Worldpress, все сделал по инструкции, но когда нажимаю на кнопку отправить, выдает:Извините, но запрошенную вами страницу найти не удалось. Попробуйте найти её с помощью поиска.
  • Яндекс.Метрика Здесь находится аттестат нашего WM идентификатора 185571665285
  • "LPHPRU" © 2009-2021