» » » HTML форма обратной связи для сайта +PHP обработчик с защитой от спама

HTML форма обратной связи для сайта +PHP обработчик с защитой от спама

Сегодня будем работать над созданием красивой HTML формы обратной связи для сайта, работающей на PHP и имеющею встроенную защиту от спама. Никаких особых знаний вам не потребуется, достаточно будет основ html и элементарной логики. Я дам готовые файлы, которые вы сможете вставить на сайт без изменений или скорректировать под свои нужды.

html форма обратной связи


Содержание:

  1. Принцип работы формы обратной связи на html
  2. Создание макета
  3. Оформление CSS стилями
  4. PHP скрипт формы обратной связи с защитой от спама
  5. Вставка формы на страницу сайта
  6. Активный анти спам с вводом данных в поле
  7. Частые проблемы и их решение

Недавно я делал статью о том, как сделать форму обратной связи для wordpress с помощью плагина Contact Form 7. Также просто можно сделать форму обратной связи на Joomla и других популярных CMS.

Но, что делать сайтам, которые не используют популярные CMS? – Остается делать все руками.

Кроме того, использование обратной связи без плагинов возможно и для WordPress. Лишние плагины создают немалую нагрузку на сервера и отказ от них позволяет ускорить работу сайта.

Заказать установку и настройку готовой формы за 500 рублей можно здесь (это для тех кому лень руками поработать или навыка недостаточно).

Принцип работы формы обратной связи на html

Наша форма будет иметь 5 полей для ввода данных – имя, электронный адрес, телефон, адрес сайта, текст сообщения (вы сможете удалить или изменить их самостоятельно).

Все поля, кроме адреса веб сайта будут обязательны для заполнения (это вы тоже сможете настроить самостоятельно).

Для полей с email адресом и сайтом будет проводиться обязательная проверка правильности ввода данных.

Конечная форма связи будет иметь вот такой вид:

форма обратной связи для сайта

Для работы контактной формы, созданной на html, требуется 3 элемента.

Первый отвечает за структуру самой формы, за тип и количество полей ввода данных. Это обычный html код.

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

Третий отвечает за внешний вид. Устанавливает размеры и расположение полей ввода данных, добавляет различные цвета и эффекты. Это все задается CSS стилями.

Демо версия формы

Настройку каждого из этих элементов мы с вами разберем по шагам.

Создание HTML макета

Чтобы не делать статью слишком длинной и не добавлять отдельно каждый элемент, я приведу полный html код, а ниже опишу каждый блок и возможные изменения.

Для обозначения форм в html используется тег <form></form>, внутри которого заполняются необходимые параметры.

<form class="contact_form" action="contact-form.php" method="post">
	<p>
            <label for="name">Имя:</label>
            <input type="text"  name="name" placeholder="Введите ваше имя" required />
        </p>
        <p>
            <label for="email">Email:</label>
            <input type="email" name="email" placeholder="Введите электронный адрес" required />
            <span class="form_hint">Правильный формат "[email protected]"</span>
        </p>
        <p>
            <label for="tel">Телефон:</label>
            <input type="tel" name="tel" placeholder="Введите номер телефона" required />
            <span class="form_hint">Правильный формат "+7-123-4567890"</span>
        </p>
        <p>
            <label for="website">Сайт:</label>
            <input type="url" name="website" placeholder="Введите адрес вашего сайта" pattern="(http|https)://.+"/>
            <span class="form_hint">Правильный формат "http://someaddress.com"</span>
        </p>
        <p>
            <label for="message">Текст сообщения:</label>
            <textarea name="message" cols="40" rows="6" required ></textarea>
        </p>
	    <input name="bezspama" type="text" style="display:none" value="" />
        <p>
            <button class="submit" type="submit">Отправить сообщение</button>
        </p>
</form>

Начнем с первой строки.

class=”contact_form” – указываем класс, для того, чтобы в будущем задать CSS стили.

action=”contact-form.php” – указываем название файла со скриптом, который будет обрабатывать данные формы и осуществлять отправку сообщения. Если файл лежит в той же папке, что и страница с формой, то достаточно указать только название файла, если в другой, то нужно будет указать и путь к файлу.

Дальше идут 4 блока <p>, отвечающих за вывод полей для ввода данных, по названиям понятно, какой за что отвечает. Сами поля выводятся с помощью тегов <input>, внутри которого задаются следующие характеристики:

Type – отвечает за тип вводимых данных, text – обычный текст, email – электронный адрес, такие поля автоматически проверяются на правильность (должна присутствовать @), tel – телефон, url – адрес сайта.

Name – собственное название самого элемента, оно необходимо, что скрипт знал как использовать данные каждого поля. Если вы сделаете несколько полей одного типа, то вам необходимо каждому полю присвоить свое name.

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

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

pattern=”(http|https)://.+” – эта конструкция служит для проверки корректности поля веб сайт, указывает на то, что адрес обязательно должен содержать http://текст или https://текст, в противном случае будет ошибка.

Для некоторых полей задана всплывающая подсказка, которая появляется при выборе элемента. Ее задет <span class=”form_hint”>, где form_hint является классом элемента (его свойства прописываются в CSS). Текст во всплывающей подсказке для каждого поля контактной формы можно задать любой. Если такая фишка вам не нужна – просто удалите весь тег <span></span>.

Поля для ввода самого сообщения размечается тегом <textarea>, в котором cols задает количество символов поля в ширину, а rows число строк.

Защита от спама – невидимое поле с именем name=bezspama. У него стоит стиль display:none – это значит поле невидимо людям, но боты его будут заполнять на автомате.

И завершающий элемент любой формы – кнопка отправки сообщения, она задается тегом <button> </button>, имеющим свой класс для настройки внешнего вида и тип “submit”.

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

Оформление CSS стилями

Если вы посмотрите в браузере на то, что получилось, то увидите нечто корявое и непривлекательное. Для того, чтобы у нас получилась красивая форма обратной связи, придется поработать над ее стилями (html будет недостаточно).

Если вы владеете CSS, то задать оформление для всех элементов формы сможете без проблем, тут даже не потребуется моя помощь.

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

Ссылка на скачивание всех файлов формы в конце статьи.

Подключить стили можно двумя способами:

  1. Скопировать содержимое файла в файл style.css, который уже есть на вашем сайте (добавьте в самый конец)
  2. Поместить файл, который я дал, на ваш хостинг и подключить его.

Подключаются файлы стилей следующим кодом <link rel=”stylesheet” media=”screen” href=”styles.css” >, размещаемым внутри <head></head>. Если файл со стилями (styles.css) находится не в одной папке с html страницей, то пропишите полный путь до него.

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

Настройка PHP кода (добавлена защита от спама)

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

Для сайтов, использующих кодировку windows-1251 и версию php 5.4+, в код нужно будет внести дополнение, связанное с функцией htmlspecialchars. Покажу его ниже. Иначе, вместо кириллицы будут приходить пустые поля.

Помните, в свойствах формы (в html файле) мы указывали параметр action=”contact-form.php”. Вам нужно создать файл с названием contact-form.php и поместить в него находящийся ниже код.

<?php

/* Задаем переменные */
$name = htmlspecialchars($_POST["name"]);
$email = htmlspecialchars($_POST["email"]);
$tel = htmlspecialchars($_POST["tel"]);
$website = htmlspecialchars($_POST["website"]);
$message = htmlspecialchars($_POST["message"]);
$bezspama = htmlspecialchars($_POST["bezspama"]);

/* Ваш адрес и тема сообщения */
$address = "[email protected]";
$sub = "Сообщение с сайта ХХХ";

/* Формат письма */
$mes = "Сообщение с сайта ХХХ.\n
Имя отправителя: $name 
Электронный адрес отправителя: $email
Телефон отправителя: $tel
Сайт отправителя: $website
Текст сообщения:
$message";


if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/
{
/* Отправляем сообщение, используя mail() функцию */
$from  = "From: $name <$email> \r\n Reply-To: $email \r\n";
if (mail($address, $sub, $mes, $from)) {
	header('Refresh: 5; URL=https://biznessystem.ru');
	echo '
    
    Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX%MINIFYHTMLbae5a066dea793b8705e67bd553ef26712%';}
else {
	header('Refresh: 5; URL=https://biznessystem.ru');
	echo '
    
    Письмо не отправлено, через 5 секунд вы вернетесь на страницу YYY';}
}
exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */
?>

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

$название = htmlspecialchars($_POST["название"]);

Если вы добавляли какие-то дополнительные поля данных, то в блоке переменных допишите их имена.

Не все переменные мы берем из формы. Как минимум, адрес электронной почты, на который придет письмо (ваш адрес) указывается отдельно. В данном случае это переменная $address – впишите в ее значение свой электронный ящик.

Также, в данном примере явным образом задано значение переменной $sub – она будет выдавать тему письма. Можно добавить тему сообщения в HTML форму в виде текстового поля (наподобие name), и брать значение этой переменной оттуда.

В блоке формат письма настраивается то сообщение, которое получите вы. Он может отличаться от того, что было написано в поле textarea под названием message. Я просто сделал еще одну переменную $mes и включил в нее дополнительный текст и важные данные отправителя (имя, почту, телефон, сайт). Эту часть вы можете сконфигурировать так, как вам удобно.

Дальше идет отправка сообщения.

Чтобы получаемые вами письма подписывались именем отправителя, и в них включался их обратный адрес, а не адрес сервера, на котором находится ваш php файл, мы задаем новую переменную $from, в нее включаем имя и электронный ящик отправителя письма.

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

Вставка формы на страницу сайта

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

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

Скачать файлы контактной формы

Активный анти спам с вводом данных в поле

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

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

Первым делом нам необходимо добавить поле для ввода и вопрос в HTML код. В качестве основы у нас уже есть строка 25 (input name=“bezspama”). Это поле невидимо. Мы превращаем его в обычное. Для этого всю строку меняем на вот такой блок:

<p>
   <label for="bezspama">2+2*2=:</label>
   <input name="bezspama" type="text" required />
</p>

Вместо математического выражения 2+2*2 можете ввести любые данные – это визуальный вопрос для пользователя. Из поля input мы убрали стиль display:none и добавили обязательность заполнения.

Следующим шагом меняем данные в PHP обработчике, чтобы он делал проверку уже не на пустоту этого поля, а на правильность введенных данных. Проверка у нас делалась в строке 25 выражением empty($bezspama). Мы меняем это выражение и будем делать проверку равенства заполненного поля заранее заданному числу. В моем примере, математическое выражение равно 6, поэтому вся строка будет выглядеть вот так:

if ($bezspama==6) /* Проверка математического выражения*/

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

Для того, чтобы этот вариант защиты использовать в дополнение к изначальному необходимо:

  1. Добавить в HTML код блок для вывода нужного поля, но указать другой идентификатор вместо bezspama;
  2. Добавить в начало PHP обработчика присвоение переменной этого нового идентификатора;
  3. Перед строкой 25, где идет проверка на пустоту переменной bezspama добавить проверку новой переменной на соответствие заданному значению, как описано чуть выше;
  4. После строки с проверкой математического выражения вставить открывающую фигурную скобку “{“, так чтобы следующая команда if стояла после нее;
  5. Перед командой exit вставить еще одну строку с закрывающей фигурной скобкой “}”

После всего этого в вашей форме будут работать одновременно обе защиты от спама.

Частые проблемы и их решение

Читатели часто задают вопросы, если что-то не выходит, наиболее частый проблемы и их решения буду публиковать в этом разделе.

Иероглифы при кодировке windows-1251

Теперь об особенностях использования кодировки сайта windows-1251. Если у вас такой случай, то указанная выше строчка должна дополниться еще двумя параметрами для функции htmlspecialchars – ENT_COMPAT, ‘cp1251’. Выглядеть это будет вот так:

$название = htmlspecialchars($_POST["название"], ENT_COMPAT, 'cp1251');

Не приходят письма с некоторых или всех ящиков

Часто встречается ситуация, когда письма не приходят, хотя сообщение об успешной отправке появляется. Это означает, что хостинг функцию mail, отправляющую письмо, выполнил, а почтовый сервер получателя письмо не принял, посчитав его поддельным. Возникает это вследствие того, что сервер отправки сообщения не совпадает с сервером, указанным в адресе отправителя (стр. 28 переменная $from).

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

$from  = "Reply-To: $email \r\n";

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

Понравилась форма – можно поблагодарить автора

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(74 голоса, в среднем: 4.7 из 5)

523 комментария на «“HTML форма обратной связи для сайта +PHP обработчик с защитой от спама”»

  1. Антон:

    Как убрать поле с сайтом, мне оно не нужно

    Ответить
    • Дмитрий Жилин:

      Нужно удалить несколько лишних строк в коде:

      1. Удалите с 16 по 20 строки в html форме (теги

      где сказано про website)
      2. В php коде удалите 8 и 22 строки (задание и вывод переменной website)

      Ответить
    • Виталий:

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

      Ответить
  2. Алексей:

    Спасибо за статью, очень вовремя для меня 🙂
    Только у меня не работает что-то…
    Вроде все по инструкции сделал, но при нажатии на кнопку “Отправить сообщение” – открывается страница – на белом фоне написан php’шный код…

    Что делаю не так?
    Файл php лежит в той же папке, где и страничка с формой.

    Ответить
    • Дмитрий Жилин:

      Уточните, где открываете файл – на компьютере или он уже на хостинге?
      На компьютере php код не работает.
      Если это происходит уже на вашем хостинге, то проверьте, работает ли там php.

      Ответить
  3. Алексей:

    да, пробовал на компе.
    выложил на сервер, теперь ошибка:
    Parse error: syntax error, unexpected end of file in /home/user1159171/www/avtovoz.by/contact-form.php on line 30

    Ответить
    • Алексей:

      добавил фигурную скобку в конце 34 строчки..
      теперь:

      Warning: Cannot modify header information – headers already sent by (output started at /home/user1159171/www/avtovoz.by/contact-form.php:1) in /home/user1159171/www/avtovoz.by/contact-form.php on line 24
      Письмо отправлено, через 5 секунд вы вернетесь на сайт

      Ответить
      • Дмитрий Жилин:

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

        Что касается кодировки и этой ошибки – обе проблемы связаны скорее всего с тем, что вы правили файл и при сохранении неверно выставили параметры.

        Подобные файлы нужно править в специализированном редакторе, например, Akelpad или Notepad++.

        Откройте файл в этом редакторе, при сохранении сделайте так:
        1. выберите кодировку, соответствующую вашему сайту. В моих файлах стоит UTF-8, если у вас сайт с другой кодировкой, выберите ту, которая у вас.
        2. снимите галочку BOM

        После этого все должно заработать как положено.

        Ответить
        • Евгений:

          Почему после отправки письма браузер открывает страничку опять с кодом php:
          <?php

          /* Задаем переменные */
          $name = htmlspecialchars($_POST["name"]);
          $email = htmlspecialchars($_POST["email"]);
          $tel = htmlspecialchars($_POST["tel"]);
          $website = htmlspecialchars($_POST["website"]);
          $message = htmlspecialchars($_POST["message"]);
          $bezspama = htmlspecialchars($_POST["bezspama"]);

          /* Ваш адрес и тема сообщения */
          $address = "[email protected]";
          $sub = "Сообщение с сайта ХХХ";

          /* Формат письма */
          $mes = "Сообщение с сайта ХХХ.\n
          Имя отправителя: $name
          Электронный адрес отправителя: $email
          Телефон отправителя: $tel
          Сайт отправителя: $website
          Текст сообщения:
          $message";

          if (empty($bezspama)) /* Оценка поля bezspama – должно быть пустым*/
          {
          /* Отправляем сообщение, используя mail() функцию */
          $from = "From: $name \r\n Reply-To: $email \r\n”;
          if (mail($address, $sub, $mes, $from)) {
          header(‘Refresh: 5; URL=https://biznessystem.ru’);
          echo ‘Письмо отправлено, через 5 секунд вы вернетесь на сайт XXX’;}
          else {
          header(‘Refresh: 5; URL=https://biznessystem.ru’);
          echo ‘Письмо не отправлено, через 5 секунд вы вернетесь на страницу YYY’;}
          }
          exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */
          ?>

      • Дмитрий Жилин:

        Еще проверьте, нет ли лишних пробелов перед

        Ответить
  4. Алексей:

    кстати, письмо пришло 🙂
    только с кодировкой что-то не то 🙁 краказяблы в письме

    Ответить
  5. Алексей:

    1. Правил РНР в редакторе Notepad++. Выбрал кодировку UTF-8 (без ВОМ)
    2. Кодировка у меня на сайте стоит кириллица (наверное это Windows-1251?).
    В таком раскладе письмо приходит, но краказяблами. Если ставлю кодировку UTF-8, то письмо вообще не приходит. (менял кодировку только страницы с формой)
    3. Добавил строчку перед отправкой:
    $from .= “Content-type: text/plain; charset=\”utf-8\””;
    Теперь письмо приходит правильное.
    Но, русские буквы (слова) с формы не приходят в письме, выглядит так:

    Имя отправителя:
    Электронный адрес отправителя: [email protected]
    Телефон отправителя: +37529 123-45-67

    Если имя написать в форме латиницей, то все ок.

    Что еще попробовать?

    Ответить
    • Дмитрий Жилин:

      Кодировка всех файлов должна быть одинаковой – и html и php.
      Пересохраните php файл в той же кодировке.
      Если не получится, пришлите мне ваши исправленные файлы – я проверю их на своем хостинге.

      Ответить
      • Александр:

        Поставьте кодировку

        И в фаиле PHP пропишите вместо
        $name = htmlspecialchars($_POST[“name”]);
        вот так $name = htmlspecialchars($_POST[“name”], ENT_COMPAT, ‘cp1251’);
        Это для того, чтоб на вашу почту приходили сообщения написанные по русски, так же пропишите и в сообщениях: $message = htmlspecialchars($_POST[“message”], ENT_COMPAT, ‘cp1251’);
        Если не прописать вот так, то приходить будет только емаил

        Ответить
  6. Алексей:

    отправил свой файл РНР на почту

    Ответить
    • Дмитрий Жилин:

      Поправил php файл (исправления на картинке во вложении, там же правленный файл). Вы поставили лишнюю скобку “}”.
      У меня на хостинге все работает, сообщения приходят в правильной кодировке.

      PS: Зря вы не пользуетесь CSS.

      Ответить
    • Миха:

      Спасибо! Завтра попробую, надеюсь поправлю похожую ошибку

      Ответить
  7. Никита:

    Все хорошо и сообщения приходят, но почему – то не присылаются имя и сообщение… В письме приходит только емаил отправителя.

    Ответить
    • Дмитрий Жилин:

      До вашего сообщения разбирались с похожей проблемой Алексея (предыдущего коментатора). На латинице имя отправителя у него приходило, на кирилице нет.

      Скорее всего у вас, как и у него проблема в кодировке файлов – проверьте, файл с формой и php обработчиком должны быть в одной кодировке.

      Ответить
    • Дмитрий Жилин:

      Дополню свой комментарий. Подобная проблема наблюдается у сайтов, использующих кодировку windows-1251, если на вашем хостинге работает версия php 5.4 и выше (с этой версии одна из функций стала работать иначе).

      Решение:
      ——————
      В php коде в функции htmlspecialchars() необходимо добавить еще 2 параметра – ENT_COMPAT, ‘cp1251’ – для каждой переменной, использующей кирилицу.

      Например, заменив: htmlspecialchars($_POST[“name”]) на
      htmlspecialchars($_POST[“name”], ENT_COMPAT, ‘cp1251’).
      ——————

      Ответить
  8. Алексей:

    Да! Все заработало!

    Добавил, как ты и написал, еще один параметр в функцию htmlspecialchars: , ENT_COMPAT, ‘cp1251’
    Все теперь работает как надо.

    Спасибо за решение, за форму и за поддержку!
    Давно хотел свою форму, чтобы не зависеть от сторонних сервисов…

    Теперь, когда основа работает, буду разбираться с CSS – делать красиво 🙂
    Жму руку!

    Ответить
  9. Прокоп:

    Здравствуйте! Спасибо за форму. Если не затруднит посмотрите www. russervic.ru. Тоже с кодировкой траблы. все в UTF-8, все файлы в одной папке. Письма приходят в виде ??????. И предупреждения Письмо отправлено, через 5 секунд вы вернетесь на сайт также. Возможно ли приукрасить загружаемую страницу с предупреждением? Чтобы не белый лист. Ну и с кодировкой не яно.
    Спасибо.

    Ответить
    • Дмитрий Жилин:

      По поводу сообщения о 5 секундах – вы можете сделать отдельную красивую страницу, куда будет перенаправляться пользователь после отправки сообщения. Параметр refresh сделать 0 (мгновенное перенаправление).

      По кодировке – может быть вы указали ENT_COMPAT, ‘cp1251?? для сайта на utf-8 этого не нужно.

      Ответить
  10. Прокоп:

    в таком виде ????? приходят только строки обозначающие имя, адрес, сообщение…а сам текст отображается доступно

    Ответить
  11. Kirill:

    Что-то даже css не могу нормально подключить((
    Стили то совсем не видно, то отчасти только. Как-будто конфликт какой-то.
    А можно добавить сюда добавление картинки?

    Ответить
    • Дмитрий Жилин:

      1. Чтобы понять что происходит со стилями можно включить браузер в режиме отладки – он покажет какие стили применяются к элементу.
      2. Картинку можно выложить на хостинг картинок, а сюда добавить ссылку на нее.

      Ответить
  12. Дмитрий:

    Не переадресовывается на указанную страницу после заполнения формы.
    Форма: gusmatic.ru/zakaz.html
    Нужная страница после заполнения формы: gusmatic.ru/thank_you.html

    Все остальное работает, письма приходят, все читается. Редирект должен происходить моментально, т.е. задержка 0 сек. Пробовал и Location и Refresh – все одно. Открывается пустой эйчиэмэль с надписью “Письмо отправлено, через 0 секунд вы перейдете на сайт Гусматик”, и ничего далее не меняется.

    Ответить
    • Дмитрий Жилин:

      А если оставляете с задержкой больше нуля, то идет переадресация?

      Ответить
  13. Дмитрий:

    Пробовал 5 и 3. Не идет.

    Ответить
    • Дмитрий Жилин:

      Проверьте свой php файл, возможно при редактировании вы допустили какую-то ошибку. Можете прислать мне на почту (akmid81(собачка)gmail.com) – я посмотрю.
      Если ошибок в файле нет, то причина может быть в хостинге, может он команду header не воспринимает – это можно у тех. поддержки спросить.

      Ответить
  14. Дмитрий:

    Письмо отправил вчера на почту, но ответа не получил. Хостинг запрашивал – техподдержка говорит команда работает, только если после нее ничего не стоит… Пробелы все в документе убрал какие нашел, условие проверки на ботов упрощал (удалял), даже с простым условием переадресации не хочет почему то работать.

    Ответить
    • Дмитрий Жилин:

      Письмо не получил, повторите еще раз. То, что вы упрощали условия проверки на ботов ни на что не влияет, раз у вас показывается строка о том, что переадресация скоро пройдет, значит весь код выполняется.

      Что хостинг имеет ввиду насчет того, что после команды ничего не стоит? Команда header должна стоять до того как будет выводиться содержимое страницы, в данном случае выводимое строкой echo.

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

      Ответить
  15. Максим:

    А как защетить от взлома э тот php файл? Что бы его не могли редактировать, скачать, или через него зайти в другие деректории сервера где лежат другие сайты.

    Ответить
    • Дмитрий Жилин:

      Поставьте права доступа 755 – это разрешает вносить в файл изменения только вам.

      Ответить
  16. Михаил:

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

    Ответить
    • Дмитрий Жилин:

      После 29 строки нужно добавить еще одну конструкцию с функцией mail на второй адрес (само собой надо задать этот адрес переменной, например, $adress1.
      Будет примерно вот так:
      if (mail…) {if (mail…) {тут все header, echo вместе с else}} exit;

      Ответить
  17. Денис:

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

    Ответить
    • Дмитрий Жилин:

      Обязательность поля определяется атрибутом required, если он есть, то это поле нужно заполнять, если его нет, то заполнять не обязательно.
      Как изменить выводимый ей текст я не знаю, в скриптах мы его не задаем.

      Ответить
  18. Ольга:

    Такая же проблема, как и у Дмитрия. Сайт ни в какую не хочет переадресовываться на нужную страницу. И ответ техподдержки похожий. Не удалось как-нибудь решить?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  19. Олег:

    Приветствую. Подскажите, какая может быть причина не отправки письма?

    Ответить
  20. Олег:

    т.е. письмо какбы отправляется, появляется сообщение, что письмо отправлено. Но в почтовом ящике его нет

    Ответить
    • Дмитрий Жилин:

      Первое, что нужно проверить – корректность e-mail адреса. После проверьте не изменили ли случайно что-то в коде.
      Если сообщение об отправке есть, значит скрипт выполняется.

      Ответить
  21. Олег:

    из кода обработчика удалил лишь строки:
    $tel = htmlspecialchars($_POST[“tel”]);
    $website = htmlspecialchars($_POST[“website”]);
    и все связи с ними.
    Я вот думаю, имеет ли смысл, уточнять у хостера о работоспособности функции mail

    Ответить
    • Олег:

      РЕШЕНО. Оказалось все банально просто. Доблестный сборщик почты он Яндекса, все письма посылал СПАМ. абсолютно случайно заметил их там. Спасибо.

      Ответить
      • Дмитрий Жилин:

        Я папку спам постоянно проверяю, туда часто полезные письма попадают.

        Ответить
  22. Андрей:

    У меня есть своя форма. Есть поле имя и телефон. Хочу добавить поле e-mail. Беру копирую к примеру код который относится к полю “имя” вставляю ниже кода первых двух полей, и в нем заменяю под e-mail, но третьего поля не появляется. В чем причина подскажите как сделать правильно?

    Ответить
    • Дмитрий Жилин:

      Поле для ввода выводится тегом input – вы эту строку вставляете?

      Ответить
  23. Андрей:

    Input вставляю, но поля не появляется

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  24. Антон:

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

    Ответить
    • Дмитрий Жилин:

      По какой-то причине не выполняется функция mail, проверьте правильность ее написания и наличие/правильность переменных, относящихся к ней – это единственное условие, проверяемое для выдачи сообщения об ошибке.

      Ответить
  25. Юлия:

    Спасибо за форму и подробное объяснение.
    Такая ситуация: нужно поставить 8 форм на одну страницу – 8 кнопок групп с разным расписанием занятий. Формы полностью одинаковы, а вот на почту нужно чтобы приходил заголовок конкретно той группы, в которую хочет записаться пользователь. Как это осуществить? 8 практически одинаковых обработчиков – как-то не особо правильно наверное. Может, можно это сделать в одном, но как?

    Ответить
    • Дмитрий Жилин:

      Тема письма задается переменной $sub. В скрипте она задается в явном виде текстом. Если мы хотим, чтобы обработчик был единым, то нужно эту переменную брать со страницы из конкретной формы. Как вариант, задать дополнительное поле в форме с именем sub и значением по умолчанию (разным для разных форм). Чтобы это поле не было видно людям, надо сделать его скрытым, так же как защита от ботов сделана.
      Тогда, в зависимости от формы будет подставляться в переменную sub то значение, которое соответствует форме.

      Ответить
  26. Слава:

    Здравстуйте! письмо отправляется, но на почте приходит следующее:
    “Мы не можем проверить подлинность отправителя. Рекомендуем вам быть внимательнее при совершении действий, указанных в письме. Подробнее

    Сообщение с сайта [email protected].

    Имя отправителя: wer
    Электронный адрес отправителя: [email protected]

    Текст сообщения:”
    в чем именно причина?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  27. Андрей:

    Дмитрий, спасибо за вашу работу.
    Вроде бы все нормально, но вот проблема, как и у остальных. Заполняю форму, идет отправка, письмо получаю, но нет редиректа на нужную страницу, а только ошибка:
    Warning: Cannot modify header information – headers already sent by (output started at …./contact-form/contact-form.php:1) in ……/contact-form/contact-form.php on line 30
    Письмо отправлено, через 5 секунд вы вернетесь на сайт…
    И все!!! Причем вообще ничего не менял, кроме почты и ссылки на сайт. Только попробовал со временем поиграть, но увы, работает, но не до конца.

    Ответить
    • Дмитрий Жилин:

      Проверьте, нет ли перед командой header пробела, если есть, то удалите его.

      Ответить
  28. Андрей:

    Да все проверил, Вы уже об этом много раз писали. Прочел всю ветку все перепробовал.
    Ну да ладно, я то уже другой скрипт нашел (он работает), но речь не о том. Я бы посоветовал проанализировать и может немного доработать, выявить причину из-за чего у части пользователей он работает с ошибками и устранить ее.

    Ответить
    • Дмитрий Жилин:

      Каким методом реализована переадресация в скрипте, которым вы воспользовались?
      Я бы с удовольствием выявил причину, но на двух моих хостингах все работает как часы, а дорабатывать что-то не видя проблемы очень сложно.

      Ответить
  29. Андрей:

    Дмитрий, не сочтите за рекламу, вот ссылка на готовую форуму (может вам то же она будет интересна), что я использовал tutorialzine(точка)com/2009/09/fancy-contact-form/ . На просторах интернета нашел ее частично переведенную и заточенную под русский язык (хотя немного и коряво), вот ее и использовал. Дополнительные поля в ней добавить очень быстро, редактируются 2 файла (самой формы и что должно приходить владельцу). Может сделаете и ее обзор? Думаю будет многим интересно. Если надо, то могу выложить в облако уже то, что переделал для себя.

    Ответить
    • Дмитрий Жилин:

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

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

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

      Ответить
  30. Александр:

    Здравствуйте!
    Помогите… Форма заполнена, жму отправить — скачивается файл contact-form…
    В чем может быть проблема?
    Спасибо заранее.

    Ответить
    • Дмитрий Жилин:

      Так и не скажешь, надо смотреть, что меняли в коде.

      Ответить
  31. Олег:

    Добрый вечер,ночь.
    Сделал все как вы написали,поля заполнил,жму отправить выходит ” Сообщение не отправлено! и переход на стр левую”
    Я даже вставлял ваши исходники.. все ровно все так же..
    В чем может быть проблема?

    Ответить
    • Дмитрий Жилин:

      Страница, на которую осуществляется переход указывается вами в коде, по умолчанию стоит мой блог biznessystem.ru.
      По поводу не отправленного сообщения, возможно вы ошиблись при редактировании переменной $adress или $email – проверьте их корректность.
      Если все в порядке там, то выкладывайте свой файл на яндекс диск и ссылку дайте, я посмотрю.

      Ответить
      • Олег:

        Чертос два! Я мучался около двух дней,перебирая столько php кодов и скриптом для отправки.. но ни что не работало.. оказывается вся суть была в пробном периоде на хосте timeweb,там не отсылается пока не оплатишь за хост) Спс вам,у вас хорошая форма,прикольный дизайн..
        Только как например сделать,чтобы еще можно было прикреплять файлы?

        Ответить
        • Дмитрий Жилин:

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

  32. Олег:

    Хотелось бы узнать еще,вот например у меня сайт чисто на HTML,без движка.
    Возможно ли создать там регистрацию? чтобы люди могли авторизоваться и т.д.. если например создать базу php и настроить ее. а то говорят,без CMS этого не сделать.

    Ответить
    • Дмитрий Жилин:

      По сути вы сейчас говорите о создании самописного движка. Уж проще использовать готовый.

      Ответить
      • Олег:

        Тогда вопрос в следующем,как например перенести свой сайт на движок?
        Вот например устанавливаю я, Joomla or Wordpres. у них там создается как бы свой шаблон и т.д… но что делать,если мне нужен именно мой шаблон с HTML?Как правильно его вставить что ли.. не могу правильно сформулировать,но думаю идея понятна?)

        Ответить
        • Дмитрий Жилин:

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

  33. константин:

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

    Ответить
    • Дмитрий Жилин:

      Не приходит совсем имя или поле для имени приходит пустым?
      Если не приходит совсем, значит, что-то недосмотрели когда правили – проверяйте код.
      Если пустым, то, возможно, у вас сайт с кодировкой win1251 – решение описано в конце статьи (возможно, вы не обратили внимание на это).

      Ответить
  34. константин:

    все что ввожу в поле имя, приходит пустым, а все остальные поля приходят заполнеными не могу понять почему,

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  35. Саня:

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

    Ответить
    • Саня:

      спасибо разобрался отличный скрипт.Оказывается на хостинге была отключена функция mail().А так всё работает!!!

      Ответить
      • Дмитрий Жилин:

        Такое бывает с хостингами. Рад, что разобрались и форма заработала.

        Ответить
  36. Александр:

    Спасибо! Всё работает, но сперва приходили пустые письма затем не работала переадресация. В первом случае у меня слетели кавычки в строках объявления переменных php файла, во втором помогло сменить кодировку на utf-8 без BOM (в Notepad++). ещё раз спасибо!!!

    Ответить
    • Дмитрий Жилин:

      С кодировками часто бывает проблема. Хорошо, что она у вас решилась.

      Ответить
  37. Олег:

    Добрый вечер. Большое Вам человеческое спасибо за выкладку частички своих знаний!!!! очень помогла в решении задачи! Есть одно затруднение правда – может сталкивались? при открытии с моего компа форма отображается как надо, все отправляет и т.д. а вот при открытии с другого компа из любого браузера форма отображается криво т.е. между именем строки и строкой ввода появляется огромный пробел, по величине примерно такой же как и поле ввода. Может быть подскажите где концы искать, а то у меня опыта совсем в этом деле нет! Это мой первый сайт. Заранее спасибо.

    Ответить
    • Дмитрий Жилин:

      Для того, чтобы что-то посоветовать мне нужно увидеть проблему. Можете сделать отдельную страницу на сайте (невидимую для посетителей) и разместить на ней форму, после чего дайте ссылку на страницу мне – я гляну.

      Ответить
  38. Анна:

    ОГРОМНОЕ СПАСИБО!

    Ответить
  39. Олег:

    Сейчас уже можно не вникать во все тонкости программирования, а воспользоваться готовыми решениями. Есть куча онлайн генераторов форм обратной связи. Первый что попался – formdesigner.ru. За несколько минут можно сделать классную форму, да еще и настроить интеграцию с другими системами (email рассылки или CRM). Но как говорится выбирать приходится самому. Я например отдаю предпочтение онлайн сервисам с их огромными возможностями. Решать вам!

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  40. Киридд:

    Добрый день! Внедрили Вашу форму, все отлично работает. Но возникла одна проблема, нужно добавить еще одно поля, где будет список html. Пользователь выбирает нужное, сейчас эта часть в письме не отражается. buhshkola.e58.ru

    Ответить
    • Дмитрий Жилин:

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

      Ответить
    • Дмитрий Жилин:

      Если вы хотите включить в комментарий код, заключите его в теги <code></code>.
      По другому некорректно отображается.

      Ответить
  41. Кирилл:

    <?php

    /* Задаем переменные */
    $name = htmlspecialchars($_POST["name"]);
    $email = htmlspecialchars($_POST["email"]);
    $tel = htmlspecialchars($_POST["tel"]);
    $message = htmlspecialchars($_POST["message"]);
    $vubor = htmlspecialchars($_POST["vubor"]);
    $bezspama = htmlspecialchars($_POST["bezspama"]);

    /* Ваш адрес и тема сообщения */
    $address = "[email protected]";
    $sub = "Сообщение с сайта http://buhshkola.e58.ru/";

    /* Формат письма */
    $mes = "Сообщение с сайта buhshkola.e58.ru.\n
    Имя отправителя: $name
    Электронный адрес отправителя: $email
    Телефон отправителя: $tel
    Сайт отправителя: $website
    Текст сообщения:
    $message
    Курсы:
    $vubor";

    if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/
    {
    /* Отправляем сообщение, используя mail() функцию */
    $from = "From: $name <$email> \r\n Reply-To: $email \r\n";
    if (mail($address, $sub, $mes, $from)) {
    header('Refresh: 5; URL=http://buhshkola.e58.ru/');
    echo 'Письмо отправлено, через 5 секунд вы вернетесь на сайт buhshkola.e58.ru';}
    else {
    header('Refresh: 5; URL=http://buhshkola.e58.ru/');
    echo 'Письмо не отправлено, через 5 секунд вы вернетесь на страницу buhshkola.e58.ru';}
    }
    exit; /* Выход без сообщения, если поле bezspama чем-то заполнено */
    ?>


    <p>
    <form name="vubor">
    Выберите курс?
    <br><input class=col type=checkbox name=option1 value=a1 checked>Экономика и бухгалтерский учет
    <br><input class=col type=checkbox name=option2 value=a2>Основы предпринимательской деятельности
    <br><input class=col type=checkbox name=option3 value=a3>Бухгалтер-калькулятор организаций общественного питания
    <br><input class=col type=checkbox name=option4 value=a4>Кадровое делопроизводство
    <br /><br><input type=submit value="Отправить">
    </form>

    </p>

    </form>
    </body>

    Эта инфа не приходит

    Ответить
    • Дмитрий Жилин:

      в форме нет параметра action (куда слать данные) и method. Или это вы не полный код формы привели?

      Ответить
      • юрий в:

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

        И неплохо было бы развить тему и прикрутить урок как прикрутить нормальную капчу.

        Ответить
  42. Кирилл:

    Код неполный, не приходит вот эта строка: $vubor = htmlspecialchars($_POST["vubor"]);

    Ответить
    • Дмитрий Жилин:

      В присвоении переменных должно присваиваться значение переменной, а не названия формы. В вашем случае имена чекбоксов option1, option2 и т.д., а в присвоении стоит имя формы – vubor.
      Если делаете с чекбоксами, то под каждый из них своя переменная должна присваиваться и уже их прописываем в теле письма.
      Возможно вы перепутали с вариантом выбора из списка – команды select и option, там имя переменной будет одно, а значения будут подставляться в зависимости от выбранного варианта. В общих чертах это вот так должно быть:
      <select class="col" name="vubor">
      <option value="a1">вариант 1</option>
      <option value="a2">вариант 2</option>
      <option value="a3">вариант 3</option>
      </select>

      Ответить
  43. Кирилл:

    В письме нет того, что выбрали

    Ответить
  44. Олег:

    Спасибо Дмитрий за вашу чудесную форму!
    Скажите пожалуйста можно ли к ней добавить капчу ну или другую защиту?
    Заранее благодарен.

    Ответить
  45. Олег:

    Дмитрий, ну это реально сделать? Для того чтобы усложнить отправку письма всякими спамщиками ботами и так далее.
    Бывает письма приходят с сайта и оно пустое, не имени, ни телефона, ни текста письма. Хотя стоит – required – на всех полях, но это видимо как то обходят.
    Если заполнять все графы, хоть на английском, хоть на русском, все нормально приходит.

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  46. Александр:

    Спасибо Дмитрий за вашу отличную форму! Работает отлично, но у меня два косяка.
    1. В теле письма всё отображается корректно, а в имени отправителя (From: $name) латиница корректная а у кириллицы слетает кодировка. В чем проблема?
    Сайт на HTML, с принудительной UTF-8 (прописано в .htaccess) Кодировка contact-form.php тоже UTF-8 (проверял и редактировал в muCommander)

    2. Где в коде настраивается параметр Required? У меня отправляется даже абсолютно пустая форма! Выводит сообщение про 5 секунд и переходит на заданную страницу. Письмо приходит с незаполненной формой. Подскажите, как исправить?

    Ответить
    • Дмитрий Жилин:

      1. Ищите чем отличается код для вывода имени от остальных переменных. Раз все поля нормально, и только с именем проблема, значит должно быть какое-то отличие.

      2. Required – это стандартный параметр, относящийся к формам, его настройка не требуется. Его можно обойти, но для этого пользователь должен будет править код формы. Просто так отправка пустых полей работать не должна – покажите где у вас стоит форма, я взгляну.
      Если нужна более жесткая проверка, то можно реализовать с помощью дополнительного кода на php, где будет проверяться заполнение переменных, на этом форуме такой вариант обсуждали cyberforum.ru/php-beginners/thread1393025.html

      Ответить
  47. Дима:

    Помогите решить проблему с кодировкой, уже почти все попробовал.
    Письма приходят такие:
    ???????–???????»?µ????? ?· ??°???‚?° mzhk.com.ua

    ?†??’? ???–?????€?°?????????°: ???»?
    ?•?»?µ???‚?€???????° ?°???€?µ??° ???–?????€?°?????????°:
    ???µ?»?µ?„???? ???–?????€?°?????????°: ???????‹??
    ???µ???° ???????–???????»?µ?????: ?‹???????‹??
    ???µ????‚ ???????–???????»?µ?????:
    ?‹???????‹?????‹ ???€???‹??

    Сторінка – mzhk.com.ua/contact.html

    Ответить
    • Дмитрий Жилин:

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

      Ответить
      • Дима:

        изменял кодировку страницы contact-form.php
        код
        header(“Content-Type: text/html; charset=utf-8”);
        header(“Content-Type: text/html; charset=windows-1251”);
        header(“Content-Type: text/html; charset=cp1251”);

        не работает

        Ответить
  48. Дима:

    УЖЕ ВСЕ РАБОТАЕТ!

    Ответить
  49. Сергей:

    Доброго времени суток, Дмитрий! Все сделал как Вы прописали и все нормально, но есть одно но – над строчкой через 5 секунд Вы перейдете на сайт… прописывается строчка
    Warning: mail(/home/u151596082/.logs/php_mail.log): failed to open stream: No such file or directory in /home/u151596082/public_html/contact-form.php on line 27. Подскажите пожалуйста как ее убрать.

    Ответить
    • Дмитрий Жилин:

      27 строка закомментирована – она не должна влиять на работу скрипта. Странно, что выдает у вас ошибку. Можете ее удалить вообще.

      Ответить
  50. Борис:

    Сообщения приходят вот такие:
    ????????? ? ????? ??? ?????????.

    ??? ???????????: Борис
    ??????????? ????? ???????????:
    ??????? ???????????: 8-123-4546789
    ????? ???????????:
    ????? ?????????:
    проверка связи

    Пробовал менять кодировку с помощью Notepad на UTF-8 без BOM в файлах html; php; css
    Не помогает. Все то же самое.
    Что еще сделать?

    Ответить
    • Дмитрий Жилин:

      ENT_COMPAT использовали при назначении переменных? кодировка сайта какая?

      Ответить
      • Борис:

        Кодировка UTF-8 без BOM
        ENT_COMPAT использовал но только с cp1251

        Ответить
        • Дмитрий Жилин:

          Переменные у вас нормальные приходят, значит html код формы работает нормально.
          То что с вопросиками прописывается в php файле обработчике – где-то в нем причина.
          А текст в переадресации как отображается?

  51. Екатерина:

    Подскажите, раньше отправлялись сообщения с данной формы, а после настройки smtp перестали отправляться выскакивает “Письмо не отправлено, через 5 секунд вы вернетесь на страницу…”
    Возможно в этом косяк: /* Отправляем сообщение, используя mail() функцию */ как исправить с mail на smtp?

    Ответить
    • Дмитрий Жилин:

      Я работал только с mail, в других вариантах не компетентен. Узнайте у хостера, почему mail может не работать на их серверах.
      Попробуйте искать ответы по SMTP на форумах.

      Ответить
      • Екатерина:

        Форма просто ваша очень хорошая и раньше все работало, как по маслу) Ну ладно, буду спрашивать и reg.ru, почему не работает. Спасибо за ответ!

        Ответить
    • Борис:

      Текст в переадресации так же вопросами

      Ответить
  52. Паша:

    Здравствуйте. Хорошая форма, но возникли 2 вопроса:
    1) вставил дополнительную графу с выбором из списка, так он отличается по внешнему виду. Как бы это поправить?
    2) при переходе обратно через 5 сек. новая страничка открывается в том окошке, где до этого стояла форма, а не во весь экран.
    Спасибо.

    Ответить
    • Дмитрий Жилин:

      Внешний вид определяется CSS стилями. В данной форме стилевое оформление для списков не задано, поэтому, для изменения их внешнего вида вам необходимо добавить данные в файл style.css.
      Команда header открывает страницу в том же окне, где была открыта форма, если форма во всплывающем окне, то и переадресация идет в нем. Я понял, что вы хотите получить, но как это реализовать не знаю, не знаю возможно ли вообще.

      Ответить
  53. Роман:

    Форма огонь! всем рекомендую! Простая, легкая в установке и редактировании!

    Ответить
  54. Kiber:

    Здравствуйте, после ввода данных открывается пустое окно, ни куда не перекидывает. Помогите

    Ответить
  55. Samarik:

    Здравствуйте, поставил вашу форму на сайт(из изменений: стили слил в свой файл .css, и из формы убрал раздел “веб сайт”) и вот какая закономерность: прописал свою почту на gmail.com, и когда отправляю письмо (пишу в форме тоже [email protected]) то всё норм приходит, а если не с gmail.com но ничего не приходит, Подскажите в чём может быть проблема.Спасибо

    Ответить
    • Дмитрий Жилин:

      В папке спам смотрели? Может быть туда попадают сообщения.

      Ответить
      • Samarik:

        нет не приходят ни куда, пробывал даже почту на хостинге таже ситуация

        Ответить
        • Дмитрий Жилин:

          О том что письмо отправлено сообщение есть или пишет что ошибка и письмо не отправлено?

  56. aалександр:

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

    Ответить
    • Дмитрий Жилин:

      То есть, кодировка букв в письме нормальная, а некорректная только надпись о переадресации? Если так, то странно, в одном файле не может частично совпадать кодировка, частично нет. Даже не знаю в чем косяк.
      Попробуйте поменять кодировку php файла, посмотрите что получится.

      Ответить
      • aалександр:

        Спасибо. А как поменять его кодировку?

        Ответить
        • Дмитрий Жилин:

          Откройте файл в редакторе Notepad++ и при сохранении будет выбор возможных кодировок.

        • aалександр:

          Ясно. Я просто в brackets учусь. Но там тоже наверняка можно это сделать.
          Спасибо. Сделать отпишусь.

        • Samarik:

          откройте файл php в notepad ++ ? там есть меню сверху “кодировка”

    • Samarik:

      если сайт в кодировке UTF8(без BOM) то попробуйте в php файле поставить просто UTF8

      Ответить
      • aалександр:

        Я понял, а где ставить эту кодировку. В тексте скрипта или при сохранении файла файла?

        Ответить
    • Samarik:

      пишет отправлено

      Ответить
    • Samarik:

      пишет отправлено всегда

      Ответить
  57. Samarik:

    спасибо, решил проблему удалением заголовков from и reply-to

    Ответить
    • aалександр:

      Спасибо, разобрался. Изменил кодировку на utf8 с Dom. Все работает!

      Ответить
    • Дмитрий Жилин:

      Главное, чтобы без них проблемы с ответами на письма не появились.

      Ответить
      • Юлия:

        Дмитрий, у меня та же проблема – работает все замечательно, письмо приходит на почту, читается (сохраняла в UTF8(без BOM)), но надпись о переадресации некорректная (поставила текст на латинице все хорошо) и не идет возврат на сайт, видимо, потому что он в зоне рф, кириллицей (ставлю сайт на латинице – все в порядке, переходит). Пробовала просто UTF8, но там как раз появляются в письме разнообразные значки. Получается, что проблемы с кодировкой именно в тэгах header и echo. Из обсуждения не поняла – как устранить проблему. Спасибо!!!

        Ответить
        • Дмитрий Жилин:

          Во многих случаях кирилические домены в чистом виде использовать нельзя, их надо преобразовывать в латиницу (punycode). Например, этим сервисом – wwhois.ru/punycode.php
          Переадресация должна заработать.

        • Юлия:

          Большое спасибо! все заработало!!!

    • Е:

      Samarik:
      2016-02-24
      спасибо, решил проблему удалением заголовков from и reply-to

      У меня было один в один, именно твой совет по удалению строчки:
      $from = “From: $name \r\n Reply-To: $email \r\n”;
      из файла: contact-form.php
      и помог.

      Автору спасибо за форму

      Ответить
      • Сергей:

        мне удаление данной строки помогло с отображением в Outlook, приходили и заголовки и сообщения в не читаемом формате , до этого перепробовал кучу советов и вариантов, кодировка везде UTF8 без ВОМ

        Ответить
  58. Константин:

    Здравствуйте!
    Хороший скрипт.
    Все поставил (сейчас на тестовом домене отрабатываю адаптивный шаблон), но письма приходят вида (майлы изменил):
    ___________________________________________________________________
    24 фев. в 22:21
    Константин , [email protected]

    Кому
    [email protected]

    Сообщение со страницы КОНТАКТЫ

    Имя отправителя: Константин
    Электронный адрес отправителя: [email protected]
    Телефон отправителя:
    Текст сообщения:
    Тест
    ______________________________________________________________________

    Поле телефон – не обязательно, а вот в шапке письма – крякозябры – это кириллицей имя отправителя.

    Кодировки все utf-8 без бом, крякозябры больше нигде не проявляются…

    Что может быть?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
      • Константин:

        Да, Дмитрий, именно так!

        Это при указании почты отправителя ящиков и яндекса и гугла…

        Если имя отправителя дать латиницей – нормально отображается…

        Сервер Дебиан, панель ISP 4 pro, версию PHP сейчас не скажу, но ставил все в августе прошлого года из последних репозитариев.

        Ответить
        • Дмитрий Жилин:

          Честно, нет даже мысли почему так. Первый раз встречаюсь с тем, что в одном и том же письме в разных местах по-разному. Могу посоветовать только метод научного тыка – пробуйте менять кодировки php файла.

        • Константин:

          Догадываюсь, что только “научный тык”….

          Посмотрим, по идее, перенесу по окончании все на мастерхост, там же поменяю и почту получателя, – может, танцы с будном и не потребуются :).

          Отпишусь (через недельку – две)

        • Константин:

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

          Декодер после расшифровки пишет: CP1251 → UTF-8.

          Думаю, особо не гадать, почему так…. Попробую убрать из

          $from  = "From: $name <$email> \r\n Reply-To: $email \r\n";  

          переменную имени $name, чтобы не раздражала. А в теле письма все правильно. Оттуда и возьму информацию об отправителе.

        • Константин:

          Что нагуглил по теме:

          Заголовки писем автоматически перекодируются в ANSI, тогда как в теле письма допускается UTF-8.

          Почта гугла допускает заголовки в UTF-8, яндекса – нет. Вот у меня письма, уходящие с корпоративной почты домена на ящики сотрудников в Гугле, отображаются с нормальными заголовками, в Яндекс почту – с крякозябрами.

          Видел решения, но для меня ( "0" в php) они сложны – пробовал доставлять в заголовок перекодировку в base64 – не получилось. (www.spravkaweb.ru/php/sovet/mail)

        • Дмитрий Жилин:

          Насколько я понял, надо переопределить переменную from, добавить между 28 и 29 строчкой кода вот такую строку (надо проверять, заработает или нет):

          $from = '=?utf-8?B?'.base64_encode($from).'?=';

  59. Эдуард:

    Как сделать чтобы и письмо отправлялось и файл автоматически скачивался с сервера?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  60. Эдуард:

    да файл скачивается, но остается белая страница с надписью "Письмо отправлено, через 5 секунд вы вернетесь на сайт".

    Хотелось чтобы перекидывало на главную и в тоже время скачивался файл.

    Ответить
    • Дмитрий Жилин:

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

      Только как одновременно переадресовать на главную и запустить скачивание я не знаю, либо одно, либо другое. Может кто-то более разбирающийся в php подскажет – на форумах поспрашивайте.

      Ответить
  61. Владимир:

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

    Ответить
    • Дмитрий Жилин:

      Может хостинг отключил функцию mail – узнайте в поддержке.

      Ответить
  62. Владимир:

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

    Ответить
  63. Владимир:

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

    Ответить
    • Дмитрий Жилин:

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

      Ответить
    • Дмитрий Жилин:

      У вас Вордпресс на сайте, чего вы мучаетесь. Поставьте плагин Contact Form 7 – на порядок меньше настроек и проблем, инструкция здесь.

      Ответить
  64. Владимир:

    Здравствуйте Дмитрий, спасибо за ответ, о Contact Form 7 я знаю и использую его. Дело в том что я занимаюсь Web разработкой, вернее начал заниматься недавно и начал с создания лендингов. Когда создаю ленд на Вордпресс то применяю этот замечательный плагин но многим клиентам нужна просто верстка с рабочими формами, поэтому я в поиске разных решений, в общем как то так.

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  65. Александр:

    Здравствуйте, сделал все по инструкции и тоже нет переменных.

    Подскажите пожалуйста

    так выглядит код php

    <?php

    /* Задаем переменные */
    $name = htmlspecialchars($_POST["name"]);
    $email = htmlspecialchars($_POST["email"]);
    $tel = htmlspecialchars($_POST["tel"]);
    $ploshad = htmlspecialchars($_POST["ploshad"]);
    $collustr = htmlspecialchars($_POST["collustr"]);
    $coltrub = htmlspecialchars($_POST["coltrub"]);
    $coltoch = htmlspecialchars($_POST["coltoch"]);
    $colugl = htmlspecialchars($_POST["colugl"]);
    $address = htmlspecialchars($_POST["address"]);

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  66. Никита:

    Здравствуйте! Как отключить этот эффект, когда ты обновляешь страницу то форма обратной связи с уменьшенного формата быстро увеличивается нормальный формат (который необходим)?

    Ответить
  67. Е:

    В стилях обязательно удалите этот блок:
    .contact_form p {
    width:650px;
    margin:7px 10px 7px 10px;
    padding:0px;
    }
    Иначе замучаетесь искать, что же поля в разнобой.
    Так как здесь указано для верхней части страницы, а у Вас будет в своей части.

    Ответить
  68. Eugen:

    Здравствуйте! Проблемка у меня, помогите пожалуйста!
    всё сделал по инструкции, только CSS поменял но думаю не по тому глючит.
    Состав преступления:
    Когда нажимаю отправить поевляетя ошыбка 500 – Ошибка сервера.
    вот ее текст: “На сайте произошла ошибка при получении ru.reklamer.net/contact-form.php?sfera=wewqwe&doljnosti=asd&tekst=qf&file=&imia=fasegq&nomer=erg&mail=er%40saf.safc. Возможно, сайт временно недоступен или настроен неправильно.”
    Как думаете в чем здесь дело?

    Ответить
    • Дмитрий Жилин:

      Я бы задал вопрос хостеру – ошибка 500 спрятана в серверных настройках скорее всего.

      Ответить
  69. Саня:

    Все время пишет что письмо не отправлено и перекидывает на выбранную мной страницу =( нид хэлп

    Ответить
    • Дмитрий Жилин:

      Функция mail, видимо, не выполняется. Вопрос к тех. поддержке хостинга.

      Ответить
  70. Саня:

    На хостинге апаче стоит на винде. Мучался что htaccess не работает. Может как то связано?

    Ответить
  71. Саня:

    Пасиба

    Ответить
  72. Альбинас:

    Помогите, пожалуйста!
    Добавил код в style.css на сайт в самый конец, создал php в корне сайта на хостинге, добавил html код на страничку.
    Внес коррективы – указал свой адрес почты в форме и т.п. но все равно ошибка.
    подскажите, что делаю не так?

    Ответить
  73. Антон:

    Добрый день!
    Проблема с кодировками, что можно сделать? На клиент Outlook приходит письмо с кракозябрами, просмотр письма через Веб-клиент или Iphone всё нормально на русском.
    При открытии письма в Outlook он показывает, что кодировка Кирилица KOI-8, меняю кодировку на utf-8 (как и написан весь сайт+форма php, почему показывает кодировку KOI-8 при получении не понятно) и всё-равно кракозябры. Подставляя другие кодировки результат нулевой. Где может быть подводный камень?

    Ответить
    • Дмитрий Жилин:

      Я почтовыми программами давно не пользуюсь. Если все так, как вы описали, проблема в Оутлуке – может быть в нем есть настройки какие-то?

      Ответить
  74. Альбинас:

    Свой вопрос решил.
    Спасибо.

    Ответить
    • Дмитрий Жилин:

      Каким образом удалось решить, если не секрет? В чем была проблема?

      Ответить
      • Альбинас:

        Вроде путь не верно указал до php файла в админке.
        Ну а кодировку я решил не мудрить и после отправки выходит текст на английмком языке – Thank u!
        Так было быстрее.

        Сложнее было определить в цсс размер поля, чтобы не ломать шаблон при выводе на мобильных устройствах.
        Там базовая указана в 500 пикселей. Вручную убирал названия полей, остпвил лишь текст внутри поля – введите e-mail и т.п.

        Благодарю за код и файлы!

        +-+ С наилучшими пожеланиями, Альбинас Казлаускас Бизнес-тренер +7-981-721-65-58 pret-a-portrait.ru

        Ответить
  75. Ирина:

    Помогите пожалуйста!
    Всё сделала как описано, с кодировкой все в порядке – UTF8.
    Письма приходят, НО! все поля пустые, не на русском не на латинице. В чем может быть проблема?
    (Форма внизу на сайте kasior-belgorod.ru)

    Ответить
    • Дмитрий Жилин:

      Что корректировали в файлах? Может быть переменные из формы не отправляются в php обработчик – проверьте соответствие полей.

      Ответить
  76. Ирина:

    Спасибо. Буду искать

    Ответить
  77. Николаич:

    Благодарю за чудесный скрипт. И не надо платить горе программистам и жуликам из разных сервисов с абонентской платой.

    Ответить
  78. Максим:

    а на joomle 3 это можно реализовать?

    Ответить
    • Дмитрий Жилин:

      Данный скрипт никак не привязан к определенной CMS, работает где угодно.

      Ответить
      • Максим:

        А можно подробней по поводу реализации на joomla. Вставил Html код на странице, прописал полный путь на стили и php код, форма на странице отображается, но при нажатии на кнопку ни чего не происходит, не читает php код

        Ответить
        • Дмитрий Жилин:

          Значит, что-то неверно прописали. В значении атрибута action проверьте правильность пути к php обработчику.

  79. Артур:

    Здравствуйте. Перестали работать формы заявок на сайте.При нажатии кнопки заказать звонок,выдает сообщение” Ошибка скрипта send.php” . Перепробовал разные скрипты,без изменений. Хотя на другом хостинге копия этого сайта работает без проблем. Может есть какие специальные настройки на хостинге,которые причастны к обработке этих форм? Первый раз такая проблема. Буду очень благодарен за дельные советы.

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  80. Андрей:

    а можно поставить это все на сайте Joomla? Помогите разобраться нужно очень как поставить эту форму на лединг пейдже плиз

    Ответить
    • Дмитрий Жилин:

      Данная форма обратной связи подходит и для Джумла и для Вордпресс и для других движков сайта, она не привязана никаким образом к определенной CMS. Все что требуется – это поддержка вашим хостингом PHP (сейчас это есть везде).

      Ответить
  81. Максим:

    Здравствуйте Дмитрий.
    Я добавил в стили:

    Выбор 1

    Выбор 2
    Выбор 3
    Выбор 4

    Выбор 5

    Выбор 6

    А как теперь сделать в php, что бы на почту приходил выбранный вариант?

    Ответить
    • Максим:

      В стиле для списка select name=’menu’, в value=”first”, value=”second” и так далее. Какую функцию написать в php для отправки на почту?

      Ответить
    • Дмитрий Жилин:

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

      Ответить
  82. Максим:

    //

    //Выбор 1

    //Выбор 2
    //Выбор 3
    //Выбор 4

    //Выбор 5

    //Выбор 6
    //

    Ответить
  83. Максим:

    Можете написать пример?

    Ответить
    • Дмитрий Жилин:

      Когда вы задаете дополнительное поле, вы ему прописываете какое-то имя, в вашем примере – menu.
      Дальше значение этого поля вписываете в переменную через:
      $menu = htmlspecialchars($_POST[“menu”]); (я об этом в статье рассказывал в статье)
      Затем переменную вставляете в тело письма в блоке /* Формат письма */

      Ответить
  84. Павел:

    Добрый день, Дмитрий!

    Великолепная форма, работа супер!
    Установил на сайт – письма приходят, с кодировкой без проблем, спасибо!
    Не могу пока разобраться почему нет переадресации через “refresh”, письмо отправляется, но спустя 3 секунды – переадресации не происходит, на экране остается надпись “Письмо отправлено, через 5 секунд вы вернетесь на сайт” и все… более ничего к сожалению.
    В чем может быть загвоздка или причина?
    Заранее благодарен!

    Ответить
  85. Павел:

    Что-то с BOM записями.. решил вопрос через meta http-equiv=”refresh.)
    Думаю как теперь сделать refresh не на конкретную страницу, а на возврат к предыдущей, на шаг назад, туда откуда заполняли форму, так как форма не для одной странички. Буду благодарен совету.)
    Спасибо!

    Ответить
    • Дмитрий Жилин:

      Когда делал форму не смог придумать как реализовать такое, моих познаний не хватило. Надо искать где-то по форумам.

      Ответить
  86. Тёма:

    Испробовал все способы, письма приходят в виде

    п?п?я? п?я?п©я?п?п?п?я?п?п?я?: п?п?п?п?п? п?п?п?п?я?я?п?п?п?я?п? п?п?я?п?я?:
    п?п?п?п?я?п?п? п?я?п©я?п?п?п?я?п?п?я?: п?п?п?я? п?я?п©я?п?п?п?я?п?п?я?:

    Ответить
  87. Максим:

    Вроде бы все хорошо ни каких ошибок но письма не приходят,в чем может быть ошибка?

    Ответить
    • Дмитрий Жилин:

      Варианта 2:
      – хостинг не дает выполнять отправку писем (функция mail);
      – почтовый сервис не пропускает входящие
      По первому пункту – обращайтесь в поддержку хостинг компании, по второму – попробуйте использовать разные почтовые сервисы.

      Ответить
  88. Павел:

    Не приходят на почту письма, почему?

    Ответить
  89. Павел:

    Все нормально, разобрался.

    Ответить
  90. Евгений:

    Добрый день! Форма отличная, спасибо!
    Но есть проблемы:
    1. Письма не приходят на ящики mail.ru
    Написал в поддержку хостинга, они ответили что “Письмо не принял mail.ru, ответ Вы можете прочитать ниже:
    Jun 5 08:32:52 bmx0 [38521]: 1b9Qg5-0009zh-Ue ** [email protected] R=dnslookup T=remote_smtp: SMTP error from remote mail server after end of data: host mxs.mail.ru [217.69.139.150]: 550 5.7.1 This message was not accepted due to domain owner DMARC policy (RFC 7489)”

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

    Тема: Сообщение с сайта
    От: [email protected]
    Дата: Вск, 5 Июнь 2016 10:48
    Кому: [email protected]
    Срочность: Обычное
    Настройка: | Скачать | Исходный текст

    ????????? ? ????? podgol.com.

    ??? ???????????: ??????????????
    ??????????? ????? ???????????: [email protected]
    ??????? ???????????: +7-935-6578000
    ????? ?????????:
    ????????????!

    Подскажите пожалуйста как решить эти вопросы!

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  91. Андрей:

    Форма работает отлично!
    Только если все слова набирать латинницей.
    А если кириллицей, то получается чушь полная.

    Вот:
    Телефон отправителя: 907360734067`0476`45
    Текст сообщения:
    Хочу на семинар

    А если форму закачать на чистый домен, то все работает, а ни на одном сайте – нет!

    И ни один совет, ни один форум, ни один скрипт не помогает, хоть ты тресни!
    Что делать?

    Ответить
  92. Андрей:

    оказалось фигня. нужна простая переконвертация кодировки переменных:

    $pn = iconv (‘utf-8’, ‘windows-1251’, $pn);
    $pname = iconv (‘utf-8’, ‘windows-1251’, $pname);
    $action = iconv (‘utf-8’, ‘windows-1251’, $action);

    Вопрос отпадает.

    Ответить
    • Дмитрий Жилин:

      Благодарю, что отписались. Я про такое не знал, кому-то пригодится.

      Ответить
  93. Алексей:

    Огромное спасибо за форму, все работает как часы, если разобраться с кодировками))
    Я добавил Вашу форму в модульное окно на сайте, и хотелось бы узнать, что нужно редактировать в php-коде формы чтобы во время отправки сообщения не осуществлялся переход на страницу “Письмо отправлено, через 5 секунд вы вернетесь на сайт XXX'”?
    Можно ли как-нибудь сделать так, чтобы статус отправки сообщения отображался в том же модульном окне, без перенаправления на другую страницу?
    Заранее спасибо!

    Ответить
    • Дмитрий Жилин:

      вместо строк с 29 по 35 оставить только mail($address, $sub, $mes, $from)), тогда переадресации и сообщений не будет

      Ответить
      • Алексей:

        Все сделал как Вы написали, но теперь вместо отправки сообщения выдает ошибку “сайт пока не может обработать этот запрос”

        Ответить
  94. Алексей:

    Спасибо за статью! Всё очень просто и доходчиво. Как только настроил правильно окружение своего сервера, форма сразу запустилась. Только с sendmail и чёртовым TLS возился пару дней, будь неладны эти mail.ru и прочие…

    Ответить
  95. Иван:

    Одна только маленькая добавочка: Я удалил из запроса строки с e-mail и адресом сайта – они мне не нужны. Актуально – номер телефона. Только проверка по идентификатору “tel” не работает – в строку можно забить что угодно и письмо отправляется – защиты от невписывания номера телефона, к сожалению, нет. Есть другие решения

    Ответить
  96. Юлия:

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

    Ответить
  97. Андрей:

    А как сделать форму, чтобы в полях были:
    1. выбор по списку с несколькими вариантами
    2. выбор да или нет
    3. выбор одного из нескольких вариантов

    Ответить
    • Дмитрий Жилин:

      У form есть много возможностей, все их описать в рамках статьи нереально. В частности select и option позволяют в качестве полей устанавливать выпадающий список, checkbox – элементы для выбора. Есть и другие, но думаю этих двух вам хватит, как их правильно настраивать можете посмотреть, например, здесь – ab-w.net/HTML/html_forms.php

      Ответить
  98. Евгения:

    Здравствуйте!
    Прежде всего большое спасибо за форму, все отлично работает!
    Но у меня есть вопрос, а можно ли сделать так, чтобы обработчик отправлял два письма?
    Вот с этим вожусь, но пока не получается, знаний маловато…
    Мне нужно сделать так, чтобы после заполнения формы одно письмо отправлялось, как у вас в примере, а второе письмо уходило на почту того, что форму заполнял, что-то вроде автоответчика поставить. Можете помочь?

    Ответить
  99. Евгения:

    Разобралась сама)
    Все получилось! Еще раз большое спасибо за форму!

    Ответить
    • Татьяна:

      Евгения, здравствуйте.

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

      Ответить
  100. Алексей:

    Хорошая форма, один вопрос, почему-то не работает перенаправление на сайт после отправки какие могут быть причины

    Ответить
  101. Дмитрий:

    Добрый день! Долго искал простое и подходящее решение для установки формы обратной связи на свой сайт. Ваша – понравилась, но после отправки сообщения почему-то выпадает 404 ошибка с сообщением о том, что страница contact-form.php не найдена, хотя и она лежит в той же папке, что и страница, в которую вложена форма, и перенаправление после нажатия на кнопку “отправить” должно идти на главную страницу.
    Подскажите пожалуйста, в чем может быть проблема? Спасибо!

    Ответить
  102. Дмитрий:

    C 404 ошибкой разобрался – по-разному файлы назвал. Но зато теперь вылазят две другие ошибки:
    во-первых, сообщения не отправляются, и я никак не могу найти ошибку в коде, если кто увидит, подскажите пожалуйста;
    и второе – когда выводится сообщение пользователю об отправке или неотправке письма – сообщение не выводится кирилицей, а “левыми символами” – что здесь может быть?

    Ответить
    • Дмитрий Жилин:

      Единственная причина не отправки писем, с которой я сталкивался – запрет хостером функции mail (при условии, что ошибок в коде нет) – спросите у них на этот счет.
      По иероглифам вместо кириллицы – много обсуждений в комментариях выше – почитайте, скорее всего ваша проблема уже была решена.

      Ответить
    • Илья:

      У меня та же проблема была! Блин я забыл что на днях файл contact-form.php переименовал на contact_form.php то есть дефис – на _ поменял и забыл)

      Ответить
  103. Дмитрий:

    Доброй ночи. Запрета не было(проверял созданием тестового php файла с самой простой функцией отправки писма – все отправлялось). Оказалось, что письма шли просто оставались на хосте с ошибкой “Mail failure – malformed recipient address”. Проблемму решил создав на хосте новый адресс, с которого сделал перенаправление уже на нужный мне(первоначальный), а в контакт-форм указал как раз новосозданный адрес на хосте.
    Но вот проблема с вывдом сообщений об отправке/неотправке письма остались – кирилица=иероглифы, латиница – все норм, и это при том, что в самом письме все приходит идиально: и тело и отправитель – на каком бы языке форма не замолняламь…
    кодировки везде одинаковые…

    Ответить
  104. Антон:

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

    Ответить
  105. bars57orel:

    Добрый день Читатели Блога, и те кто ищет форму обратной связи. Работаю я с системой DLE и хостингом hostiq^com^ua(вместо ^ ставим точку), сам переехал к ним от рег ру, по функционалу мне этот хостинг очень нравится, но суть моего поста не об этом.
    У DLE есть стандартная форма обратки. НО…
    Столкнулся с такой проблемой. (месяца 3-4 назад) конечный емайл на которые приходили письма был от системы Яндекс, заметил баг что перестало приходить половину писем! Меняю емайл, толку ни какого, делаю емайл-домен на хостинге, опять не приходят письма от mail.ru и кривых емайлов… Меняю хостинг (потому что тех под сома не понемала в чем дело, показывала логи и ошибки и говорила что у нас всё исправно. Но ведь и в правду на хостинге всё исправно было! И решил вс равно проверить весь сайт на другом хостинге). Сменив хостинг, заливаю весь сайт, сайт становится на ура всё отлично! Настало время тестов, и опять та же лажа! Меняю форму обратной связи на эту что в верху автор прописал, и опять тот же баг!!!

    Начал искать пути решения этого трабла! Так как в программирование не очень селен, а за помощью обращаться не люблю, ведь тогда попадёт весь интерес решения задачки, перешурстил весь Гугл и Яндекс! Толи мои ключевые запросы были туповатые, да я и если честно не мог правильно сформулировать запрос XD)))

    Но в одну прекрасную ночь промелькнула мысь, а что если отправлять письма с одного и того же мыла, на другой постоянный?

    То есть есть сайт (я занимаюсь распространением косметики) к примеру gid-avon.ru (это моя творческая студия в ней и ведутся все разработки, а потом переносятся на основной домен)
    И создаем к примеру два емайла Получатель [email protected] и отправитель [email protected]

    Ответить
  106. bars57orel:

    Создаем форму обратной связи с дополнительными полями ЕМАЙЛ! (куда будет вписываться емайл клиента, а емайл отправитля [email protected] будет равен $email смотрим в коде)
    Тут указаны мои дополнительные поля, кому что не понравится просто тупо удалите их из php и html разобраться все очень просто описывать этого не буду.

    /* Задаем переменные */
    $name = htmlspecialchars($_POST["name"],ENT_COMPAT, ‘cp1251’); /* Фамилия Имя Отчество: */
    $f1 = htmlspecialchars($_POST["f1"]); /* Ваш E-Mail: (емайл клиента!!!!) */
    $f2 = htmlspecialchars($_POST["f2"],ENT_COMPAT, ‘cp1251’); /* Почтовый индекс: */
    $f3 = htmlspecialchars($_POST["f3"],ENT_COMPAT, ‘cp1251’); /* Дата рождения в формате ДД/ММ/ГГГГ */
    $f4 = htmlspecialchars($_POST["f4"],ENT_COMPAT, ‘cp1251’); /* Серия и номер паспорта */
    $f5 = htmlspecialchars($_POST["f5"],ENT_COMPAT, ‘cp1251’); /* Код подразделения */
    $f6 = htmlspecialchars($_POST["f6"],ENT_COMPAT, ‘cp1251’); /* Дата Выдачи (дд/мм/гггг) */
    $f7 = htmlspecialchars($_POST["f7"],ENT_COMPAT, ‘cp1251’); /* Кем выдан */
    $f8 = htmlspecialchars($_POST["f8"],ENT_COMPAT, ‘cp1251’); /* Адрес Проживания (обл, город, улица, дом, кв) */
    $f9 = htmlspecialchars($_POST["f9"],ENT_COMPAT, ‘cp1251’); /* Адрес Регистрации (обл, город, улица, дом, кв) */
    $f10 = htmlspecialchars($_POST["f10"],ENT_COMPAT, ‘cp1251’); /* Были ли Вы раньше уже Представителем Avon? */
    $tel = htmlspecialchars($_POST["tel"]); /* Номер вашего телефона */
    $bezspama = htmlspecialchars($_POST["bezspama"]); /* АНТИ СПАМ */

    /* Ваш адрес и тема сообщения */
    $address = "[email protected]"; /* Ваш E-Mail: (емайл получателя!!!) */
    $sub = $f1; /* теме сообщения присваеваем сам код емайла клиента */
    $email = "[email protected]"; /* а тут мы показываем что наш емайл будет являться отправителем */

    Ответить
  107. bars57orel:

    И ёщё, косяк ридиректа не в ХОСТИНГЕ!!! А в том что у вас кодировка файлов не совпадает!!!! Именно из за этого и не работает ридирект! В чем был у меня косяк.
    DLE кодировка win 1251
    Я создаю статическую страницу и кладу туда нужный мне код хтмл вызывающий форму! Но, так как движок создает страницу с win1251 то кодировка не совпадает с php! и вследствие этого не срабатывает переброс на нужную страницу! Решение, если мы хотим что бы форма вписалась в дизайн, не то делаем так переходим на ту страницу где мы хотим её повесить, нажимаем Ctrl+U и копируем весь исходник страницы в файл с расширением .html мета тег с кодировкой удаляем и вписываем utf8 И на всякий случай прогоняем через кодировку utf-8 без BOM, стираем ненужный контент и вставляем нашу форму! ВСЁ!

    Ответить
  108. bars57orel:

    И ещё из этих исходников я выкинул мне ненужное поле $message если что скопируйте всё что нужно из исходников автора блога!

    Так, автор блога я дарю тебе новую ветку для размышление, так как описанное мною выше можно переписать и написать очень качественную статью. Суть в том этого урока, что больше ни когда ни одного письма не затеряется!!! Что очень важно в моей работе (одна такая заявка не пришедшая ко мне несёт убыток от 500 до 1000 рублей!!! )

    Почему я посчитал нужным выложить это здесь? Да потому что я взял исходники автора)))

    Ниже найдёте ссылку на архив

    Ответить
  109. bars57orel:

    https://yadi.sk/d/JUJdRYB9tDnza

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

    ВСЕМ ДОБРА)

    Ответить
  110. bars57orel:

    Простите о печатался в php вам нужно указать вместо
    $sub = $f2; /* теме сообщения присваеваем сам код емайла клиента */

    Вот это
    $sub = $f1; /* теме сообщения присваеваем сам код емайла клиента */

    так как $f1 это емайл
    а $f2 это индекс поля

    В общем ни когда не бойтесь эксперементировать!

    Ответить
  111. Алексей:

    Стоит задача запустить данную форму на сайте на бесплатном хостинге. Функция mail() на таких хостингах, как показывает практика, или не работает, или работает через раз. А нужен стабильный результат. Нашёл обход – использовал данный скрипт в сочетании с библиотекой github.com/PHPMailer/PHPMailer/ на бесплатном хостинге, где работает ВордПресс.
    Работало до последнего времени. Однако: 1. как выяснилось, почему-то работает с Хромом, но не работает с IE. 2. и в Хроме тоже перестало работать. Дмитрий, прошу помочь. Готов выслать исходники для анализа.

    Ответить
    • Дмитрий Жилин:

      Начните с запроса в тех поддержку по поводу работоспособности функции.
      Работает ли форма в том виде в каком выложена у меня без ваших изменений?

      Ответить
  112. Алексей:

    …все возможные фокусы с кодировками перепробовал. Все файлы в UTF-8 без BOM, проставлено в HTML и в PHP в header() на тему кодировки также танцы с бубном выполнены. Устал танцевать. К хостеру ещё не обращался, вдруг он чего-то там с глобальными настройками кодировок намудрил. Если Вы, Дмитрий, рассудите, что всё у меня по уму, буду с хостером вместе танцевать.

    Ответить
  113. Денис:

    Дмитрий, добрый день. Столкнулся с огромной проблемой. У меня html сайт. Установил Вашу форму (за нее отдельное спасибо), но письма приходят с вопросительными знаками. То есть, кроме почты отправителя (которая указана латиницей) я больше ничего не вижу кроме каракуль.
    Самое интересное то, что я пробовал делать все, что указано в этой статье. Сайт у меня на UTF-8, но все равно перепробовал все. Результат нулевой.
    Кстати, прошлая форма связи имела такие же проблемы.
    P.S. Письма отправленные через форму могу прочитать только со штатных почтовых клиентов продукции Apple (то есть, если я открою пришедшее мне письмо с Айфона или Айпода, то я четко вижу все содержимое, а если с компьютера или андроида, то одни вопросительные знаки).
    Прошу помочь мне, если это возможно. Моя почта [email protected]
    Заранее Вам благодарен

    Ответить
    • Дмитрий Жилин:

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

      Ответить
      • Денис:

        Дмитрий. Для начала я проверил в какой кодировке мой сайт. Сайт в UTF-8
        1. Все равно попробовал добавить ENT_COMPAT, ‘cp1251’);
        Получалось примерно следующее:
        $name = htmlspecialchars($_POST[“name”], ENT_COMPAT, ‘cp1251’);
        $email = htmlspecialchars($_POST[“email”]);
        $tel = htmlspecialchars($_POST[“tel”]);
        $website = htmlspecialchars($_POST[“website”]);
        $message = htmlspecialchars($_POST[“message”], ENT_COMPAT, ‘cp1251’);
        $bezspama = htmlspecialchars($_POST[“bezspama”]);
        Это также не помогло и я убрал эту функцию, потому как с ней и без нее результат один и тот же.
        2. Через notepad++ преобразовывал в UTF-8 без BOOM и с другими вариациями. Все равно результата никакого.

        Ответить
        • Дмитрий Жилин:

          В utf-8 сохранены все файлы и эта же кодировка указана в метатеге страницы? Может быть какой-то из файлов не в ней?
          А если установить кодировку 1251 на сам сайт и на скрипт, что выходит?

  114. Михаил:

    Дмитрий, доброе время суток!
    Спасибо большое за форму, и достаточно все понятно и подробно расписано.
    Но я не могу понять, почему выскакивает предупреждение в строке, если из вашего примера, то в 30 строке, все сообщения доходит, все в правильной кодировке, но нет обратного перенаправления на установленную страницу. Помогите, направьте куда надо.
    Пробовал на разных хостингах. Ошибка такая:
    wpesshop.ru.host1491574.serv63.hostland.pro/forms/ – на этом ресурсе.
    Warning: Cannot modify header information – headers already sent by (output started at /home/host1491574/wpesshop.ru/htdocs/www/forms/contact-form.php:1) in /home/host1491574/wpesshop.ru/htdocs/www/forms/contact-form.php on line 44
    Письмо успешно отправлено, сейчас вы вернетесь на сайт yandex.ru

    Ответить
  115. Михаил:

    Дмитрий, проблема решилась таким образом.
    в 28 строке убрал в конце строки лишний пробел, возможно он не влияет не на что, и все три файла заново преобразовал в UTF-8 без BOM. и все заработало

    Ответить
    • Дмитрий Жилин:

      Да, пробел там ни к чему, правда, у меня он ни на что не влиял.

      Ответить
  116. Алексей:

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

    Ответить
    • Дмитрий Жилин:

      Open Server, насколько я знаю, предназначен для локальной работы сайта, не уверен, что он функцию mail выполняет. Я им не пользуюсь, не могу на 100% ответить.

      Ответить
      • Алексей:

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

        Ответить
        • Дмитрий Жилин:

          Если в настройках хостинга нет запрета, то все работать должно

  117. Роман:

    А как изменить фон для сообщения :
    Ваше письмо отправлено, через 5 секунд вы вернетесь на сайт?
    Спасибо

    Ответить
    • Дмитрий Жилин:

      этот текст может быть заменен любым HTML кодом с тегами задающими нужный формат

      Ответить
  118. Александр:

    Здравствуйте! скрипт работает на ура! письма отправляет, правда они в спам падают, но это поправимо. я уткнулся в проблему со стилями. открываю локально демо-индекс, всё правильно, заливаю на хостинг этот файл (без изменений кода) добавил только цвет фона, поля рассыпаются по странице, вот так: такси-горки10.рф/feedback.html. понимаю что причина банальна, но в 5 часов утра мой мозг отказывается искать проблему. если не сложно, ткните носом, где я накосячил! спасибо!

    Ответить
    • Дмитрий Жилин:

      В стилях для объекта .contact_form label удалите свойство float: left;, без него ровно форма встает.

      Ответить
  119. Александр:

    спасибо! встало как надо!

    Ответить
  120. Роман:

    Как в Вашей форме вообще убрать перенаправление на другую страницу.
    Т.к я хочу сделать всплывающее окно

    Ответить
  121. Григорий:

    Notice: Use of undefined constant «name» – assumed ‘«name»’ in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 6 Notice: Undefined index: «name» in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 6 Notice: Use of undefined constant ‘cp1251’ – assumed ‘‘cp1251’’ in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 6 Warning: htmlspecialchars(): charset `‘cp1251’’ not supported, assuming iso-8859-1 in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 6 Notice: Use of undefined constant «message» – assumed ‘«message»’ in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 9 Notice: Undefined index: «message» in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 9 Notice: Use of undefined constant ‘cp1251’ – assumed ‘‘cp1251’’ in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 9 Warning: htmlspecialchars(): charset `‘cp1251’’ not supported, assuming iso-8859-1 in /var/www/cl68580/data/www/centrofon.ru/contact-form.php on line 9 Письмо не отправлено, через 5 секунд вы вернетесь на страницу

    Выдает такую ошибку, до этого постоянно было ” ошибка в такой-то строчке contact-form”
    Что делать?

    Ответить
    • Дмитрий Жилин:

      Что-то у вас глючит в присвоении переменных, ругается на кодировку – задайте вопрос в тех поддержку хостинга, подозреваю, что это их косяки.

      Ответить
  122. Антон:

    Большое спасибо!

    Ответить
  123. Михаил:

    Доброе время суток!
    Я обратился в тех поддержку хостинга reg.ru и вот что они мне ответили/
    —-
    Судя по заголовкам, данная проблема возникает из-за того, что в проблемном сообщении отсутствует заголовок вида:

    Content-type:text/plain; charset = utf-8

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

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

    $from.= “Content-type: text/plain; charset=\”utf-8\” \r\n”;

    данную стоку я вставил между 28 и 29 строкой (из данного примера), в таком виде как она есть, и проблема решилась, с кодировкой се стало хорошо, попробуйте у себя у кого такая проблема, и отпишитесь что у вас получилось

    Ответить
    • Дмитрий Жилин:

      Благодарю, что отписались. Я с такой проблемой не сталкивался, кому-то наверняка поможет решение.

      Ответить
    • Олег:

      Спасибо большое, помогло!

      Ответить
  124. Илья:

    Здравствуйте!
    Форма замечательная, понятна и легко редактируется. Использую под быстрый заказ в 1 клик na-yarmarku.ru/plitka-dlya-kuhni-ispaniya-monopole-antique.shtml , давно искал и вот вроде нашел большое человеческое спасибо!!!
    Единственное, с чем запарка, ровно как и у многих – абракадабра в почте.
    Если все оставлять как есть – все что обработано htmlspecialchars приходит нечитаемо, (типа васек трубачев), остальное в тексте письма – нормально. Добавление ” , ENT_COMPAT, ‘cp1251’ ” ситуации не меняет. Перекодировка contact-form.php, index.html, styles.css в utf-8 с ВОМ или без него дает “результат”: сообщение в форме, что письмо отправлено – нечитаемо, имя отправителя и заголовок письма – нечитаемо, текст письма – нормально. Добавление различных кодов из обсуждения – результат “0”, а так хочется довести до ума)

    Ответить
  125. Илья:

    Здравствуйте!
    Пытался убрать “абракадабру” всеми перечисленными в обсуждении способам, но получается что либо в тексте письма кириллица нечитабельна, либо в заголовке и “письмо отправлено” в форме связи каляками написано. Декодер в каждом случае пишет CP1251 ? UTF-8. Хостинг сказал, что проблемы в коде, но помочь не может.

    Ответить
  126. Евгений:

    Спасибо! Все работает, пришлось немного помудрить так как самописная CMS’ка) Да и стили даже не пришлось использовать, как раз под дизайн подстроился.

    Ответить
  127. Илья:

    Спасибо. Всё грамотно и понятно объяснил.

    Ответить
  128. Александр:

    У меня почему-то приходят все пустые поля, одни названия, значений нет.

    Когда я по методу одного из комментаторов присвоил теме письма значение адреса отправителя — письма стали приходить и без темы.
    То есть почему-то не передаются данные в обработчик.
    В чём грабли, подскажите, пожалуйста?

    Ответить
  129. Леха:

    Я попробовал но у меня не вышло((( Решил, что не судьба и стал юзать конструктор форм testograf.ru/ru/blog/forma-obratnoj-svyazi.html Там можно создать любое количество форм, контактных, форм обратной связи или форм заказа для сайта. Короче все, что угодно. Добавляйте любые поля, включая загрузку файла.

    Ответить
  130. Сергей:

    Добрый вечер!

    <?php

    /* Задаем переменные */
    $name = htmlspecialchars($_POST[«name»], ENT_COMPAT, ‘cp1251’);
    $email = htmlspecialchars($_POST["email"]);
    $tel = htmlspecialchars($_POST["tel"]);
    $website = htmlspecialchars($_POST["website"]);
    $message = htmlspecialchars($_POST[«message»], ENT_COMPAT, ‘cp1251’);
    $bezspama = htmlspecialchars($_POST["bezspama"]);

    /* Ваш адрес и тема сообщения */
    $address = "[email protected]";
    $sub = "Сообщение с сайта ddumsk.ru";

    /* Формат письма */
    $mes = "Сообщение с сайта ddumsk.ru.n
    Имя отправителя: $name
    Электронный адрес отправителя: $email
    Телефон отправителя: $tel
    Сайт отправителя: $website
    Текст сообщения:
    $message";

    if (empty($bezspama)) /* Оценка поля bezspama – должно быть пустым*/
    {
    /* Отправляем сообщение, используя mail() функцию */
    $from = "From: $name rn Reply-To: $email rn”;
    if (mail($address, $sub, $mes, $from)) {
    header(‘Refresh: 5; URL=http://ddumsk.ru/partner.htm’);
    echo ‘Письмо отправлено, через 5 секунд вы вернетесь на сайт http://ddumsk.ru‘;}
    else {
    header(‘Refresh: 5; URL=http://ddumsk.ru’);
    echo ‘Письмо не отправлено, через 5 секунд вы вернетесь на страницу http://ddumsk.ru‘;}
    }
    exit; /* Выход без сообщения, если поле bezspama чем-то заполнено */
    ?>

    На ответной странице всё отображается корректно
    На почту приходит всё без крокозябров, но имя и тескт сообщения не отображается.
    Перепробовал уже всё, что мог :(((
    Буду признателен за помощь!

    Ответить
    • Дмитрий Жилин:

      У вас поля для имени и текста единственные заданы в cp1251, остальные без этого – копайте в данном направлении.

      Ответить
  131. Александр:

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

    Ответить
    • Александр:

      В папке спам писем нет

      Ответить
      • Александр:

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

        Ответить
        • Дмитрий Жилин:

          Стоит задать вопрос хостеру, почему не отправляются письма. Сам скрипт на yandex и mail почту письма шлет нормально.

        • Александр:

          не совсем правильно написал, письма отправляются на все ящики, но если только отправитель указал свое мыло в зоне com, если в графе email стоит мыло в зоне ru, письма не приходят. Это тоже настройки хостингах? На двух разных хостах тоже самое.

        • bars57orel:

          Это было замечено ещё на движке Дле. У меня был сайт где форма обратной связи была типа “корзины” ну или “Стол заказов”. Ну и как то заметил что стало мало заказов приходить на почту… Писал хостерам – те писали мы не виноваты в этом) Хостинг был Рег ру, переехал на другой хостинг, проблема осталась… После всех попыток понять в чем проблема у меня сдали нервы. И воспользовался таким способом
          Создаем переменную
          $f1 = htmlspecialchars($_POST[“f1”],ENT_COMPAT, “cp1251”); /* Ваш E-Mail: */ в этот блок и будет вводиться емайл вашего клиента.

          $address = “[email protected]”; (конечный емайл)

          $email = “[email protected]”; (отправочный емайл)

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

  132. Александр:

    Вопрос решен следующим образом.

    В строчке
    $from = “From: $name \r\n Reply-To: $email \r\n”;

    Удалил From: $name \r\n
    Оставил только $from = “Reply-To: $email \r\n”;

    Письма стали приходить.

    Комментарий хостера:
    “В заголовок From необходимо вписывать всегда почтовый ящик Вашего сайта, а вот в заголовки Return-Path или Reply-to необходимо указывать ящик, который указал пользователь. Если вписывать в заголовок From ящик пользователя, то такое письмо будет являться поддельным и блокироваться почтовым сервисом.”

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  133. Александр:

    Прошу прощения написал не точно
    В строчке
    $from = “From: $name \r\n Reply-To: $email \r\n”;

    Удалил From: $name \r\n

    Оставил только
    $from = “Reply-To: $email \r\n”;

    Ответить
  134. Александр:

    Комментарии здесь режут $email после From

    Ответить
  135. Сергей:

    Добрый вечер.
    Сайт ddumsk.ru и форма PHP в UTF-8.
    Всё отлично работает! Только не приходит имя и текст отправителя :(((
    В чём может быть причина?

    Ответить
  136. Роман:

    Здравствуйте, форма работает, отправляет.
    Но он не пишет кто отправил, его сотовый, его почту.(Сайт на хостинге, сделано все точь в точь как у вас.)

    Ответить
  137. Татьяна:

    Добрый день!

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

    Ответить
    • Дмитрий Жилин:

      После команды mail($address, $sub, $mes, $from)), ставим точку с запятой (;) и пишем еще одну функцию mail, только с другими переменными:
      вместо $address – $email
      вместо $from – $address
      $sub – это тема сообщения, ее можно оставить без изменений, а $mes – это текст сообщения – вместо нее по аналогии прописать переменную типа $mes1 с нужным текстом письма

      Ответить
      • Татьяна:

        Дмитрий, спасибо за ответ.
        Вопрос синтаксиса: выскакивает ошибка:
        Parse error: syntax error, unexpected ‘{‘ (то есть самая первая фигурная скобка)

        if (mail($address, $sub, $mes, $from)); (mail($email, $address, $mes)){
        header(‘Refresh: 0; URL=/success’);
        }
        else {

        header(‘Refresh: 0; URL=/badrequest/’);}
        }
        exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */
        ?>

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

        Ответить
        • Дмитрий Жилин:

          пробел поставьте перед ней

        • Татьяна:

          К сожалению, пробел не помог.

        • Дмитрий Жилин:

          Я не внимательно посмотрел, делаем функцию вот так (вместо && можно попробовать and – это логические “И” в php – нам надо выполнение обоих условий):
          if (mail($address, $sub, $mes, $from) && mail($email, $address, $mes)) {

      • Дмитрий Жилин:

        еще у вас во второй функции mail 3 переменных, вы пропустили $sub

        Ответить
  138. Славун:

    Спасибо автору, всё работает.

    Ответить
  139. Сергей:

    Добрый день Дмитрий!
    Форма хорошая, установил на сайт во всплывающем окне. Жаль при отправке выдаёт 404.
    В чём может быть проблема? Не нужно ли, помимо html, css и php ещё и подключение к js?

    Ответить
    • Дмитрий Жилин:

      А зачем там js, если она на php?
      Какой адрес страницы у 404 ошибки?

      Ответить
  140. Сергей:

    Просто выдаёт путь до файла contact-form.php и ошибка 404…
    посмотрите:
    goszakaz24.ru/katalog-uslug/stroitelstvo-zdanij-i-sooruzhenij/
    кнопка “заказать услугу” вверху.

    Ответить
    • Дмитрий Жилин:

      Вы убрали из скрипта переадресацию на заданную страницу? Поэтому после отправки браузер остается в файле contact-form.php. Либо верните эту команду, либо надо городить огород типа как в этой теме обсуждается – cyberforum.ru/php-beginners/thread1407509.html

      Ответить
      • Сергей:

        В том то и дело, что ничего из Вашего скрипта не убирал (за исключением поля “сайт”), а в переадресации только поменял адрес Вашего сайта по умолчанию, на свой.
        Но тем не менее, отправка письма тоже не происходит.

        Ответить
        • Дмитрий Жилин:

          А, так вы не написали, что отправки письма нет. Значит у вас скрипт не выполняется совсем. Задайте вопрос хостеру – может быть у них нет поддержки какой-либо функции.

        • Сергей:

          Добрый день, Дмитрий. Спасибо за ответ. Но так как в нём нет функции ответа, я пишу новое сообщение.
          Функция mail() на хостинге работает. В чём может быть причина не отправки письма?

        • Дмитрий Жилин:

          А зачем вам нужно несколько разных способов выводить форму? У вас же стоит плагин contact form7, почему через него все не выведете?

  141. Владислав:

    Добрый день.
    Такая ошибочка:

    Notice: Undefined variable: email in /var/www/altastroynn/data/www/altastroy-nn.ru/templates/sj_maxshop/contact-form.php on line 28

    Помогите решить пожалуйста

    Ответить
    • Дмитрий Жилин:

      Не задана переменная email, проверяйте ее, что-то не так сделали с этой переменной либо в php, либо в html коде формы

      Ответить
  142. Сергей:

    плагин contact form7 установлен с перезагрузкой страницы. Переадресация на другую страницу – mail.php. После отправки сообщения, появляется – “Ваше сообщение успешно отправлено”. Задание у меня сделать форму во всплывающем окне.
    Так вот вставляя шорт-код от contact form7, у меня при отправке сообщения информацию не выводит, а просто окно пропадает. А при повторном нажатии на кнопку – открывается окно уже с сообщением об отправке, которое пропадает только после перехода на другую страницу. Не могу понять в чём загвоздка. Ну и в принципе хотел разобраться в работе данного узла без применения плагина.

    Ответить
    • Дмитрий Жилин:

      Как вариант, проверять с какого места php код не выполняется. Я бы попробовал убрать функцию проверки на спам и отправки сообщения, а вывел бы сначала просто список заданных переменных – этим проверим передаются ил данные из формы. Дальше заново подключать удаленные функции.

      Ответить
      • Сергей:

        Дмитрий, вот смотрите какая оказия. Убрал из php кода – action=”contact-form.php”, – всё то же самое, переходит на 404: Страница не найдена. Но, тестовое письмо на почту доставлено. Есть у Вас какие соображения на этот счёт?

        Ответить
        • Дмитрий Жилин:

          action вы убрали не из php кода, а из html кода формы. Может быть у вас разные формы конфликтуют между собой (contact form 7 и эта)?

  143. Сергей:

    Убрал из html конечно. Но непонятно, как в таком случае система находит php обработчик? Ведь в html коде именно action=»contact-form.php» – указывает на него. Отправка письма идёт.

    Ответить
    • Сергей:

      Дмитрий, я деактивировал contact form 7, и письма перестали отправляться. Значит они отправлялись обработчиком contact form 7.
      А новый обработчик так и не видит. Я вернул action=»contact-form.php», и всё равно ничего не меняется. 404 и отправки нет.

      Ответить
  144. Сергей:

    Предположил, что проблема в модальном окне. Установил форму на свободное поле, без модалки, – всё те же проблемы.

    Ответить
  145. Сергей:

    Дмитрий, несмотря на то, что файл contact-form.php у меня находится в той же папке, я прописал путь до него. Это решило проблему. Начало появляться сообщение об отправленном письме и “через 5 мин вы вернётесь….”.
    Но сообщение на почту не приходит.

    Ответить
    • Дмитрий Жилин:

      Хорошо, часть проблемы устранили. Конфликт форм можно убрать переименованием php файла – задайте ему любое произвольное имя и в action пропишите его – это чтобы абсолютный путь не надо было прописывать.
      Теперь насчет не прихода писем:
      1. Проверьте папку спам, если нет, то
      2. В конце статьи есть пункт “Частые проблемы” – там описано одно из наиболее распространенных решений, если не помогло, то
      3. В комментариях к статье вопрос с не приходом писем всплывал часто – почитайте, возможно у кого-то была аналогичная проблема, если не помогло, то будем думать дальше.

      Ответить
  146. Сергей:

    Я всё проверю, хотя это не спам – точно.
    Дмитрий, а есть способ сообщение об отправке получить в том же всплывающем окне, что и форма?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  147. Сергей:

    Упростил значение $from и письма начали приходить. Спасибо Дмитрий! Теперь буду искать решение по выводу сообщения.

    Ответить
    • Дмитрий Жилин:

      Если мне попадется решение – выложу тут или ссылку вставлю.

      Ответить
  148. Евгений:

    Большое спасибо!!!!!!

    Ответить
  149. Артем:

    Здравствуйте, подскажите форма на сайте выглядит коряво. Строчку добавил. $название = htmlspecialchars($_POST[“название”], ENT_COMPAT, ‘cp1251’); нет изменений. Все файлы в одной папке лежат. Куда копать?

    Ответить
    • Дмитрий Жилин:

      Коряво в смысле дизайн съехал или буквы иероглифами? Форму используете как отдельный html файл или добавляете внутрь кода страницы?

      Ответить
  150. Дмитрий:

    Здравствуйте. Скажите пожалуйста, почему не происходит переход на обратную страницу? т.е. сообщение отправилось, новое окно “Письмо отправлено, через 5 секунд вы вернетесь на страницу naverx.ru/contact.html” Но, нет возврата? За ранее, спасибо.

    Ответить
    • Дмитрий Жилин:

      30 строку в скрипте пришлите посмотреть.

      Ответить
      • Дмитрий:

        Спасибо за скорый ответ))30 строка:

        header(‘Refresh: 5; URL=http://naverx.ru/contact.html’);

        Ответить
        • Дмитрий Жилин:

          Хм, думал может что-нибудь изменили при правке кода, но вроде все в порядке.
          Пока есть только одна мысль – спросить у хостера, может какие-то особенности для refresh у них есть, почему функция не выполняется.

      • Дмитрий:

        А можно на странице, там где “Сообщение отправлено, через 5 секунд вернетесь”, добавить кнопку “Вернуться обратно”?

        Ответить
      • Дмитрий:

        или для этого требуются серьезные знания? Я просто, только-только начал осваивать html, и чуть-чуть поглядываю на php.

        Ответить
        • Дмитрий Жилин:

          Вот посмотрите на описанный здесь вариант – phpfaq.ru/newbie/na_tanke#http, по идее после отправки должно возвращаться на прежнюю страницу. Пока не пробовал, можете сами протестить вариант. Если получится – не пропадайте и отпишитесь, я добавлю в статью.

      • Дмитрий:

        Спасибо за подсказку, но как-то для меня сложно решать подобного рода вопросы. А так, проблему решил методом добавления между 32 и 33 строкой в php файле. Хоть как-то))

        Ответить
      • Дмитрий:

        Да, странно, что я код не прописал. Приношу извинения. А код выглядит так: “” И благодаря данному коду, после странички “Спасибо” браузер возвращается обратно на страницу “контакты”.

        Ответить
        • Дмитрий Жилин:

          код в ответ автоматом не вставляется, надо вписать его в тег <code>код</code>

      • Дмитрий:

        У меня к вам вопрос, вы не подскажете, вот только что создал простенький сайт, выложил в “яндекс.вебмастер” , а там написано:”Данные скоро появятся”. Что делать дальше с этим сайтом? и когда сайт появится в поисковике яндекса? За ранее, спасибо.

        Ответить
        • Дмитрий Жилин:

          Как роботы Яндекса соберут по нему информацию, так и отобразятся данные. Сколько точно по времени это займет сказать не могу – зависит от сайта. Чаще всего меньше суток.

      • Дмитрий:

        Теперь понял)) <meta http-equiv="refresh" content="5;http://naverx.ru/contact.html";>

        Ответить
      • Дмитрий:

        Понял, спасибо за ответ по поводу сайта, буду ждать)

        Ответить
      • Дмитрий:

        Доброго времени суток! У меня теперь следующая проблема…письмо не доходит до адреса. Емайл адрес прописал, во время отправки пишет:”Письмо отправлено” и так же возвращает обратно.

        На счет переадрессации я понял, что это были проблемы с сервером, т.к. они мне прислали сегодня письмо о некоторых неполадках и их решили и поэтому сейчас работает от команды Refresh: 5; URL=http://naverx.ru (как и должно было быть). Только вот, до почты письма не доходят….

        Ответить
      • Дмитрий:

        И снова добрый день. Должен сказать, что сегодня почему-то почта заработала…не могу понять, почему так? Вчера не работала, а сегодня заработала, хотя я ничего для этого не делал…. С чем это может быть связанно? Что-то с сервером?

        Ответить
        • Дмитрий Жилин:

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

      • Дмитрий:

        Тогда значит, это наверное чудо :)) Классная форма, спасибо))

        Ответить
  151. Дмитрий:

    Благодарю, запрос отправил хостеру и буду ждать ответ.

    Ответить
  152. Алексей:

    “Сайт:

    pattern не работает. Что угодно можно написать в строке, все проглатывается и отправляется.

    Ответить
  153. Павел:

    Пишет такую ошибку
    Warning: Cannot modify header information – headers already sent by (output started at /var/www/u0218412/data/www/xn--24-7-43dfor1a2a0dwaj2a1n.xn--p1ai/contact-form.php:1) in /var/www/u0218412/data/www/xn--24-7-43dfor1a2a0dwaj2a1n.xn--p1ai/contact-form.php on line 28
    Письмо отправлено, через 5 секунд вы вернетесь на сайт КрафтСервис

    Ответить
  154. Игорь:

    Проблему с абройкадаброй в переадресовке можно решить иначе.
    В переадресовку можно вставить картинку с написанным текстом.
    Вот так:

    Ответить
  155. Александр:

    Дмитрий дай Бог тебе здоровья. Действительно рабочая форма, для меня как для новичка лучшего для HTML-сайта просто не найти. Есть только один вопрос. Мне надо чтоб при отправке либо страница не менялась, либо появлялся дубликат страницы где эта форма стоит.
    Короче чтоб было понятнее я хочу чтоб при отправке появлялось модальное окно, а не банальная страница с простяцким текстом. Скачал исходник окна от сюда:( ruseller.com/lessons.php?rub=2&id=1556) и ну ни как не получается объединить этих два произведения в одно.

    Ответить
  156. Александр:

    if (empty($bezspama)) /* Оценка поля bezspama – должно быть пустым*/
    {
    /* Отправляем сообщение, используя mail() функцию */
    $from = “Reply-To: $email rn”;
    if (mail($address, $sub, $mes, $from)) {
    header( “Location: http://www.uvasnachas.ru/#openModal” );}

    else {
    header( “Location: http://www.uvasnachas.ru/#openModal-2” );}
    }

    Вот тут я что-то запутался (((

    Ответить
    • Дмитрий Жилин:

      Тут не все так просто. Проблема вашей задумки в том, что выполнение php скрипта приводит к закрытию изначальной страницы и, есил не делать переадресацию, вы получите белый экран (пустую страницу). Как сделать то, что вам хочется простым путем я не знаю, а форма изначально делалась как очень простая.

      Ответить
  157. Александр:

    smartlanding.biz/forma-obratnoj-svyazi-v-modalnom-okne.html Вот тут я нашёл решение своей проблемы, но меня смущает довольно большое количество файлов, либо там ссылки на сайт прячутся либо вирусняк. Я бы с удовольствием воспользовался Вашей версией на основе ихнего исходника

    Ответить
    • Дмитрий Жилин:

      Там модальное окно сделано на javascript, который в моей форме не используется, по этой причине там и дополнительные файлы (собственно скрипты).

      Ответить
  158. Олег:

    На моем сайте уже были готовые формы связи нужно было их подключить и в этом мне очень помог именно Ваш php обработчик. 🙂
    Спасибо!

    Ответить
  159. Александр:

    Дмитрий – это наверное специальное имя для PHP-профессионалов. У меня другая форма (с модальным окном) тоже от Дмитрия только другого )) Дим подскажите пожалуйста что может быть причиной неработающей формы в модальном окне? Обращаюсь к Вам т.к. почему то думаю, что вы лучший из Дмитриев )

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  160. Александр:

    Вот то и интересно, что БЕЗ модального окна форма работает, это меня прям вымораживает, вчера до утра экспериментировал, но так ни чего и не добился ((

    Ответить
    • Дмитрий Жилин:

      Пути к файлам, которые обрабатывают форму относительные или абсолютные (полный url)? Если относительные, попробуйте заменить на полные.

      Ответить
  161. Игорь:

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

    Можете ли изменить почту в форме обратной связи на лендинге и цвет фона?
    И если да, то какая стоимость.

    Ответить
  162. Михаил:

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

    Ответить
    • Дмитрий Жилин:

      Оказывается, сафари не поддерживает данный атрибут. Вот тут есть вариант решения – stackoverflow.com/questions/23261301/required-attribute-not-work-in-safari-browser

      Ответить
      • Михаил:

        Супер! заработало. Я заменил в форме required на required = “true”. Затем после кода самой формы вставил скрипт:

        var form = document.getElementById(‘formID’); // form has to have ID:
        form.noValidate = true;
        form.addEventListener(‘submit’, function(event) { // listen for form submitting
        if (!event.target.checkValidity()) {
        event.preventDefault(); // dismiss the default functionality
        alert(‘Пожалуйста, заполните форму’); // error message
        }
        }, false);

        Спасибо огромное!

        Ответить
  163. Андрей:

    Здравствуйте Дмитрий! Установил Вашу форму. Проверил, отправив со своего же компьютера письмо, – пришло без проблем. Но от других пользователей не приходят письма. Сделал такую же запись: $from = “Reply-To: $email rn”; Также поставил свою почту. Кодировка: utf-8. Подскажите, пожалуйста, в чём ещё может быть причина и как можно проверить работу почты, и найти эту причину?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
      • Андрей:

        Тысячу извинений! Всё работает. Хотя перед тем, как к Вам обратиться, проверял с помощью знакомых и сообщений не получал. А сейчас сработало. Прям чудеса творятся. Благодарю за форму!

        Ответить
  164. Андрей:

    Поместил форму с обработчиком в папку conact своего сайта
    форма – conact/contact.php, переименовал с ndex.html
    обработчик – conact/contact-form.php
    Теперь, если вместо строки домен/conact/contact.php поставить домен/conact/contact-form.php и нажать enter, пустое письмо летит на почту. Подскажите, пожалуйста, как можно защититься от этого. я так понимаю – это для хакеров есть лазейка?

    Ответить
    • Дмитрий Жилин:

      Через этот файл нет возможности получить доступ к внутренним ресурсам сайта, так что для хакеров лазейки нет.

      Ответить
      • Андрей:

        Это радует, благодарю за помощь!

        Ответить
        • Андрей:

          Добавил: if(empty($_POST)) die; в самом верху обработчика, теперь, если кому-то вздумается побаловаться, пустое письмо, уже, не полетит на почту.

        • Дмитрий Жилин:

          Благодарю что поделились улучшением.

  165. дима:

    как жму отправить вот это лезет

    Warning: Cannot modify header information – headers already sent by (output started at Y:homeform.ruwwwcontact-form.php:1) in Y:homeform.ruwwwcontact-form.php on line 30
    Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX

    Ответить
  166. Андрей:

    Подскажите пожалуйста, не приходят письма на почту. В чем может быть проблема?
    <?php
    /* Здесь проверяется существование переменных */
    if (isset($_POST['name'])) {$name = $_POST['name'];}
    if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    if (isset($_POST['adress'])) {$adress = $_POST['adress'];}
    if (isset($_POST['email'])) {$email = $_POST['email'];}
    if (isset($_POST['chasi'])) {$chasi = $_POST['chasi'];}

    /* Сюда впишите свою эл. почту */
    $address = "тут моя почта на яндексе";

    /* А здесь прописывается текст сообщения, \n – перенос строки */
    $mes = "Тема: Заказ очков VR BOX. \nИмя: $name\nТелефон: $phone\nАдрес: $adress\nEmail: $email\nКомплект: $chasi";

    /* А эта функция как раз занимается отправкой письма на указанный вами email */
    $sub='Заказ'; //сабж
    $email='Заказ ‘; // от кого
    $send = mail ($address,$sub,$mes,”Content-type:text/plain; charset = utf-8\r\nFrom:$email”);

    ini_set(‘short_open_tag’, ‘On’);
    header(‘Refresh: 3; URL=index.html’);
    ?>

    С вами свяжутся

    body
    {

    background: #22BFF7 url(zakaz.jpg) top -70% center no-repeat;

    }

    setTimeout(‘location.replace(“/index.html”)’, 3000);
    /*Изменить текущий адрес страницы через 3 секунды (3000 миллисекунд)*/

    Ответить
    • Дмитрий Жилин:

      Вы уверены что тот участок, что указан у вас как функция отправки сообщения это делает?
      У вас там стоит только присвоение переменной $send.

      Ответить
  167. Андрей:

    Значит проблема все таки здесь? Нужно сменить, так понимаю? Не сильно шарю в php

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  168. ABL:

    Спасибо Вам от душенски!
    Благодарен Вам!

    Ответить
  169. Влад:

    Добрый день
    Прошу прощения за глупый вопрос, а где меняется цвет текста в полях для заполнения?
    У меня получилось белое на белом.. Нашел где поменять цвет фона поля, но где менять сам цвет текста, не нашел.
    Заранее благодарен.

    Ответить
    • Дмитрий Жилин:

      В файлах цвет подсказок не задан и использует тот, который есть по умолчанию на сайте. Чтобы изменить, надо добавить в css файле в блоке:
      .contact_form input:required, .contact_form textarea:required
      свойство:
      color: #000000
      где вместо нулей указывается любой нужный цвет (нули это черный)

      Ответить
  170. Влад:

    Спасибо огромное за быстрый ответ.
    И спасибо за форму!

    Ответить
  171. Ольга:

    Долго думала как же избавиться от спама (очень не хотелось ставить капчу или чекбоксы), а всё оказалось вот так просто 🙂
    Огромное спасибо автору!!! Это просто гениальное решение!

    Ответить
  172. Света:

    Здравствуйте, Дмитрий, скажите. пожалуйста, почему на адрес [email protected] почта приходит, а на доменный адрес компании на яндексе [email protected] письма не приходят. В спаме тоже нет. ???? В чем может быть проблема???

    Ответить
    • Дмитрий Жилин:

      Проблемы с неприходом писем обсуждались в комментариях не раз. Что из этого вы пробовали?

      Ответить
  173. Александр:

    Подскажите, как сделать дополнительную графу для заполнения? Хотелось бы сделать графу с информацией о городе

    Ответить
    • Дмитрий Жилин:

      1. Добавьте в форму соответствующее поле в html коде (блок с тегами label и input, укажите name=”gorod”)
      2. Задайте переменную $gorod в файле contact-form.php
      3. Вставьте переменную $gorod в текст письма

      Ответить
  174. Андрей:

    Добрый день.

    Приходит кадабра. Не знаю, как побороть.

    а?аМб? аОб?аПб?аАаВаИб?аЕаЛб?: аАаВаОаЛаАб?аЛаОб?
    а­аЛаЕаКб?б?аОаНаНб?аЙ аАаДб?аЕб? аОб?аПб?аАаВаИб?аЕаЛб?: б?аВаАаЛаОаДаОаВб?аА
    аЂаЕаЛаЕб?аОаН аОб?аПб?аАаВаИб?аЕаЛб?: б?9182798792834
    аЁаАаЙб? аОб?аПб?аАаВаИб?аЕаЛб?:
    аЂаЕаКб?б? б?аОаОаБб?аЕаНаИб?:
    sick;jksjdf;kj;sdl;kjklj;k
    hgfuk;lkwe;flksdf
    аАаАаАаЛаЛаЛаДаДаДб?б?б?б?

    Ответить
    • Андрей:

      причем, символы на латинице отображаются нормально, а русские очень странно. В код по 1251 вставлял, не меняет ровным счетом ничего. 🙁

      Ответить
  175. Михаил:

    Не работает. Хостер дал ответ:
    На данный момент письма блокируются нашим спам фильтром.
    01 Feb 2017 20:13:12 (GMT +03:00) MID: 239799903 Show Details

    SENDER: [email protected]
    RECIPIENT: [email protected]
    SUBJECT: ?????????????????? ?? ?????????????????????? ???? ??????????????
    LAST STATE: Message 239799903 aborted: Dropped by CASE
    Судя по всему, проблема в скрипте, отвечающем за формирование тела письма.

    Обращаем Ваше внимание, что письма с вашего сайта не должны отправляться с нашего общего домена.
    [Отправитель конверта [email protected]]

    Рекомендуем выполнить следующие действия:
    1. Настройте TXT записи для домена следующего вида v=spf1 ip4:77.221.130.0/24 ~all
    2. В почтовом скрипте в поле From необходимо указать реальный ящик на вашем домене – это требуется для корректной работы SPF записи.
    3. Настройте return-path в почтовом скрипте, к примеру, mail($addr,$subj,$msg,$headers,” -f [email protected]“);
    в пятый параметр и добавьте Return-Path ([email protected] – реальный ящик на вашем домене).

    подскажите пожалуйста как надо исправить код. Заранее Благодарю.

    Ответить
    • Дмитрий Жилин:

      Они вам все написали, изменение в скрипте – это только указание электронной почты вашего домена в адресе получателя (переменная $address) и добавление 5 параметра в функцию mail (29 строка).
      Все остальное – это сделать почту на своем домене, настраивается это на каждом хостинге по разному – если в админке не получается разобраться самостоятельно, спросите в поддержке – есть ли инструкция.

      Ответить
  176. Арман:

    Добрый вечер Дмитрий!!!
    Помогите пожалуйста сделал все по инструкции!! Теперь можно ли проверит форму обратной связи не заливая сайт на хостинг например в денвере!! Если да то тогда нужно ли будет все HTML файлы поменять на PHP? P.S. У меня это мой первый опыт при создании сайта подправите если задал вопрос не корректно??????

    Ответить
    • Дмитрий Жилин:

      Проверьте на денвере, я не тестировал, но не вижу причин по которым не должно работать. html на php менять не нужно, расширения сделаны такими какие требуются.

      Ответить
  177. Арман:

    Спасибо вам огромное!!!!!!! Все работает но были проблемы с кодировкой настроил все в самом денвере! Очень полезная статья и вы оперативно отвечаете на сообщения! Удачи вам в вашей работе!!!

    Ответить
  178. Михаил:

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

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  179. Михаил:

    да Вы правы, ошибочка закралась в разметку, спасибо за форму.

    Ответить
  180. Михаил:

    еще вопросик, на мейл в mac os все разборчиво, в w10 outlook – крякозябль, проблемка кодировки 1251?

    Ответить
  181. Михаил:

    разобрался проблема в outlook

    Ответить
  182. Сергей:

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

    Ответить
    • Дмитрий Жилин:

      Не срабатывает функция mail. Если нет ошибок в коде – вопрос к хостеру.

      Ответить
  183. Сергей:

    Добрый день.
    Подскажите решение проблемы. Если код php стоит в изначальном виде (как представлен на сайте) все работает, но после отправки сообщения, через пять секунд идет пере направление на сайт https://biznessystem.ru. Меняю в строке header(‘Refresh: 5; URL=https://biznessystem.ru’); адрес сайта на адрес в зоне рф, т.е домен на кириллице, автоматически в конце адреса подставляется /kontact-form.php и перенаправление обратно на сайт не идет. т.е постоянно стоит надпись “Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX”. На латинских доменах все работает (проверил несколько штук)

    Ответить
    • Дмитрий Жилин:

      Вы кирилический домен в формате punycode пишете или прямо на кирилице? Надо в пуникоде.

      Ответить
  184. Сергей:

    Спасибо, Дмитрий. Все заработало!

    Ответить
  185. Илья:

    Дмитрий, спасибо за форму. Отличное, понятное решение для новичков. Работала полгода нормально. Со вчерашнего дня стал приходить спам с периодичностью в 5мин. Пока не удалил php файл с сервера – ничего не помогало. Думаю как решить проблему.

    Ответить
    • Дмитрий Жилин:

      Можно поиграться с добавлением простых математических защит, типа введите сумму (разность, произведение) и проверять результат на соответствие. Изначально форма очень простая, поэтому сложных защит в неё добавлять не хотелось.

      Ответить
      • Владислав:

        Тоже стал спам наваливать постоянно,как в ней добавить капчу? помогите пожалуйста. или еще какую нибудь защиту. А то просто почту закидало спамом. =(

        Ответить
        • Дмитрий Жилин:

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

      • Владислав:

        Помогите пожалуйста=)

        Ответить
      • Владислав:

        Сделал. Но почему то теперь сразу вылетает чистый лист. Ну переходит на белый экран.
        Типо как бота ловит. И попробывал старую форму убрать. Все равно так.

        Ответить
      • Владислав:

        а все получилось. посмотрим завтра день. будут письма приходить или нет.

        Ответить
      • Владислав:

        Все равно пустые письма приходят =(

        Может как то от индексации надо закрыть? может это яндекс бот ходит? или что еще может быть?

        Ответить
        • Дмитрий Жилин:

          Пустые поля может пропускать браузер safari, он не воспринимает атрибут required.
          Решений без яваскрипта я не нашел.
          Попробуйте сделать как описано тут – adminway.ru/kak-zastavit-rabotat-atribut-required-dlya-input-v-starykh-versiyakh-ie

  186. Алексей:

    Подскажите как мне добавить на сайт на котором уже есть форма защиту от спама
    где размещать код в файле index.html и где размещать код в файле php покажите пожалуйста

    Ответить
    • Дмитрий Жилин:

      Вариант 1 – обратиться к разработчику формы.
      Вариант 2 – убрать старую форму и поставить новую.
      В том коде который вы прислали мне не разобраться, там все так наворочено.

      Ответить
  187. Антон:

    Спасибо большое за статью! Поблагодарил)

    Ответить
  188. Олег:

    Добрый день. Вашей формой ОС пользуюсь. Очень удобно. Возникла проблема с доменом на кириллице выдает 405 Not Allowed, как то обойти можно? Спасибо.

    Ответить
    • Дмитрий Жилин:

      Вы уверены, что связано именно с кириллическим доменом? У меня нет ответа на вашу проблему. Начните поиск решения с запроса к хостеру – может они в курсе причин такой ошибки.

      Ответить
  189. Эльвин:

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

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  190. Adilet:

    Письмо не отправлено, через 5 секунд вы вернетесь на страницу Dodge
    письмо никак не могу отправить помогите
    код изменил, css не трогал:

    кодировка utf-8
    у обоих

    Ответить
    • Дмитрий Жилин:

      Кодировка для этой ситуации значения не имеет. Не выполняется функция mail – это вопрос к хостингу, скорее всего она заблокирована у них.

      Ответить
  191. Виктор:

    Форма классная СПАСИБО!

    Но есть вопрос, как сделать, чтобы не было перезагрузки страницы, то есть добавить ajax.

    Ответить
    • Дмитрий Жилин:

      Эта форма на php и html изначально, ваша просьба повлечет существенные изменения и усложнит ее. Кроме того я в аяксе ноль 🙂
      Можете посмотреть, например тут – vk-book.ru/prostaya-forma-obratnoj-svyazi-na-php-i-ajax/

      Ответить
  192. Арман:

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

    У меня на ДЕНВЕРЕ все работала, но когда залил сайт на хостинг сообщение не приходят!!!!
    Служба поддержки пишет такое сообщение:
    Здравствуйте.

    Письмо отвергается почтовым сервером mail.ru, так как не проходит проверку DMARC.
    Согласно информации указанной в документации mail.ru:
    “Если отправленное сообщение не прошло проверку DKIM и SPF, то оно не пройдет и DMARC. Если же сообщение успешно прошло хотя бы одну проверку (DKIM или SPF), то и проверку DMARC сообщение пройдет успешно.”
    Информацию о DKIM и SPF Вы можете получить в свободном доступе сети Интернет.
    Рекомендуем указать в качестве отправителя письма в настройках сайта ящик на одном из Ваших доменов, делегированных на наши NS сервера. Для них корректные SPF записи указаны автоматически, и проверка должна быть пройдена.

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

    Также, в качестве альтернативного решения проблемы Вы можете переключить свой сайт на отправку сообщений по протоколу SMTP.
    Для отправки по SMTP используются следующие реквизиты:
    – логин пользователя совпадает с электронным ящиком, созданным в разделе “Почтовый менеджер”;
    – пароль от электронного ящика;
    – сервер для отправки электронной почты – smtp.timeweb.ru;
    – порт 25 или 2525.

    Помогите разобраться как сделать чтобы форма обратной связи заработала!!!!!!

    Ответить
    • Дмитрий Жилин:

      Ответ в письме вам прислали – сделайте себе почтовый ящик на собственном домене и укажите его в скрипте в переменной $adress

      Ответить
  193. Полина:

    Здравствуйте, Дмитрий!
    Благодарю, Вас, за такую замечательную статью! С PHP, я, увы, на вы. Поэтому статья очень помогла! Все отлично работает! Только маленький нюанс, после отправки сообщения, появляется не “Ваше сообщение отправлено, спасибо!”, а предложение в другой кодировке: ? ? ? ?’?°???µ ???????±?‰?µ?????µ ???‚???€?°???»?µ????, ?????°?????±??!
    Никак не могу понять, где ошибаюсь. Все остальное работает отлично! Можете подсказать, где проблема прячется? 🙂 Спасибо!

    Ответить
    • Дмитрий Жилин:

      Вместо тексте “Письмо отправлено …”, попробуйте написать так:
      <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX</body>

      Ответить
  194. Артем:

    что делать если письма не приходят

    Ответить
    • Дмитрий Жилин:

      Прочтите ветку комментариев, в ней рассмотрено множество возникавших проблем.

      Ответить
  195. Эрнест:

    Возник вопрос с размерами шрифтов которые вводятся в полях, если размер placeholder можно изменить

    ::placeholder {
    color: red;
    font-size: 1.5em;
    }

    То как изменить размер шрифта который вводится ?

    и второе я так и не смог изменить размер кнопки 🙁 я не спец, так немного рукодельничаю

    пример возникших вопросов https://unitaxipro.ru/airport/airport-raschet.html

    Ответить
    • Дмитрий Жилин:

      Меняйте стили:
      .contact_form textarea и .contact_form input

      добавьте туда font-size и все что нужно

      Ответить
  196. Krokoz:

    К вопросу о том, что после отправки письма не проходит перенаправление.
    Вот ответ техподдержки:
    В лог файле ошибок была обнаружена следующая ошибка:
    [Sun Sep 10 16:52:26 2017] [error] PHP Warning: Cannot modify header information – headers already sent by (output started at /var/www/vhosts/63/156139/webspace/httpdocs/bulvar21.ru/2017/php/contact-form.php:1) in /var/www/vhosts/63/156139/webspace/httpdocs/bulvar21.ru/2017/php/contact-form.php on line 28
    Данная ошибка информирует о том, что до установки заголовков были отправлены данные.
    Причина заключалась в BOM.
    В шаблоне файл contact-form.php с BOM. После преобразования формата файла в UTF-8 без BOM, перенаправление работает корректно.
    Наличие BOM в PHP скриптах приводит к тому, что HTTP заголовки отправляются в браузер до начала выполнения кода. Это вызывает ошибки при попытке в дальнейшем коде отправить заголовок (например переадресацию или код ответа).
    А форма отличная, даже цвета формы как раз в стиль оформления сайта. Спасибо.

    Ответить
    • Дмитрий Жилин:

      Спасибо, что поделились решением.

      Ответить
      • Krokoz:

        Самое смешное, что при первой пробе, т.е. в том виде, как в шаблоне, я убрал BOM и всё работало. Потом, когда стал редактировать под себя, совсем забыл о нём и получил такой результат. При этом был уверен, что файл без BOM.
        bulvar21.ru/2017/faq.html

        Ответить
  197. Максим:

    Все отлично работает, подключил код к своей форме! Редиректа не было из за кодировки с BOM!!!! Спасибо!!!

    Ответить
  198. Максим:

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

    Ответить
    • Дмитрий Жилин:

      Конечно можно. Это же макет, сделан для того, чтобы вы могли легко настроить визуально всё под себя. Делайте любой код и заменяйте им стандартную надпись.

      Ответить
  199. Krokoz:

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

    Благодарим за обращение.
    Администрация сайта ХХХ”
    Что то типа такого.

    Ответить
    • Krokoz:

      Упс, пустая строка выскочила.
      Там предполагается, что дублируется форма сообщения с сайта.

      Ответить
    • Дмитрий Жилин:

      Добавьте в код еще одну функцию mail с нужными переменными и отправка пойдет на 2 адреса. Можно добавить хоть миллион получателей.

      Ответить
      • Krokoz:

        Спасибо, всё получилось. Теперь приходит само сообщение, а отправителю приходит уведомление о том, что он (или кто то, указав его адрес) отправил сообщение. Приводится цитата сообщения, уведомление, что сообщение сгенерированно автоматически и не требует ответа.

        Ответить
  200. Фаридун:

    Добрый вечер!!! У меня проблема решено.
    Старый:
    Строка 29 if (mail($address, $sub, $mes, $from)) {
    Новый: замена
    Строка 29 if (mail($address, $sub, $mes,”Content-type:text/plain; charset = UTF-8\r\n $from”)) {

    Ответить
  201. Михаил:

    Почему то после отправки формы остаётся уведомление – Письмо отправлено, через 5 секунд вы вернетесь на сайт XXX , а сам переход не осуществляется 🙁

    Ответить
  202. Павел:

    Дмитрий, добрый день. Я хочу добавить <input type="checkbox" и благодаря описанию в css получаю чекбокс в рамке заданного стиля. Как это можно обойти и избавиться от рамки?
    Конечная цель – чекбокс "я согласен с условиями конфиденциальности" и после этого активизировать кнопку.
    Спасибо

    Ответить
    • Дмитрий Жилин:

      Прописать для чекбокса свой стиль и в нем задать нулевую рамку. Можно сделать через отдельный класс объекта или прямо в конкретном input type=”checkbox” style=”border:0;”

      Ответить
  203. Павел:

    Дмитрий, как правильно прописать стиль? Если я правильно понимаю checkbox – один из типов input. Input имеет описание стиля. Я попытался описать, как .contact_form input type=”checkbox” {…
    но, видимо я что-то делаю неправильно. Второй способ – в конкретном input попробовал вписать style =”border:0″ – ничего не меняется.
    Отдельный класс у меня работает на другом сайте, где нет конфликта с описанием в css:

    Cогласен <a HREF="soglasie.html" rel="nofollow"> с политикой конфиденциальности сайта </A>
    Но в этом случае он не работает

    Ответить
    • Дмитрий Жилин:

      Может у вас рамка не стилем border задается? Посмотрите в отладчике какие атрибуты задают параметры рамки и в приведенном мной ранее примере поставьте вместо border

      Ответить
  204. Павел:

    <input class="input" type="checkbox" name="agreement" value="agreement" required /

    Ответить
  205. Виктория:

    Добрый день! Подскажите пожалуйста, подключила вашу форму, но при отправке пишет “Письмо не отправлено, через 5 секунд вы вернетесь на страницу”. Подскажите пожалуйста в чем может быть дело?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  206. Виктория:

    Письма не приходят

    Ответить
  207. Виктория:

     спасибо большое!

    Ответить
  208. Виктория:

    В скрипте как я понимаю все правильно и ошибок не должно быть. Я просто попробовала загрузить отдельно ваш скрипт и та же самая ошибка.

    Ответить
    • Дмитрий Жилин:

      если были бы ошибки в скрипте, он бы совсем не выполнялся и выдавал системную ошибку

      Ответить
  209. Степан:

    Проблема спама, боты и поисковые пауки переходят по прямой ссылки на php скрипт site.ru/contact-form.php в итоге приходят пустые письма!

    Ответить
    • Степан:

      Вот ваш пример Демо версия формы biznessystem.ru/../contact-form.php
      Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX

      Ответить
      • Дмитрий Жилин:

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

        Ответить
  210. Алексей:

    вот такая проблема после нажатия на кнопку “отправить”((
    Not Found

    The requested URL /contact-form.php was not found on this server.
    Помогите пожалуйста(

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  211. Kred24:

    Все работает. Но не редиректит(

    Где этот BOM убрать надо?

    Спасибо

    Ответить
    • Дмитрий Жилин:

      Редактор Notepad++, в нем в панели есть закладка “Кодировки”.

      Ответить
  212. Владимир:

    Классная форма. Спасибо за подробное разъяснение. У меня 2 вопроса.
    1. При нажатии на кнопку “отправить” может отправиться незаполненная форма
    2. Как сделать, чтобы форма отправляла данные одновременно на 2 разных е-мейла?

    Ответить
    • Дмитрий Жилин:

      1. Насколько я знаю, поля в форме не проверяет только браузер safari – у вас он? И, какие из вариантов защиты от спама вы подключили к форме?
      2. Чтобы на второй адрес отправить, необходимо вторую функцию mail добавить после первой. Продублировать 29 строку “if (mail($address, $sub, $mes, $from))”, заменив нужные переменные и закрывающую скобку где надо добавив.

      Ответить
  213. jordan:

    все сделал как у вас – после отправки пернаправляет contact-form.php – страница не доступна

    Ответить
    • Дмитрий Жилин:

      проверьте куда положили файл и туда ли ссылается форма

      Ответить
  214. MariaMonge:

    Здрасте.
    Не получается написать, не отправляется чет.

    Ответить
  215. Сергей:

    Здравствуйте!
    Форма работает, спасибо!
    Только файл “contact-form.php” нужно сохранять в кодировке “utf-8 без BOM”, во всяком случае, у меня, только так заработало…

    Пожалуйста, подскажите, как к данной форме прикрепить капчу?

    Ответить
    • Дмитрий Жилин:

      простая капча приведена в статье, сложные решения здесь специально не используются

      Ответить
  216. Инам:

    Здравствуйте, форма отличная, спасибо! Но как можно прикрепить фотографии к этой форме?

    Ответить
  217. Вячеслав:

    Подскажите как прикрутить текст при неверном ответе капчи, если ввел неверно капчу белый фон…

    Ответить
    • Дмитрий Жилин:

      Перед командой exit после закрывающей скобки } можно вписать любой код с сообщением.

      Ответить
  218. Людмила:

    Спасибо большое за форму, вставила ее, как раз подошла к моему дизайну.

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

    Ответить
  219. Sorokin Vladimir:

    Доброго времени суток!
    Заинтересовала ваша форма – взял на тестирование.
    Сразу выплыло, что если отправлять от [email protected] или [email protected], то форма считает эти «емейлы» некорректными и требует «…ввести нормальный адрес…».
    Ну, я с этим уже сталкивался, поэтому сразу заменил «type=”email”» на «type=”text”» и теперь можно вписывать любую почту.
    Письма доходят нормально, без каких либо дефектов, но опять вылезло, после отправки =

    Warning: Cannot modify header information – headers already sent by (output started at /home/wm11020/domains/sam-okna.ru/public_html/web/myform/contact-form.php:1) in /home/wm11020/domains/sam-okna.ru/public_html/web/myform/contact-form.php on line 30

    Так как я прочитал все комменты несколько раз, то убрал пробелы, на всякий случай, от 26 строки по 39, включительно – ничего не изменилось, кроме цифры в «on line 30».
    Скажу сразу, что мне лично все эти перенаправления не очень нравятся….
    Я вообще всегда делаю открытие «Обратной связи» в новом окне.
    Человек, отправив письмо, просто закрывает его и возвращается на сайт.
    Поэтому я вот это =

    «{/* Отправляем сообщение, используя mail() функцию */
    $from = “Reply-To: $email \r\n”;
    if (mail($address, $sub, $mes, $from)) {header(‘Refresh: 5; URL=https://biznessystem.ru’);echo ‘ Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX’;}
    else {header(‘Refresh: 5; URL=https://biznessystem.ru’);echo ‘

    Письмо не отправлено, через 5 секунд вы вернетесь на страницу YYY’;}}»

    заменил на это =

    «{echo “Сообщение отправлено успешно”;}
    else {echo “Ошибка, сообщение не отправлено!”;}»

    Эти строки можно заменить на какие угодно.

    В одном месте, по просьбе клиента, я вставил такое =
    «Спасибо за сообщение! Можете продолжить просмотр информации по теме на сайте”http://ваш сайт.com”»
    Сейчас хочу протестировать в кодировке «1251», иногда бывает надо, потом отпишусь….

    Ответить
  220. Татьяна:

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

    Ответить
  221. Николай:

    А где писать свою почту и домен куда тебе будут приходить заявки от клиентов???

    Ответить
    • Дмитрий Жилин:

      в файле contact-form.php, переменная $address, в тексте это написано

      Ответить
  222. Илья:

    Здравствуйте, при нажатии на кнопку отправить 404 ошибка
    zodchiydom.ru/forma.php
    Подскажите пожалуйста в чем проблема?

    Ответить
    • Дмитрий Жилин:

      страница не найдена – файла нет в том месте куда ссылается форма, проверьте куда вы его положили

      Ответить
  223. Алексей:

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

    Send Message Now

    Your message has been successfully!

    Unable to send your message, please try later.

    <?php

    /* Задаем переменные */
    $name = htmlspecialchars($_POST["name"]);
    $email = htmlspecialchars($_POST["email"]);
    $message = htmlspecialchars($_POST["message"]);
    $bezspama = htmlspecialchars($_POST["bezspama"]);

    /* Ваш адрес и тема сообщения */
    $address = "[email protected]";
    $sub = "Сообщение с сайта ХХХ";

    /* Формат письма */
    $mes = "Сообщение с сайта ХХХ.\n
    Имя отправителя: $name
    Электронный адрес отправителя: $email
    Текст сообщения:
    $message";

    if (empty($bezspama)) /* Оценка поля bezspama – должно быть пустым*/
    {
    /* Отправляем сообщение, используя mail() функцию */
    $from = "Reply-To: $email \r\n";
    if (mail($address, $sub, $mes, $from)) {
    header('Refresh: 5; URL=https://biznessystem.ru');
    echo '

    Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX’;}
    else {
    header(‘Refresh: 5; URL=https://biznessystem.ru’);
    echo ‘

    Письмо не отправлено, через 5 секунд вы вернетесь на страницу YYY’;}
    }
    exit; /* Выход без сообщения, если поле bezspama чем-то заполнено */
    ?>

    Ответить
    • Дмитрий Жилин:

      В чем вопрос? Для чего вы комментарий с кодом публикуете? Весь алгоритм установки описан в статье.

      Ответить
  224. Максим:

    Я использую CMS joomla, но захотел использовать именно вашу форму.
    1) Вставил html код на одной из страниц сайта
    2) На хосте закинул файл php в директорию сайта, папку images (сделал это специально, так как когда я прописываю путь к картинкам, то пишу так src=”images/картинка.jpg”, и картинка находится)
    3) когда я в форме нажимаю “Отправить”, мне выдает 404 ошибку и в конце урл настоящей страницы убирается последнее слово после / и добавляется /images/contact-form.php.

    что я делаю не так? из трех файлов я использую только php , код html прописываю на странице, css у меня другой.

    Ответить
    • Дмитрий Жилин:

      404 ошибка означает что файл не найден по указанному адресу.
      Что прописано в первой строке html кода формы в атрибуте action? Если php файл лежит не в корне, то надо указывать полный путь (_http://домен/папка/название файла и т.д.)

      Ответить
  225. Татьяна:

    Добрый день.
    Друзья попросили сделать обратную связь на сайте.
    Попробовала поставить Вашу.
    На попытку отправить письмо мне пишут:
    Warning: Cannot modify header information – headers already sent by (output started at /home/groomstu/public_html/contact-form.php:1) in /home/groomstu/public_html/contact-form.php on line 35
    Письмо не отправлено, через 5 секунд вы вернетесь на страницу _http://groom-studio-aa.ru/index.htm
    И кроме этого не возвращает на сайт. Помогите, пожалуйста, разобраться. Заранее огромное спасибо.

    Ответить
    • Дмитрий Жилин:

      У других людей данная ошибка уже встречалась – воспользуйтесь поиском по комментариям (ctrl+f).

      Ответить
  226. Сергей:

    Здравствуйте.
    Форма отличная. поставил защиту от спама. Но при введении неверного ответа идет открытие php файла-обработчика (белый екран).
    Что-то не так, или так надо?
    Спасибо за ответ)

    Ответить
    • Дмитрий Жилин:

      Так и должно. Если хотите что-то выводить, то добавьте любой код перед exit

      Ответить
  227. Ольга:

    Добрый день! Можно ли оставить, чтобы отправитель заполнял только поле “телефон” а остальные поля убрать?

    Ответить
    • Дмитрий Жилин:

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

      Ответить
  228. Ольга:

    когда я удаляю, то форма перестает отправлять письма

    Ответить
  229. Ольга:

    пришло! Спасибо!!!!!!!!!!!!!

    Ответить
  230. Юлия:

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

    Ответить
  231. Андрей:

    не переходит на русские сайты( .рф), на (.ru) переходит а (.рф) не видит как ссылку, подскажите что нужно прописать?

    Ответить
    • Дмитрий Жилин:

      кириллицу нужно переводить в пуникод – у Яндекса спросите как, онлайн конвертеры есть

      Ответить
  232. Дмитрий К.:

    Добрый день!
    Спасибо за отличную форму!
    Всё работает отлично. Переделал под свои нужды.

    Вот только с одним моментом не знаю как справиться.
    Как в обработчике contact-form.php сделать, чтобы в приходящем письме у некоторых строк был жирный (bold) шрифт?

    Вот, к примеру, эти строчки:

    Имя отправителя
    Электронный адрес отправителя
    Телефон отправителя
    Сайт отправителя

    Если подскажите, буду очень благодарен! )))

    Ответить
    • Дмитрий Жилин:

      Нужно в 4-й атрибут функции mail (в нашем случае это переменная from) дописать заголовки, что тело письма содержит html, а потом уже в сообщении вставлять теги. Писать долго, вот здесь посмотрите, этот момент расписан – tradebenefit.ru/otpravka-pisem-mail-php-i-css

      Ответить
  233. Roma:

    Электронный адреÑ￾ отправителÑ￾: [email protected]

    Вот такое приходит в почту.., с чем связано ?

    Ответить
  234. Sergey:

    Здравствуйте. Спасибо за форму! Но сообщения приходят пустыми (без данных из заполненной формы), только текст из переменной $mes:
    Сообщение с сайта moisait.ru
    Имя отправителя: (пусто)
    Электронный адрес отправителя: (пусто)
    Телефон отправителя: (пусто)
    Сайт отправителя: (пусто)
    Текст сообщения: (пусто)
    Кодировка utf-8

    Ответить
    • Дмитрий:

      Проверяйте переменные – соответствуют ли поля формы тому что присваивается в скрипте.

      Ответить
      • Sergey:

        да, соответствуют

        Ответить
        • Дмитрий:

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

        • Лана:

          у меня тоже самое

  235. Sergey:

    вводил и цифры, и латинские и русские – не имеет значения

    Ответить
  236. Алексей:

    Хорошая статья, принцип работы формы наконец понял 🙂 А вот про защиту спама отлично что написано. Когда-то намучился с разными формами, спамеры не отставали пока самодельные формы не сменил. С тех пор лишь Contact Form 7 использую для небольших форм и плагин uCalc от конструктора ucalc.pro. Там встроенная защита стоит, но можно и капчу при желании привязать.

    Ответить
  237. Борис:

    Спасибо за форму! “Благодарность” провел :))
    Однако, не все получилось гладко: при отправлении на почту Яндекса имя отправителя и сообщение отображаются “козябрами”, а при отправлении на Рамблер эти поля оказываются пустыми…. Перепробовал все советы, но корректной работы формы так и не добился. Может подскажите что….

    Ответить
    • Дмитрий:

      Все подобные проблемы связаны с кодировкой, других причин нет (я не встречал). Нужно ковырять в этом направлении – сохранение самих файлов (используйте для редактирования notepad++) и указание в html коде сайта (meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″).

      Ответить
      • Борис:

        Да, действительно, проблемы были из-за кодировки! Все исправил, теперь работает отлично! Спасибо!

        Ответить
  238. Азалия:

    Не приходит сообщение на почту
    но говорит,что отправил:
    Warning: Cannot modify header information – headers already sent by (output started at C:\OpenServer\domains\localhost\proekt\mail\contact-form\contact-form.php:1) in C:\OpenServer\domains\localhost\proekt\mail\contact-form\contact-form.php on line 30
    Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX

    Ответить
    • Дмитрий:

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

      Ответить
  239. Samura:

    Доброе время суток. за форму спасибо, всё работает, письма на почту приходят, у кого не приходят, значит могут быть две причины – движок и шаблон в кодировки windows-1251, БД – default. Лучший вариант всё в UTF-8.
    Что касается проблемы
    Warning: Cannot modify header information – headers already sent by (output started at /home/user1159171/www/avtovoz.by/contact-form.php:1) in /home/user1159171/www/avtovoz.by/contact-form.php on line 24
    Письмо отправлено, через 5 секунд вы вернетесь на сайт
    Решить можно другим путём:
    1. убираем 30-ю и 35-ю строки header(‘Refresh: 5; URL=https://biznessystem.ru’);
    2. в самом верху, перед <?php вставляем
    3. вместо https://biznessystem.ru пишем название главной или любой другой страницы своего сайта
    Всё проверено и протестировано, переадресация работает, письма на почту приходят

    Ответить
  240. валерий:

    Здравствуйте, у меня тоже проблемка. Письма отправляются но приходят пустыми. Я тестирую отправку и выглядит вот так
    Сообщение с сайта Летотур-шоп.ру.

    Имя отправителя:
    Электронный адрес отправителя:
    Текст сообщения:
    Но вчера спамер пробился и все поля были заполнены.
    У меня же ничего не видно. Писал хостерам, сказали что ничего не ограничивают. С кодировкой все ОК

    Ответить
  241. Алексей:

    Ого, данная форма пользуется популярностью уже как 4 года))) Респект автору!)

    Ответить

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

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