Форма обратной связи для сайта WordPress без плагинов

Доброго здоровья всем читателям блога! Сегодня сделаем очередной шаг к оптимизации проекта, установив форму обратной связи для WordPress сайта или блога. Причем устанавливать будем, не прибегая к помощи плагинов, а используя средства HTML и PHP.

Вообще, плагины серьезно нагружают сервер, поэтому необходимо, как только возможно доступными средствами, уменьшать эту нагрузку. Например, я недавно с помощью администрирования баз данных MySql посредством phpMyadmin произвел очередную оптимизацию этих баз данных, существенно снизив их объем.

Поэтому замена плагинов HTML и PHP кодом также положительно влияет на решение данной задачи. Конечно, совсем без плагинов обойтись невозможно, но нужно стремиться к уменьшению их числа. Именно, одна из таких возможностей реализуется сегодня на ваших глазах, когда мы установим форму обратной связи WordPress. Хочу отметить, что данную форму обратной связи можно установить именно на тех страницах, где она нужна, например, на странице “Контакты”.

Создание формы обратной связи

Для того, чтобы сконструировать форму обратной связи на блоге Вордпресс, первым шагом необходимо создать файл, который будет содержать соответсвующий код. Назовем файл, к примеру, mail.php и поместим его в папку с названием вашей темы. Для этого соединимся с серверов хостинга посредством протокола FTP, используя ФТП клиент либо замечательный редактор notepad++.

После удачного соединения в правом окне редактора notepad++ будет список всех папок (директорий) и файлов вашего сайта. Выбирайте паку с вашей темой. Обычно она находится по адресу:

public_html/ваш_сайт/wp-content/themes/название_вашей_темы/

Подводите курсор к папке с названием вашей темы, кликаете по ней правой кнопкой мышки и из выпадающего меню выбираете «Create new file».

После этого появится маленькое диалоговое окно «Please enter the name of the new file», куда надо ввести название файла (например, mail.php). Эти действия позволят создать файл прямо на сервере. Теперь выберите этот файл и нажмите зеленую стрелочку, направленную вниз, с выпадающим текстом «Download file», после чего созданный файл будет загружен на компьютер и готов к редактированию. Окно для редактирования слева, введите туда следующий код:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php
if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}
if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}}
if (isset($_POST['sub'])) {$sub = $_POST['sub']; if ($sub == '') {unset($sub);}}
if (isset($_POST['body'])) {$body = $_POST['body']; if ($body == '') {unset($body);}}
 
if (isset($name) && isset($email) && isset($sub) && isset($body)){
 
$address = "goldbusinessnet@gmail.com";
$mes = "Имя: $name \nE-mail: $email \nТема: $sub \nТекст: $body";
$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");
if ($send == 'true')
{echo "Сообщение отправлено, теперь Вы можете перейти на главную страницу и продолжить чтение <a href='http://goldbusinessnet.com/'>Goldbusinessnet.com</a>";}
else {echo "Ошибка, сообщение не отправлено!";}
 
}
else
{
echo "Вы заполнили не все поля, необходимо вернуться назад!";
}
?>

Внимание! Прежде, чем копировать, необходимо изменить следующие строчки:

10 - $address= “сюда вписываете свой адрес электронной почты, на который вам будут приходить сообщения от читателей ” (обязательно),
строчки 14, 15 и 20 можете изменить по желанию, то есть ввести свой текст, который будет отображаться.

Небольшое дополнение. Если хотите, чтобы после отправки сообщения осуществлялось автоматическое перенаправление на главную (или на любую другую) страницу блога, в созданном файле mail.php верхнюю строчку нужно заменить на следующую:

<meta http-equiv='refresh' content='6; url=http://goldbusinessnet.com/'>
<meta charset="UTF-8" />

Здесь цифра 6 означает время в секундах, по истечении которого произойдет редирект на главную страницу. Естественно, вы можете изменить это число на свое. Кроме того, не забудьте вместо названия моего блога поставить адрес своего ресурса, причем не обязательно URL главной страницы.

Теперь сохраняете файл обязательно в кодировке UTF-8 (без ВОМ) в редакторе notepad++ и загружаете его на хостинг, используя зеленую стрелку «Upload file», теперь уже направленную вверх. Все, новоиспеченный файл mail.php теперь находится на хостинге, причем, поскольку он помещен в папку с названием вашей темы, то может теперь редактироваться прямо из админ панели «Внешний вид»→«Редактор»→«Редактировать темы».

Для того, чтобы форма обратной связи начала работу, необходимо вставить следующий код на любую страницу (можно создать отдельную страницу «Контакты», как у меня)  в визуальном редакторе админ панели WordPress:

<h2>Форма обратной связи</h2>
<form name="MyForm" action="/wp-content/themes/cloudy/mail.php" method="post">
<p><input class="input" name="name" type="text" style="width:25%" /> Ваше имя</p>
 
<p><input class="input" name="email" type="text" style="width:25%" /> Электронная почта</p>
 
<p><input class="input" name="sub" type="text" style="width:25%" /> Тема сообщения</p>
 
<p>Текст сообщения:<br /><textarea name="body" cols="1" rows="5" style="width:76%" /></textarea></p>
<p><input value="Отправить" type="submit" /></p>
</form>

Здесь тоже надо внести кое-какие изменения. Во второй строчке вместо cloudy необходимо вписать название своей темы. Также можете отредактировать некоторые значения длины и ширины полей, а также текстового поля с помощью параметров свойства width. Теперь после сохранения форма обратной связи для блога WordPress будет выглядеть следующим образом:

После всех вышеописанных действий можно протестировать работу установленной формы. Введите адрес электронной почты и какой-нибудь текст. Если все в порядке, то вы получите на почту это сообщение. Такой вот формой обратной связи я и пользуюсь. Надеюсь, изложил понятно и доходчиво и теперь молодые вебмастера смогут эффективно использовать мой опыт. А какой формой обратной связи пользуетесь вы? Призываю делиться своим опытом в комментариях, а также не забывайте подписываться на новостную ленту, чтобы быть в курсе последних событий.

P.S. Уважаемые читатели, обращаю внимание на то, что текст статьи обновлен и устранены некоторые погрешности в коде, которые были допущены. Теперь форма обратной связи работает безупречно.

Еще статьи по данной теме:
Самые интересные публикации из рубрики: Создание сайтов

167 отзывов

  1. David

    Спасибо, давно искал простую и не замороченную в установке форму обратной связи без плагина.
    Но у меня не получается настроить что-то. Всё сделал, как Вы подробно написали. Но при отправке сообщения через форму, возникает кусок кода mail.php

    Пожалуйста, перейдите по этой ссылке http://english-da.ru/kontakty и попробуйте отправить сообщение через форму, может Вы сможете понять, где я сделал ошибку.

    Заранее благодарю 🙂

    1. Игорь

      Давид, отправил сообщение через форму обратной связи. Попробую решить Вашу проблему, но это займет определенное время.

    2. Игорь

      Давид, бог ты мой! Тысяча извинений. Ошибка не Ваша, а моя. Небольшой, но решающий косяк я обнаружил в коде. Видимо, это результат редактирования статей, которое я осуществил недавно. Сейчас все исправил, поэтому сделайте вот что. Откройте созданный для формы обратной связи файл (я не знаю, как он у Вас называется, тот, который у меня mail.php), скопируйте снова первый код в статье и вставьте вместо старого, все должно заработать корректно. Еще раз извините.

      1. David

        Спасибо большое за помощь.
        Всё теперь работает корректно. Спасибо ещё раз. 🙂

        1. Игорь

          Не за что, Давид, тем более это моя недоработка. 🙂

  2. Nurlan

    Уважаемый Игорь, спасибо за статью. Поставил форму, но при получении на свой емайл письма в первой половинке адреса получателя, т.е. моего перед "собачкой" (@) непонятная абра-кадабра.

    1. Игорь

      Уважаемый Nurlan! Обычно абракадабра появляется при нарушении кодировки. Попробуйте еще раз скопировать код файла шаблона, который с расширением .php и сохраните его в кодировке UTF-8 (без ВОМ). Обязательно без ВОМ!

  3. Валерий

    У меня неработает Ваша форма обратной связи. Ошибка 404 не найдена...Все сделал как напмсано, слово в слово.

    1. Игорь

      Значит, не все, раз не работает. Проверьте внимательно, правильно ли Вы скопировали коды.

    2. Валерий

      Согласен с теской, выдает ошибку 404, а сейчас и 502. Может тема нестандарт

      1. Игорь

        Валерий, все может быть. Однако ошибка 404 означает, что страницы с таким URL не существует. Значит, Вы ее либо не опубликовали, либо удалили, третьего не дано. И содержание страницы (в данном случае форма комментариев) здесь совершенно не при чем.

        1. Федор

          ... Либо путь неправильно прописан!

      2. Валерий

        Все скопировано и прописано правильно, единственная думаю проблема что сам сайт в дополнительной папке, хотя прописывал и полный путь не помогло

    3. Spider Agent

      Надо обновить правила реврайта, товарищи! Либо flush_rewrite_rules(); на один раз подставить, либо тупо зайти в админку и сменить ЧПУ, потом вернуть обратно.

  4. Zack

    Здравствуйте!

    Установил форму, все работает. Только один нюанс: при правильном вводе данных в форму идет правильная обработка, а при неправильных (например, не указал e-mail) все равно пишет, что сообщение отправлено, хотя на самом деле ничего не отправляется.
    В чем может быть проблема?

    1. Игорь

      Zack, возможно, Вы неправильно скопировали код, проверьте.

  5. Zack

    Перепроверил. Скопировано верно.
    Просто там получается, что если из одного поля убрать данные, то при нажатии на отправку, надпись возвращается и система всегда пишет, что отправлено.
    Т.е. фактически автоматом в пустую ячейку вставляется стандартный текст.

    1. Игорь

      Zack, весьма странно, что у Вас возникли такие сложности. Если код скопирован верно, никаких проблем быть не должно. А у Вас случайно не установлен похожий плагин? Может, Вы забыли его деактивировать? Если нет, то попробуем разобраться. Пришлите мне через страницу Контакты ссылку на Вашу страницу с формой.

      1. Федор

        Игорь, проблема в том, что если в какое-либо из полей пользователь ничего своего не ввел, а перешел к следующему полю, то в первое поле возвращается значение установленное поумолчанию благодаря вот этому коду: onblur="if(this.value=='')this.value=this.defaultValue;".
        В результате все поля получаются заполненными и сообщение отправляется.
        Я немного поэксперементировал и этот код убрал. Теперь поле остается пустым и выдается сообщение об ошибке заполнения формы.

        За код и форму большое спасибо!

        1. Игорь

          Федор, огромное спасибо за конструктивное дополнение, думаю читателям будет интересно. Однако, у меня к Вам большая просьба. Не могли ли Вы повторить предыдущее сообщение, адресованное Дмитрию, по идиотской случайности я его удалил без возможности восстановления. Заранее благодарю.

          1. Федор

            Код я повторил, но тег code срабатывает некорректно и съедает его. Попробую продублировать через форму обратной связи.

  6. Zack

    Игорь, Вы получили страницу через Контакты?)

    1. Игорь

      Да, Zack, простите за задержку. Только сейчас немного освободился. Редко такое бывает, когда все сваливается в одну кучу, в том числе целая кипа писем, которая пришла. Прямо сейчас начинаю заниматься Вашей проблемой.

    2. Игорь

      Zack, что-то я не обнаружил в Вашей форме обратной связи такой проблемы, которую Вы описывали. Отправил тестовое сообщение и не указал e-mail. Получил адекватную реакцию в виде предупреждения, что необходимо заполнить все поля.

    3. Игорь

      Простите, Zack, по моему, я заработался, проверил другую Вашу форму. А по поводу той, о которой Вы писали, действительно, глючит. А скажите мне, пожалуйста, дошло ли действительно мое тестовое сообщение. Если дошло, то что указано там, где должен быть e-mail отправителя, то есть в начале сообщения?

  7. Zack

    Проверил. Тестовое сообщение не приходило.

    1. Игорь

      Значит, форма работает корректно. Хорошо, осталось выяснить, почему отображается извещение, что сообщение отправлено.

      1. Zack

        Да. Сам принцип правильный и при верном вводе всё идет нормально. А вот почему при ошибочном выдается некорректное сообщение - это вопрос 🙂
        Проверял синтаксис, вроде бы всё без ошибок.

  8. Вячеслав

    Здравствуйте все сделал все работает, но письмо приходит без заголовка , просто пустота в списке псием...
    Подскажите что куда вставить чтобі в теме письма отображались имя и тема например ?

  9. Вячеслав

    о и забыл, что дописать чтобы после того как высветилось что письмо отправилось, вернулось обратно на сайт

    1. Игорь

      Вячеслав, немного не понял. Вы проверяли работоспособность формы, отправляя сообщение со своего сайта к себе же на e-mail? Даже в этом случае все должно работать, если Вы правильно скопировали код. А Вы заполняли графы Тема и Имя?

      1. Вячеслав

        Да, проверял, я добавил еще несколько полей нужных мне и все, письмо приходит без темы письма, но все содержимое формы доходит

        1. Игорь

          Вячеслав, а каким образом Вы добавили поля? Может дело в этом?

  10. Вячеслав

    Давайте я код лучше выложу )

    вот сам скрипт отправки

    <?php
    if (isset($_POST['body'])) {$body = $_POST['body'];}
    if (isset($_POST['city'])) {$city = $_POST['city'];}
    if (isset($_POST['newpost'])) {$newpost = $_POST['newpost'];}
    if (isset($_POST['from'])) {$from = $_POST['from'];}
    if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    if (isset($_POST['model'])) {$model = $_POST['model'];}
    if (isset($_POST['qo'])) {$qo = $_POST['qo'];}
    if (isset($_POST['comm'])) {$comm = $_POST['comm'];}
     
    $address = "order@2d5d.com.ua";
    
    $mes = "Имя: $body \nГород: $city \nНовая почта: $newpost \nТел: $phone \nE-mail: $from \nМодель: $model; \nКоличество: $qo \nТекст: $comm";
    $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = windows-1251\r\nFrom:$from");
    if ($send == 'true')
    {
    echo "Заказ принят !";
    }
    else
    {
    echo "Сообщение не отправлено, проверьте правильность заполнения полей и попробуйте снова";
    }
    ?>
    1. Игорь

      Вячеслав, этот код несколько сложнее, чем тот, что дан в статье. Видите ли, я не гуру языка php, хотя некоторые простые вещи могу объяснить. Вот например, я вижу, что у вас указана кодировка windows-1251 в строке:

      $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = windows-1251\r\nFrom:$from");

      попробуйте заменить ее на UTF-8 и в блокноте notepad++ сохранить весь документ в кодировке UTF-8 без BOM. Хотя дело навряд ли в этом, но попробуйте...

  11. Катерина

    Пост очень толковый, спасибо. Но возникла маленькая проблемка, буду благодарна за помощь. Форма прекрасно установилась, но при попытке отправить сообщение - выдает вот что
    Warning: mail() has been disabled for security reasons... и дальше идет ссылка на mail.php
    Что посоветуете?

    1. Игорь

      Катерина, это предупреждение о том, что данный e-mail блокируется из соображений безопасности. Видимо, Вы используете какой-то нетрадиционный почтовый сервер. Попробуйте ввести адрес другого почтового ящика (желательно gmail, если у Вас нет, то зарегистрируйтесь и будете иметь доступ ко всем сервисам Google, это очень выгодно).

  12. Катерина

    Спасибо, за подсказку. Все устранила. Форма работает. Решила сделать для сайта новый почтовик на гугле. Сделала. В админке сайта изменила старый адрес на новый. Но сообщения все равно идут на старый ящик. На новый нет. Что такое, не пойму?

    1. Игорь

      Катерина, Вы прописали новый адрес электронной почты в админке Вордпресс в разделе «Параметры»→«Общие»? Далее, немного не понял. Вы говорите, что сообщения идут на старый адрес. Это при использовании формы обратной связи? Но у Вас же блокировался старый e-mail. С другой стороны, утверждаете, что форма работает. Поясните, пожалуйста.

  13. Катерина

    Да, в админке прописала новый адрес. Сообщения с помощью формы отправляются прекрасно, но почему то приходят они на старый почтовик, а не тот, что прописан в админке. Вот в чем дело..

    1. Игорь

      Катерина, а у Вас последняя версия WordPress? Если он не обновлен, дело, возможно, в этом.

  14. Дмитрий

    Доброго дня

    На базе Вашего шаблона сделал себе форму. Подскажите пожалуйста как сделать вызов url или вернуться автом атом обратно через несклько секунд после отображения сообщения?

    1. Игорь

      Дмитрий, Вы имеете ввиду, автоматический возврат на ресурс после отправки сообщения?

      1. Дмитрий

        В принципе уже все решил - на других форумах поискал - получилось хорошо

    2. Федор

      Извините, забыл тег вставить.
      1.

    3. Федор

      В ваш файл имя.php вставьте такой код:
      1.

      &lt;meta http-equiv='refresh' content='3; url=Адрес нужной страницы'&gt;
      &lt;meta charset=&quot;UTF-8&quot; /&gt;
      

      2.

      if ($send == 'true')
      {echo &quot;Сообщение отправлено, через 3 секунды Вы будете направлены на главную 
      страницу, где сможете продолжить чтение &lt;a href='Адрес нужной страницы' 
      rel=&quot;nofollow&quot;&gt;Блога ******&lt;/a&gt;&quot;;}

      Этот код позволяет вернуться после отправки сообщения на нужную Вам страницу.

  15. Олеся

    Хороший блог у Вас, смотрю и наслаждаюсь.

  16. Евгения

    Здравствуйте! Помогите пожалуйста! Текст как у вас один в один, но все равно если я хоть какое то поле оставила не заполненным или вообще никакое не заполняла, пишет что сообщение отправлено и на почту мне приходит письмо с пустыми полями!

    1. Игорь

      Да, Евгения, здесь есть в коде недоработка, в ближайшее время исправлю.

  17. Олеся

    Игорь здравствуйте, хотелось бы исправлений в не доработке вашего простенького кода. Заранее спасибо.

    1. Игорь

      Вы абсолютно правы, Олеся, спасибо за напоминание. Код доработан и исправлен, можете пользоваться.

      1. Олеся

        Спасибо Вам огромное, сейчас проверю.

  18. Александр

    Все сделал как написано!
    После нажатия кнопки "Отправить" выскакивает "Ошибка 404" !

    В адресной строке пишет след. адресс "http://street-workout.kr.ua/wp-content/themes/cloudy/mail.php"

    Хотя файл mail.php у меня лежит по след. адрессу "http://street-workout.kr.ua/wp-content/themes/ЫрщцЕшьу/mail.php"

    Что делать?

  19. Александр

    Все сделал как написано!
    После нажатия кнопки «Отправить» выскакивает «Ошибка 404″ !

    В адресной строке пишет след. адресс «http://street-workout.kr.ua/wp-content/themes/cloudy/mail.php»

    Хотя файл mail.php у меня лежит по след. адрессу «http://street-workout.kr.ua/wp-content/themes/ShowTime/mail.php»

    Что делать?

  20. Александр

    Все предыдущую проблему устранил, теперь когда нажимаю отправить, выдает следущее:

    Parse error: syntax error, unexpected T_IF in /var/www/cdstree8968/data/www/street-workout.kr.ua/wp-content/themes/ShowTime/mail.php on line 8

    Что делать?

    1. Игорь

      Александр, у Вас ошибка в синтаксисе URL: www у Вас отделена слэшем:
      www/street-workout.kr.ua/
      Правильный синтаксис URL либо такой:

      _www.street-workout.kr.ua

      Либо такой:

      street-workout.kr.ua

      Думаю, ошибка в этом. Проверьте путь до шаблона темы.

  21. Женя

    Здравствуйте! У меня такая проблема: абракадабрами сообщает что сообщение доставлено и тп., файл mail.php сохранен в utf-8 без BOM, вставляю на обычную страницу контактов, правда тестирую на локалке. В чем еще может быть проблема?

    1. Женя

      Странно...решил проблему сохранив в кодировке UTF-8 хотя все файлы сайта в кодировке UTF-8 без BOM...

      1. Игорь

        Да, это действительно необычно. Если проблема решена, значит, все в порядке, хотя какая-нибудь бяка вследствие этого может вылезти в другом месте. Не знаю, что и посоветовать в этом случае. Возможно, причина в локальном сервере. Может, теперь попробовать сохранить без ВОМ?

      2. Катерина

        Евгений, не знаю актуален ли вопрос с абракадаброй, возможно совет пригодится другим .. На своем сервере в хостинг панели в настройках сервера нужно выставить необходимую кодировку. Она вероятно сбилась.. Такое бывает.
        Автору поста, спасибо!

  22. Женя

    Пробовал, но проблема осталась. Ладно, буду смотреть, как оно будет на реальном серваке! Я думаю из-за одного файла, сохраненного не в том формате и не связанного с системными файлами проблем не должно быть. Хотя кто его знает! буду иметь ввиду..

  23. Иван

    Скажите, как к этой форме добавить прикрепляемый файл ( для того чтобы например отправили коммерческое предложение в ворде иле экселе)

    1. Игорь

      Иван, к сожалению данный вариант формы комментариев не предусматривает возможности прикрепления файлов. Попробуйте воспользоваться плагином Contact Form 7, по-моему он хорошо адаптирован к Вордпресс, хотя я им не пользовался.

  24. Елизавета

    Игорь, здравствуйте! Помогите новичку!
    Форма в установленной мной на WordPress теме не просто не работает при нажатии на кнопку "отправить", а вобще ничего не происходит! Все сделала по вашему шаблону, но все равно не срабатывает. Я сижу уже пятый день с этой проблемой, но из-за нехватки знаний не могу понять, в чем ошибка?

    Вот сама форма:

    * We really hate spam. Your email is safe with us, pinky promise.

    Вот файл обработчик:

    < ?php if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}} if (isset($name) && isset($email) && isset($sub) && isset($body)){ $address = "test@test.ru"; $mes = "E-mail: $email"; $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email"); if ($send == 'true') {echo "Сообщение отправлено, теперь Вы можете перейти на главную страницу и продолжить чтение ";} else {echo "Ошибка, сообщение не отправлено!";} } else { echo "Вы заполнили не все поля, необходимо вернуться назад!"; } ?>

    Сейчас все файлы на локальном сервере(Денвер). Насколько мне известно, пока все отправленные письма должны появляться в папке: Z:\tmp\!sendmail. Но все безрезультатно.
    Путь к файлу c формой такой: Z:\home\localhost\www\NYP\wp-content\themes\nyp\index.php
    Путь к файлу-обработчику такой же: Z:\home\localhost\www\NYP\wp-content\themes\nyp\mail.php

    Возможно action не правильно прописан?
    Помогите, ПОЖАЛУЙСТА!

    1. Игорь

      Елизавета, а у Вас e-mail правильно прописан? (test@test.ru)

  25. Елизавета

    Игорь, здравствуйте! Помогите новичку!
    Форма в установленной мной на WordPress теме не просто не работает при нажатии на кнопку «отправить», а вобще ничего не происходит! Все сделала по вашему шаблону, но все равно не срабатывает. Я сижу уже пятый день с этой проблемой, но из-за нехватки знаний не могу понять, в чем ошибка?

    Вот сама форма:

    * We really hate spam. Your email is safe with us, pinky promise.

    Вот файл обработчик:

    Сейчас все файлы на локальном сервере(Денвер). Насколько мне известно, пока все отправленные письма должны появляться в папке: Z:\tmp\!sendmail. Но все безрезультатно.
    Путь к файлу c формой такой: Z:\home\localhost\www\NYP\wp-content\themes\nyp\index.php
    Путь к файлу-обработчику такой же: Z:\home\localhost\www\NYP\wp-content\themes\nyp\mail.php

    Возможно action не правильно прописан?
    Помогите, ПОЖАЛУЙСТА!

  26. Pasagir

    Благодарю! Все с первого раза получилось!
    Очень грамотная статья!

  27. Оксана

    Добрый день. Подскажите мне пожалуйста. Уже которую форму обратной связи пробую поставить, но проблема в том, что вообще не могу ввести в нее данные. Думаю, это проблема с самим сайтом и его настройками. Подскажите пожалуйста, какие правки мне надо ввести. Заранее всем спасибо.

    1. Игорь

      Оксана, вполне возможно, что Ваша тема ввиду ее некорректно написанного кода не дружит с предложенным мной вариантом, тут ничего не поделаешь. А что-то конкретное подсказать очень сложно, не имея под рукой Ваших шаблонов.

  28. balkhash

    Спасибо.
    Установил на свой сайт в сайдбар. При не коректном заполнении полей или после отправки сообщения выходили крякозябры. Файл был сохранён в utf-8 без бом, сменил кодировку на ANSI. Отображение стало читабельным. Зато письма приходят не совсем правильные - "имя", "тема", "текст" отображаются кракозябрами. Само сообщение читается.

    1. Игорь

      Попробуйте сохранить просто в UTF-8.

      1. balkhash

        Благодарю.
        Код работает хорошо.

  29. Leto

    Спасибо за статью! Но помогите, пожалуйста! Мне необходимо создать форму, состоящую из строки с вводом почты отправителя и само сообщение и все, т.е. без строк с именем и темой.
    Создала файл contact.php:

    а в файл, где должна находиться форма, вставила это:

    В итоге сообщения отправляются, даже если не написан емейл (но тут дело вроде как в onBlur, выше прочитала).
    Но на почту приходит полная ерунда, содержание письма "Content-type:text/plain; charset = UTF-8" и от кого. А самого текста сообщения нет.
    Помогите пожалуйста, может я неверно сократила код пхп?
    p.s. адреса в сообщении указаны условно

    1. Игорь

      Leto, напишите мне на e-mail то же сообщение, поскольку код не отобразился, либо повторите в комментариях, но вставьте его между

      [php]код

      [/php]

      Стопроцентной помощи не обещаю, поскольку владею данной темой на среднем уровне.

  30. Leto

    Спасибо за статью! Но помогите, пожалуйста! Мне необходимо создать форму, состоящую из строки с вводом почты отправителя и само сообщение и все, т.е. без строк с именем и темой.
    Создала файл contact.php:


    а в файл, где должна находиться форма, вставила это:


    В итоге сообщения отправляются, даже если не написан емейл (но тут дело вроде как в onBlur, выше прочитала).
    Но на почту приходит полная ерунда, содержание письма «Content-type:text/plain; charset = UTF-8″ и от кого. А самого текста сообщения нет.
    Помогите пожалуйста, может я неверно сократила код пхп?
    p.s. адреса в сообщении указаны условно

  31. Leto

    разобралась) поспешила с вопросом) спасибо еще раз за статью!

  32. артем

    спасибо большое! очень понятно и просто объяснили... все отлично установилось! форма работает на ура. удачи!

  33. Велимудр

    Доброй ночи Игорёк.
    Давно не посещал блог твой ))
    Благодарю за тему хорошую.
    Но у меня всё ни как у людей =)

    1. Игорь

      Ну, это потому, что ты неординарная личность, а без таких жизнь кажется нудной и однообразной. 🙂

      1. Велимудр

        Все мы славяне ))
        Я тут очередной модуль пытаюсь сломить )))
        меня больше всего нервирует то, как разработчики лихо разбрасывают элементы тегов по всем файлам. Я понимаю - свой код, ревность к тому, как другие будут править его код... но послушайте, если вы не хотите этого, тогда зачем вы вообще разработчиками стали? что за идиотизм? это уже НЕ стиль написания кода, это маразм, это паранойя, это мания ёлки-палки.
        Я вот собрался писать собственную цмс-ку ))
        но не хочу грязь всю ту месить, которой полно во всех известных CMS-ках.

  34. Анжелика

    Спасибо за ценную информацию, как раз думала ставить на сайт форму связи с плагином. А здесь такой подарок!!!
    Все сделала по инструкции в статье, форма связи работает отлично.
    Спасибо огромное!!!

  35. Велимудр

    Доброе утро друг.
    Немного дёгтя, как говорят, в бочку мёда...
    Форма вообще не работает, кодировка ни windows-1251 ни utf-8 не дают нормальный текст, складывается впечатление, будто очередной релиз ДЕНВЕР-а ещё хуже сделан чем все пред идущие версии.
    Связку делать из всего набора самому нет желания, уж слишком тяжёлая эта работа.
    Года два-три назад всё на том же денвере работало отлично. У меня статический IP, и настройку денвера на глобальную сеть с использованием базы данных я настраивал (прописывал, корректировал строки конфигов) "вслепую".
    Тут уж ничего не поделать, если денвер ВНАТУРЕ дебилом стал (я читал его новый разработчик начал разрабатывать), тогда вообще лучше забыть о нём и либо связку, либо ставить типа Nginx.
    Если же кто то знает такую проблему из читавших, и знает решение, пусть напишет )

    1. Игорь

      Честно говоря, я никогда не использовал Денвер, а сразу стал работать вживую. Теперь даже не знаю, что своим читателям посоветовать в этом плане.

      1. Велимудр

        прям таки не знаешь?))
        Подумай )) отличная тема для новой и очень полезной статьи-продолжения.
        Поищи что-то по смыслу "форма обратной связи на Денвер", да попробуй сам разобраться, надо копать в конфиге (расширение .conf), или файл php.ini
        Знаешь как удобно на своей машине работать, ОСОБЕННО превосходно, если ip статический, можно создав каталог с именем ip адреса и с подкаталогом WWW засвечивать в интернете сайты и демонстрировать заказчикам работы.

        1. Игорь

          Тимур, к сожалению, в сутках только 24 часа... 🙂

  36. Саша

    Здравствуйте! Спасибо за статью. Вот у меня вопрос. А как убрать поле "Тема"? Заранее спасибо.

  37. Михаил

    Игорь, спасибо огромное за статью.
    Начал делать блог, с возникающими вопросами разбираюсь по ходу дела, хотя до этого про html и css ничего не знал. Но по мере необходимости гугл в помощь и вперед )))
    Ваша форма обратной связи - то что надо! чтобы не перегружать движок лишними плагинами, плюс мануал более чем понятный.
    все установил, все кастомизировал, все работает без проблем .
    В общем еще раз спасибо!

  38. Руслан

    Добрый день, Игорь
    Подскажите форму поставил все по инструкции, вижу в редакторе mail.php
    Сохранено в UTF 8 без BOM, но когда отправляю с сайта на свою почту пишет
    Ошибка, сообщение не отправлено!
    Менял почты и на mail.ru и gmail.com, у Контакт форм (плагина тоже самое)
    кстати делал 5 сайтов на wordpress не смог не на одном реализовать эту форму обратной связи, Пользуюсь сторонним сервисом обратной связи но хотелось бы иметь свою. Что вы можете посоветовать ?

    1. Игорь

      Руслан, а если попробовать какой-нибудь альтернативный плагин? Например, Fast Secure Contact Form. Правда, я его не тестировал, но вроде бы он регулярно обновляется, последний раз не далее как в декабре 13 года.

    2. Велимудр

      Доброе утро/день.
      Вы решите вопрос в чём проблема:
      1 - ваша форма отправляет сообщения в виде не читаемых символов/иероглифов.
      2 - ваша форма НЕ отправляет сообщения.
      В первом варианте проблему решать надо через файл .htaccess:
      в файле (если есть, если нет, создать файл НЕ имеющий имени - только точка-расширение), вписать строку:

      AddDefaultCharset UTF-8

      Для других кодировок соответственную указать.
      Во-втором варианте кодировка никакого отношения не имеет.
      В вашем случае связи между кодировкой и ошибкой нет.
      Решается она просто - у вас проблема в ИМЕНАХ, указанных в качестве якорей в полях формы для скрипта-обработчика, он принимает данные не все, либо принимает не полные, либо не все соответствуют у проверки обязательных/существующих к переменным при отправке либо переменные не соответствуют созданные существующим..... либо отсутствует какая либо переменная - возможно она лишняя.
      ПРОВЕРЯЙТЕ ТОЖДЕСТВЕННОСТЬ имён написанных в HTML форме в атрибутах name="", именам, получаемым методом пост в файле обработчике и их соответствующим переменным.
      Признаюсь Я эту ошибку у себя несколько минут правил.
      Скиньте исходный код вашей формы и код обработчика.
      Если вы ничего не меняли вообще, ошибка может быть только в указании путей иначе обращайтесь к выше написанному пояснению.

      1. Игорь

        Спасибо, Тимур за участие, ты как чувствуешь, что у меня запарка.

      2. Руслан

        спасибо. Надо попробовать.

  39. Илья

    Скажите пожалуйста, таким же доступным языком, а как вывести такую форму при клике на ссылку,но в модальном окне?

  40. FENIX

    Добрый день) Недавно начал работать с движком поэтому сразу прошу прошение за глупые вопросы.
    Хотел сделать обратную связь как в статье но не понял как вывести его в отдельную страницу http://yadi.sk/d/DRE6LHpmMRujn (скрин)
    И подскажите как на данной странице отключить обсуждение.
    Заранее спасибо

    1. Игорь

      Fenix, мне казалось, я все подробно описал.

      1. FENIX

        сори) невнимательность)
        После отправки письма пишет (Ошибка, сообщение не отправлено!) Где подскажите капать?

        1. Игорь

          Fenix, попробуйте ознакомиться с выше стоящими комментариями, там можете найти решение проблемы. Особое внимание уделите сообщениям читателя под ником Велимудр, они обстоятельны и по делу.

  41. Mega

    У меня форма отправляла сообщения в виде "????", тогда я поменял кодировку в коде:

     $send = mail ($address,$sub,$mes,&quot;Content-type:text/plain; charset = windows-1251rnFrom:$email&quot;); 

    . Строку

    &lt;meta charset=&quot;UTF-8&quot; /&gt;

    вообще удалил.

  42. Marishka0801

    здравствуйте! подскажите пожалуйста, хочу добавить новые поля в форму. например поле Номер телефона Номер телефона подскажите, куда еще надо добавить переменную $name кроме мест, обозначенных стрелочками http://pix.am/L25U/ . при отправке письма выдает ошибку, что не все поля заполнены. подозреваю, что проблема в 12 строчке. жду ответа, заранее спасибо!

    1. Игорь

      Решение отправил Вам на e-mail, поскольку сообщение получилось довольно объемным.

  43. STRIKE

    C добрым утром!
    Извините что беспокою, у меня такая проблема что уже больше не хочеться создавать сайты из-за этой чёртовой проблемы неделя как уже сижу за компом. Все плагины и другие формы обратной связи поставил нет толка, сперва отправился потом затух. После всех работ наткнулся на Ваш сайт и установил эту форму. Так форма классная выводиться на сайт но после заполнения и отправки сообщения у меня вот такая ошибка:
    Warning: mail(/home/u560520352/.logs/php_mail.log) [function.mail]: failed to open stream: No such file or directory in /home/u560520352/public_html/wp-content/themes/parasponsive/mail.php on line 12
    И потом сообщения вообще не отправляется хотя почта рабочая.
    Очень прошу Вас помочь по этой ошибке пожалуйста!
    Спасибо!

    1. Игорь Горнов

      Strike, еще раз проверьте все внимательно. Дело в том, что данное сообщение информирует об отсутствии файла. Посмотрите, куда Вы поместили mail.php. Проконтролируйте, прописан ли в коде, который нужно разместить в mail.php, на 10 строке именно Ваш адрес электронной почты. По идее, форма универсальная и должна работать на всех темах Вордпресс. Конечно, могут быть исключения, не без этого. В общем, проверьте все досконально и внимательно еще раз.

  44. Станислав

    Подскажите, у меня при отправке сообщения по обратной связи приходят иероглифы во всех полях, где по русски написано... не могу никак разобраться.. помогите, пожалуйста... это код из формы обратной связи... я полный чайник... попробовал все что вы писали, но так и не смог найти суть... куда именно нужно добавить строку и какую?

    1. Игорь Горнов

      Станислав, иероглифы появляются при нарушении кодировки. Сделайте вот что. Когда создаете файл mail.php (такое название у меня в статье, Вы можете назвать его по-другому), после вставки кода сохраните его в UTF8 (без BOM). Если это действие положительного результата не принесет, попробуйте сохранить его просто в UTF8. Для этих целей используйте редактор с синтаксисом (рекомендую notepad++), ссылка на материал об этой программе дана в статье. Все должно получиться, я уверен.

      1. Станислав

        Игорь, у меня файл и так в формате utf-8 без ВОМ... перекодировка самого файла не помогает... все что было в комментариях выше рекомендовано пробовал - ничего не помогло.... не знаю уже,где копать...

        1. Игорь Горнов

          Станислав, а у Вас сайт уже на хостинге или еще на Денвере? В этом может быть причина.

  45. Юлия

    Здравствуйте, Игорь. Очень хорошая форма. Установила - всё работает. Но возникла небольшая проблема. Мне нужны дополнительные поля "Телефон" и "Адрес", попробовала добавить телефон, но форма слетела(сдвинулись поля). Как их сделать в столбик, как у вас?
    вот часть кода в mail.php
    if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}
    if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}}
    if (isset($_POST['phone'])) {$phone = $_POST['phone']; if ($phone == '') {unset($phone);}}
    if (isset($_POST['sub'])) {$sub = $_POST['sub']; if ($sub == '') {unset($sub);}}
    if (isset($_POST['body'])) {$body = $_POST['body']; if ($body == '') {unset($body);}}

    if (isset($name) && isset($email) && isset($phone) && isset($sub) && isset($body)){

    $address = "remmebel64@mail.ru";
    $mes = "Имя: $name \nE-mail: $email \nТелефон: $phone \nТема: $sub \nТекст: $body";

    а вот код на странице:
    Ваше имя Электронная почта Ваш телефон Тема сообщения Текст сообщения:

    1. Игорь Горнов

      Юлия, честно говоря, навскидку не определить проблему, не зная вводных. Если у Вас ресурс в сети, то пришлите ссылку на страницу с проблемной формой.

    2. Велимудр

      Юлия, вы пробовали после каждого добавляемого поля поставить тег переноса? =)

      Но если вы копировали, input-ы должны быть обёрнуты тегами
      Быть может бы промахнулись... не дописали тег... или переписали =)) в смысле больше, чем надо.
      Сами по себе они не могут так себя вести, проверьте стили все, все теги, стили блока, в котором форма, стили соседних тегов.... чаще проблема возникает там, где её не ждёшь.
      Напишите как они сдвинулись.

    3. Игорь Горнов

      Юлия, отправил инструкции на Ваш e-mail.

  46. Велимудр

    Доброй ночи Игорёк.
    Вновь я в этой теме 🙂
    Не хочешь ли ты дополнить эту форму небольшой правкой на javascript ?
    К примеру написать перехватчик отправки и фоново отправлять данные? можно ведь универсальной сделать её, в action оставить ссылку на файл, по идентификатору же вызывать события до отправки, то есть перехватывать нажатие, проверять на правильность, и так далее. У кого выключен JS, у тех форма сработает на чистом php, у кого включен - ajax-сом отправится.
    Думаю такое дополнение будет только в пользу.

    1. Игорь Горнов

      Да, Тимур, твои дополнения всегда содержательные и в тему. Дело в том, что я потихоньку обновляю материалы, но, как понимаешь, просто физически невозможно сделать это мгновенно. Но твои поправки обязательно приму к сведению.

  47. Велимудр

    Доброе утро Игорь.
    Мне нужна твоя помощь по wordpress-y.
    В контакте напишу.

  48. Руслан

    Игорь, здравствуйте. Пытаюсь воспользоваться вашим кодом, но столкнулся с похожей проблемой как у Руслана выше, только у меня не установлено никаких сторонних сервисов. Текст скопировал точно, файл в нужно кодировке, где надо адрес заменил, но все равно пишет - Ошибка, сообщение не отправлено! Если не все поля заполнить, то выводит - Вы заполнили не все поля, необходимо вернуться назад! Подскажите, пожалуйста, куда копать.

    1. Игорь Горнов

      Здравствуйте, Руслан. Почитайте комментарии выше, в них есть ответы на Ваш вопрос. Особенно уделите внимание сообщениям автора под ником Велимудр. В любом случае, данная форма не панацея, может работать некорректно для некоторых сайтов. В том случае, если не удастся найти решение проблемы, попробуйте воспользоваться плагином.

  49. legal

    Вот как мне сделать так, чтобы проверил - поле не введено, и отправил через 10 секунд посетителя обратно к форме.
    Какой код написать? А то в данном виде, вне зависимости от правильности заполнения полей идёт переадресация на следующую страницу, как будто бы все поля правильно заполнены.
    Пример текущего кода:

     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
      <meta http-equiv="refresh" content="10; url=http://www.1.ru/letsgo.php/"> 
      <title>Feedbackform</title>  
    </head>
    <body>
    <div align="center">
    <table border="0" cellspacing="0" cellpadding="20" width="650">
    <tr>
    <td align="center">
    <p style="color: blue; font-size: 20px;">
       <?php
       /* Здесь проверяется существование переменных */
       if (isset($_POST['name1'])) {$name1 = $_POST['name1'];}
       if (isset($_POST['name2'])) {$name2 = $_POST['name2'];}
       if (isset($_POST['name3'])) {$name3 = $_POST['name3'];}
       if (isset($_POST['email'])) {$email = $_POST['email'];}
       if (isset($_POST['tel'])) {$tel = $_POST['tel'];}
       if (isset($_POST['pravo'])) {$pravo = $_POST['pravo'];}
       if (isset($_POST['body'])) {$body = $_POST['body'];}
    
    /* А эта функция занимается обработкой введённых данных в форме перед отправкой письма на указанный вами email */
       if (empty($name1))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана фамилия!</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxxx.ru/partners/200x300.gif' alt='XXX' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       } 
          if (empty($name2))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указано имя!</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       }
          if (empty($name3))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указано отчество!</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       }
           if (empty($email))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указан e-mail!</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       }
          if (empty($tel))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указан телефон!</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       }
          if (empty($pravo))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана тема вопроса!</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       }
          if (empty($body))
       {
       echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Вы забыли написать комментарий?</b></span></p>";
       echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
       echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       exit;
       }
    /* Сюда впишите свою эл. почту */
       $address = "questions@www.1.ru";
    /* А здесь прописывается текст сообщения, \n - перенос строки */
       $mes = "Фамилия:  $name1 \nИмя:  $name2 \nОтчество:  $name3 \nE-mail: $email \nТелефон для связи: $tel \nВопрос о: $pravo \nКомментарий: $body";
     /* А эта функция как раз занимается отправкой письма на указанный вами email */
       $send = mail ($address,$pravo,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
       
    /* А эта функция занимается выводом сообщения на экран после верного заполнения формы обратной связи и ошибки отправки сообщения */
    
       if ($send == 'true')
       {
       echo $a = "<a href='http://www.1.ru/letsgo'><img src='http://xxx.ru/feedbackmess/image/xxx(500x221).png' border=0 title='Перейти'></a><br>\n<br>\nВаша заявка принята.<br>\nСообщение успешно отправлено.<br><br>\nВы будете перенаправлены на форму оплаты в течении 10 секунд.<br>\n<br>\nЕсли не хотите ждать, а хотите перейти к оплате сразу,<br>\n <a href='http://www.1.ru/letsgo>нажмите на эту ссылку</a>.<br>\n <img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'>";
       }
       else 
       {
    echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости что-то и где-то пошло не совсем так как надо.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
       }
       ?>
       </p>
    </td>
    </tr>
    </table>
    </div>
    </body>
    </html> 

    Я так понимаю, что данный код необходимо удалить и вместо него что-то прописать иное для переадресации через 10 секунд на нужную страницу . Вот как это сделать не знаю. 🙁

    1. Игорь Горнов

      Legal, судя по всему, форма не имеет изъянов. В случае некорректного заполнения полей должно идти перенаправление на страницу с формой, а в случае правильного заполнения - на основную страницу, причем в обоих случаях - через 10 секунд. Даже не знаю, почему форма не работает как надо. Возможно, дело в настройках сервера, иногда так бывает.

  50. Антон

    С первой пробы получилось поставить форму, проверку прошла успешно! Избавился от плагина форм7 и капчи к нему. Единственное чего хотелось бы к этой форме http://series-all.ru/kontakty/ добавить css стилей, вы бы добавили в статью пару простых примеров оформления.

    1. Игорь Горнов

      Хорошо, Антон, прислушаюсь к Вашему пожеланию, но пока не могу обещать, когда я вернусь к редактированию статьи. Для подбора нужных стилей гораздо проще воспользоваться встроенными инструментами разработчика, которыми к данному моменту снабжены все популярные браузеры (Хром, Мазила, IE и Opera). Они являются аналогами знаменитого расширения Firebug, о котором я писал здесь:

      http://goldbusinessnet.com/instrumenty-vebmastera/rasshireniya-dlya-firefox-firebug-gde-skachat-kak-ustanovit/
  51. Сергей

    Как сделать, что бы тема письма всегда была определенной по-умолчанию?
    Поконкретнее: нужно убрать в форме на сайте "Тема сообщения" (это делается без проблем), а письмо на почту приходило с заданной в коде темой.

    1. Игорь Горнов

      Сергей, не думал об этом.

  52. Алевтина

    Спасибо за форму! Все прекрасно работает)

  53. Кирилл

    Приветствую! Все работает))) Двое суток возился с плагинами (ни один не заработал!!!) и тут эта статья!!! Спасибо!!!
    Но, у меня вопрос? Можно ли например вместо тема письма, вставить выпадающий список, а там уже в свою очередь конкретно предложенные темы обращения?

    1. Игорь Горнов

      Кирилл, можно, конечно, но по этому вопросу Вам лучше обратиться узкопрофильному специалисту, который все сделает красиво.

  54. Надежда Юрьевна

    Скажите, пожалуйста, я все делаю а у меня выодит такая ошибка. Что нужно исправить. Спасибо!!!!
    Not Found

    The requested URL /wp-content/themes/Splendio/mail.php was not found on this server.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

    1. Игорь Горнов

      Надежда Юрьевна, такое сообщение означает, что файл mail.php не обнаружен на сервере. Нужно проверить, правильно ли Вы его расположили.

  55. Вячеслав

    ни чего не получается все сделал как надо UTF-8 код в менеджере такой же страница опубликована выдает Ошибка 404. Страница не найдена

    1. Игорь Горнов

      Вячеслав, подавляющее большинство удачно интегрирует данную форму обратной связи, я в том числе. Возможно, дают знать о себе особенности Вашей темы. Подыщите альтернативный вариант, попробуйте для начала поставить плагин.

  56. Ольга

    Добрый день!
    Подскажите, как вставить форму в сайдбар?
    Спасибо!

    1. Игорь Горнов

      Ольга, а стандартный способ не проходит?

      1. Ольга

        Просто хотела, чтобы форма связи отображалась на каждой странице сайта. Впрочем. я подумала уже, что можно просто кнопку с помощью виджета создать, ведущую на страницу с формой.
        Извините, что тему меняю - но у меня вот уже третий вариант формы (был плагин, потом вариант без плагина) и ни с какой не получается отправить сообщение. Точнее, оно уходит, но до почты не доходит. Не подскажете, в чём может быть дело? Спасибо!

  57. Игорь Горнов

    Да, кнопка может стать решением проблемы, по крайней мере, на первое время. Ольга, а Вы уверены, что не доходит? У Вас почта на Gmail? Если нет, попробуйте использовать гмейловскую либо загляните в папку "Спам".

    1. Ольга

      Да, уверена. Почта на яндексе, но гмейл тоже попробовала, не приходит. Попроюу. контакт форм 7, на форуме сказали, что с ним всё всегда приходит) хотя не хотела плагины ставить, мне всего лишь простейшая форма нужна.

  58. Ольга

    Контакт форм 7 выдаёт ошибку. Прям не знаю, что делать.

    1. Игорь Горнов

      Ольга, Даже не знаю, что Вам посоветовать. Попробуйте альтернативный вариант в виде другого плагина или обратитесь на специализированные форумы к знатокам по данному профилю.

      1. Ольга

        Обратилась к поддержке хостинга, ответили, что проблема в нехватке оперативной памяти.

        1. Игорь Горнов

          Ольга, не хватает оперативки на сервисе хостинга для работы формы обратной связи? Не думал, что такое возможно... Странно.

          1. Ольга

            Невозможное возможно) обновила тариф и всё заработало.

          2. Игорь Горнов

            Ну, понятно, я так и думал.

  59. Азат

    Здравствуйте! подскажите пожалуйста! уже ставил и плагин Contact form 7, пишет что письмо отправлено, а у меня на почте не появляется...
    теперь пытался сделать как у Вас, но тоже не вышло, когда нажимаю отправить то появляются вопросы... посмотрите пожалуйста, подскажите уже 2 день вожусь с этим http://geek-mobile.ru/?page_id=185

  60. Азат

    почти получилось!!!!!!! теперь когда в в форме где строка тема: если написано на русском то письмо не доходит, в чем может быть дело? может я вам скину скрин кода?

    1. Игорь Горнов

      Азат, скорее всего, дело в нарушении кодировки. Она должна соответствовать той, что установлена на Вашем сайте.

  61. Николай

    Зачем создавать файл mail.php, если он существует в теме для отправки сообщений от WordPress на комментарии. Тогда нужно просто на страницу "Контакты" вставить код самой таблицы и всё.

    1. Игорь Горнов

      Конечно, Николай, если в Вашей теме он есть, то и хлопот меньше. Но я то публикую материал для всех читателей.

  62. Павел

    Спасибо, форма пригодилась!
    Только строку нужно ставить в самом верху (выше ), иначе в некоторых случаях бывают кракозябры. Браузер должен ясно понимать, в какой кодировке текст на странице. У меня из-за этого даже refresh не срабатывало

  63. Павел

    Спасибо, форма пригодилась!
    Только строку

    <meta charset="UTF-8" />

    нужно ставить в самом верху (выше

    <meta http-equiv='refresh' content='6; url=http://goldbusinessnet.com/'>

    ), иначе в некоторых случаях бывают кракозябры. Браузер должен ясно понимать, в какой кодировке текст на странице. У меня из-за этого даже refresh не срабатывало

  64. Владимир

    установил форму, но при отправке сообщения пишет: "Ошибка, сообщение не отправлено!" В чем может быть проблема?

    1. Игорь Горнов

      Владимир, почитайте выше находящиеся комментарии, здесь уже много раз разбирались похожие проблемы. Возможно, найдете решение.

  65. Ирина

    Спасибо! Отличная формочка! Всё работает! Ура )

  66. Макс

    Прошу прощения. Сделал все, как вы сказали. Уже все перепробовал, но когда нажимаю кнопку "отправить" вылезает следующая страница: "Oops! That page can’t be found.
    It looks like nothing was found at this location. Maybe try one of the links below or a search?"
    Пожалуйста помогите!

    1. Игорь Горнов

      Макс, форма рабочая, проверьте все еще раз.

  67. Татьяна Суркова

    Игорь, вы чудо. Я от души благодарю вас за этот пост, сделала форму обратной связи по вашим рекомендациям, и у меня всё получилось, смотрю и радуюсь. Только одна просьба, если не трудно, загляните ко мне на блог в раздел "страничка обратной связи" и взгляните, как форма там смотрится, не надо ли размеры изменить? Просто я сама незрячая, вот и нужен взгляд со стороны. Ещё раз огромное спасибо за статью, удачи вам и огромного трафика блогу.

    1. Игорь Горнов

      Татьяна, спасибо за отзыв. А форма обратной связи выглядит корректно и вписывается в дизайн.

  68. Mir-On

    Спасибо за статью!

    Ребят, попробуйте сервис от http://pozvonim.com
    Простая установка на любую cms, хорошая поддержка. Не сочтите за рекламу, ссылка не реферальная, просто можно взять и попробовать на тестовый период. А потом уже решить подходит или нет. Цены как у всех, можно пакеты брать, а можно количество клиентов или минут. Лидогенерация очень высокая, а окупаемость быстрая. Может кому пригодиться мой комментарий

  69. Юрий

    Сделал все, как вы написали, форма связи все равно не работает. Выдает следующее: Запрошенную информацию найти не удалось. Возможно, будет полезен поиск по сайту.

    1. Игорь Горнов

      Юрий, такое вполне возможно, тут многое зависит от темы. Попробуйте поискать в сети альтернативный вариант.

  70. Николай

    Спасибо,форма заработала сразу и без проблем.Теперь буду настраивать.Ущё раз СПАСИБО.

  71. артем

    к сожалению, на php-7.0 форма не отправляет письма. не подскажете, как можно адаптировать форму для последней версии php?

    1. Игорь Горнов

      К сожалению, Артем, я пока не занимался этим вопросом. Попробуйте погуглить.

  72. Александр

    Да... Для новичков может и обработчик нормальный, Но..
    Вот это вот зачем?

    <meta charset="UTF-8" />

    Совершенно не к чему. Это нужно указывать в headers. Другая сторона, в форме вообще нет никакой обработки пользовательских данных, пусть даже форма с бд не работает, но это неправильно, Очень неправильно. Вводи что хочешь.
    И вот это

    if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}

    Я так понимаю что это взято у господина Попова. Что за ерунда... Сначала вы создаете переменную а потом ее удаляете, тогда уж вот так

    if (isset($_POST['name']) && $name != '') {$name = $_POST['name'];}

    Плюс нет вообще никакой валидации. Мое мнение таково, прежде чем давать такие формы новичкам, сами разберитесь в ней, что и как должно работать.
    А то новички поскачивают такие горе формы и потом ходят по форумам и жалуются что видители нет защиты от XSS атак - что делать? На сайте появился левый код - где его искать?
    А все почему? Потому что уважаемый господин Попов не удасужился в свое время написать нормальный курс и теперь все кто учился по нему считают себя отличными прогерами. Я против г-на Попова ничего не имею, просто видно юыло что он не научить хочет, а бабла срубить.
    Нужно писать серверный код грамотно и безопасно, а не чтоб лижбы работал.
    Если есть претензии по коменту ко мне, пишите, без проблем отвечу.

    1. Игорь Горнов

      Александр, Вы высказали свою точку зрения, хотя я со многим не согласен касаемо Евгения Попова, по отношению к которому, по-моему, Вы слишком категоричны. Я в свое время тоже пользовался многими его продуктами и не могу сказать, что полученная информация была бесполезной.

      Кстати, данная форма получена не с его уроков, так что здесь Ваши подозрения беспочвенны. Ежели Вы специалист в данной области, то вполне можете предложить свой вариант, я с удовольствием его опубликую со ссылкой на Ваш источник. Спасибо за качественный и предметный комментарий.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Чтобы ввести любой код, вставьте его между [php] и [/php]. Ссылка (URL), помещенная в текст комментария, не будет активной. C целью ее выделения и более удобного копирования можно заключить ее между тегами <pre> и </pre>.