Сегодня будем работать над созданием красивой HTML формы обратной связи для сайта, работающей на PHP и имеющею встроенную защиту от спама. Никаких особых знаний вам не потребуется, достаточно будет основ html и элементарной логики. Я дам готовые файлы, которые вы сможете вставить на сайт без изменений или скорректировать под свои нужды.
Содержание:
- Принцип работы формы обратной связи на html
- Создание макета
- Оформление CSS стилями
- PHP скрипт формы обратной связи с защитой от спама
- Вставка формы на страницу сайта
- Активный анти спам с вводом данных в поле
- Частые проблемы и их решение
Недавно я делал статью о том, как сделать форму обратной связи для 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">Правильный формат "name@something.com"</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, то задать оформление для всех элементов формы сможете без проблем, тут даже не потребуется моя помощь.
Если же вы не знакомы со стилями, то я просто дам вам готовый файл, в котором уже все прописано таким образом, что ваша форма будет идентична той, что в примере.
Ссылка на скачивание всех файлов формы в конце статьи.
Подключить стили можно двумя способами:
- Скопировать содержимое файла в файл style.css, который уже есть на вашем сайте (добавьте в самый конец)
- Поместить файл, который я дал, на ваш хостинг и подключить его.
Подключаются файлы стилей следующим кодом <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 = "pochta@kakoy-to-sajt.com"; $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';} 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) /* Проверка математического выражения*/
В качестве вопроса и ответа вы можете указать любые другие данные, включая текстовые.
Для того, чтобы этот вариант защиты использовать в дополнение к изначальному необходимо:
- Добавить в HTML код блок для вывода нужного поля, но указать другой идентификатор вместо bezspama;
- Добавить в начало PHP обработчика присвоение переменной этого нового идентификатора;
- Перед строкой 25, где идет проверка на пустоту переменной bezspama добавить проверку новой переменной на соответствие заданному значению, как описано чуть выше;
- После строки с проверкой математического выражения вставить открывающую фигурную скобку «{«, так чтобы следующая команда if стояла после нее;
- Перед командой exit вставить еще одну строку с закрывающей фигурной скобкой «}»
После всего этого в вашей форме будут работать одновременно обе защиты от спама.
Частые проблемы и их решение
Читатели часто задают вопросы, если что-то не выходит, наиболее частый проблемы и их решения буду публиковать в этом разделе.
Иероглифы при кодировке windows-1251
Теперь об особенностях использования кодировки сайта windows-1251. Если у вас такой случай, то указанная выше строчка должна дополниться еще двумя параметрами для функции htmlspecialchars — ENT_COMPAT, ‘cp1251’. Выглядеть это будет вот так:
$название = htmlspecialchars($_POST["название"], ENT_COMPAT, 'cp1251');
Не приходят письма с некоторых или всех ящиков
Часто встречается ситуация, когда письма не приходят, хотя сообщение об успешной отправке появляется. Это означает, что хостинг функцию mail, отправляющую письмо, выполнил, а почтовый сервер получателя письмо не принял, посчитав его поддельным. Возникает это вследствие того, что сервер отправки сообщения не совпадает с сервером, указанным в адресе отправителя (стр. 28 переменная $from).
Чтобы заработало в этой строчке удаляем часть кода с назначением адреса отправителя, получается вот так:
$from = "Reply-To: $email \r\n";
В такой конфигурации в заголовке письма не будет указываться адрес отправителя, но его данные вы получите внутри сообщения. Ответ на сообщение будет работать как положено — на адрес отправителя.
Как убрать поле с сайтом, мне оно не нужно
Нужно удалить несколько лишних строк в коде:
1. Удалите с 16 по 20 строки в html форме (теги
где сказано про website)
2. В php коде удалите 8 и 22 строки (задание и вывод переменной website)
где файл css скачать не вижу??
все файлы в по одной ссылке в этом разделе — https://biznessystem.ru/html-forma-obratnoj-svyazi-dlya-sajta-php/#vstavka
Не приходить на почту сообщение. Все прописано правильно. Ни лишних символов ни пробелов.
Что не так. Перенаправление на файл РНР есть, ваше сообщение отправлено, потом перенаправил на главную сайта, но на почту вообще нечего не приходит. Попробовал много форм, но результат 0. Все случилось после смены имени домена. Сижу на бесплатном хосте.
Спасибо за статью, очень вовремя для меня 🙂
Только у меня не работает что-то…
Вроде все по инструкции сделал, но при нажатии на кнопку «Отправить сообщение» — открывается страница — на белом фоне написан php’шный код…
Что делаю не так?
Файл php лежит в той же папке, где и страничка с формой.
Уточните, где открываете файл — на компьютере или он уже на хостинге?
На компьютере php код не работает.
Если это происходит уже на вашем хостинге, то проверьте, работает ли там php.
да, пробовал на компе.
выложил на сервер, теперь ошибка:
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
После этого все должно заработать как положено.
кстати, письмо пришло 🙂
только с кодировкой что-то не то 🙁 краказяблы в письме
1. Правил РНР в редакторе Notepad++. Выбрал кодировку UTF-8 (без ВОМ)
2. Кодировка у меня на сайте стоит кириллица (наверное это Windows-1251?).
В таком раскладе письмо приходит, но краказяблами. Если ставлю кодировку UTF-8, то письмо вообще не приходит. (менял кодировку только страницы с формой)
3. Добавил строчку перед отправкой:
$from .= «Content-type: text/plain; charset=\»utf-8\»»;
Теперь письмо приходит правильное.
Но, русские буквы (слова) с формы не приходят в письме, выглядит так:
Имя отправителя:
Электронный адрес отправителя: alex@dfgd.ru
Телефон отправителя: +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’);
Если не прописать вот так, то приходить будет только емаил
отправил свой файл РНР на почту
Поправил php файл (исправления на картинке во вложении, там же правленный файл). Вы поставили лишнюю скобку «}».
У меня на хостинге все работает, сообщения приходят в правильной кодировке.
PS: Зря вы не пользуетесь CSS.
Спасибо! Завтра попробую, надеюсь поправлю похожую ошибку
Все хорошо и сообщения приходят, но почему — то не присылаются имя и сообщение… В письме приходит только емаил отправителя.
До вашего сообщения разбирались с похожей проблемой Алексея (предыдущего коментатора). На латинице имя отправителя у него приходило, на кирилице нет.
Скорее всего у вас, как и у него проблема в кодировке файлов — проверьте, файл с формой и php обработчиком должны быть в одной кодировке.
Дополню свой комментарий. Подобная проблема наблюдается у сайтов, использующих кодировку windows-1251, если на вашем хостинге работает версия php 5.4 и выше (с этой версии одна из функций стала работать иначе).
Решение:
——————
В php коде в функции htmlspecialchars() необходимо добавить еще 2 параметра — ENT_COMPAT, ‘cp1251’ — для каждой переменной, использующей кирилицу.
Например, заменив: htmlspecialchars($_POST[«name»]) на
htmlspecialchars($_POST[«name»], ENT_COMPAT, ‘cp1251’).
——————
Да! Все заработало!
Добавил, как ты и написал, еще один параметр в функцию htmlspecialchars: , ENT_COMPAT, ‘cp1251’
Все теперь работает как надо.
Спасибо за решение, за форму и за поддержку!
Давно хотел свою форму, чтобы не зависеть от сторонних сервисов…
Теперь, когда основа работает, буду разбираться с CSS — делать красиво 🙂
Жму руку!
Здравствуйте! Спасибо за форму. Если не затруднит посмотрите www. russervic.ru. Тоже с кодировкой траблы. все в UTF-8, все файлы в одной папке. Письма приходят в виде ??????. И предупреждения Письмо отправлено, через 5 секунд вы вернетесь на сайт также. Возможно ли приукрасить загружаемую страницу с предупреждением? Чтобы не белый лист. Ну и с кодировкой не яно.
Спасибо.
По поводу сообщения о 5 секундах — вы можете сделать отдельную красивую страницу, куда будет перенаправляться пользователь после отправки сообщения. Параметр refresh сделать 0 (мгновенное перенаправление).
По кодировке — может быть вы указали ENT_COMPAT, ‘cp1251?? для сайта на utf-8 этого не нужно.
в таком виде ????? приходят только строки обозначающие имя, адрес, сообщение…а сам текст отображается доступно
Что-то даже css не могу нормально подключить((
Стили то совсем не видно, то отчасти только. Как-будто конфликт какой-то.
А можно добавить сюда добавление картинки?
1. Чтобы понять что происходит со стилями можно включить браузер в режиме отладки — он покажет какие стили применяются к элементу.
2. Картинку можно выложить на хостинг картинок, а сюда добавить ссылку на нее.
Не переадресовывается на указанную страницу после заполнения формы.
Форма: gusmatic.ru/zakaz.html
Нужная страница после заполнения формы: gusmatic.ru/thank_you.html
Все остальное работает, письма приходят, все читается. Редирект должен происходить моментально, т.е. задержка 0 сек. Пробовал и Location и Refresh — все одно. Открывается пустой эйчиэмэль с надписью «Письмо отправлено, через 0 секунд вы перейдете на сайт Гусматик», и ничего далее не меняется.
А если оставляете с задержкой больше нуля, то идет переадресация?
Пробовал 5 и 3. Не идет.
Проверьте свой php файл, возможно при редактировании вы допустили какую-то ошибку. Можете прислать мне на почту (akmid81(собачка)gmail.com) — я посмотрю.
Если ошибок в файле нет, то причина может быть в хостинге, может он команду header не воспринимает — это можно у тех. поддержки спросить.
Письмо отправил вчера на почту, но ответа не получил. Хостинг запрашивал — техподдержка говорит команда работает, только если после нее ничего не стоит… Пробелы все в документе убрал какие нашел, условие проверки на ботов упрощал (удалял), даже с простым условием переадресации не хочет почему то работать.
Письмо не получил, повторите еще раз. То, что вы упрощали условия проверки на ботов ни на что не влияет, раз у вас показывается строка о том, что переадресация скоро пройдет, значит весь код выполняется.
Что хостинг имеет ввиду насчет того, что после команды ничего не стоит? Команда header должна стоять до того как будет выводиться содержимое страницы, в данном случае выводимое строкой echo.
Если ошибка в коде исключена (вы все проверили), то мне проблема непонятна. Как вы могли увидеть в комментариях выше, у других людей переадресация также выполнялась нормально.
А как защетить от взлома э тот php файл? Что бы его не могли редактировать, скачать, или через него зайти в другие деректории сервера где лежат другие сайты.
Поставьте права доступа 755 — это разрешает вносить в файл изменения только вам.
Привет, а как сделать двух получателей?
Кстати спасибо огромное все грамотно и понятно. очень выручили все не знал как к лендингу привязать отправку почты на форму которая в шаблоне
После 29 строки нужно добавить еще одну конструкцию с функцией mail на второй адрес (само собой надо задать этот адрес переменной, например, $adress1.
Будет примерно вот так:
if (mail…) {if (mail…) {тут все header, echo вместе с else}} exit;
Достаточно прописать получателей через запятую в $address =
"1@mail.ru, 2@mail.ru">;
Спасибо за хороший скрипт.
Подскажите откуда берется всплывающая подсказка «Заполните это поле.» при попытке отправить пустое письмо, где эту надпись можно отредактировать?
Обязательность поля определяется атрибутом required, если он есть, то это поле нужно заполнять, если его нет, то заполнять не обязательно.
Как изменить выводимый ей текст я не знаю, в скриптах мы его не задаем.
Такая же проблема, как и у Дмитрия. Сайт ни в какую не хочет переадресовываться на нужную страницу. И ответ техподдержки похожий. Не удалось как-нибудь решить?
Дмитрий пропал со своей проблемой, поэтому, не знаю удалось ли что-то поправить. На двух хостингах, которых я ставил скрипт проблемы с переадресацией не встречалось.
Приветствую. Подскажите, какая может быть причина не отправки письма?
т.е. письмо какбы отправляется, появляется сообщение, что письмо отправлено. Но в почтовом ящике его нет
Первое, что нужно проверить — корректность e-mail адреса. После проверьте не изменили ли случайно что-то в коде.
Если сообщение об отправке есть, значит скрипт выполняется.
из кода обработчика удалил лишь строки:
$tel = htmlspecialchars($_POST[«tel»]);
$website = htmlspecialchars($_POST[«website»]);
и все связи с ними.
Я вот думаю, имеет ли смысл, уточнять у хостера о работоспособности функции mail
РЕШЕНО. Оказалось все банально просто. Доблестный сборщик почты он Яндекса, все письма посылал СПАМ. абсолютно случайно заметил их там. Спасибо.
Я папку спам постоянно проверяю, туда часто полезные письма попадают.
У меня есть своя форма. Есть поле имя и телефон. Хочу добавить поле e-mail. Беру копирую к примеру код который относится к полю «имя» вставляю ниже кода первых двух полей, и в нем заменяю под e-mail, но третьего поля не появляется. В чем причина подскажите как сделать правильно?
Поле для ввода выводится тегом input — вы эту строку вставляете?
Input вставляю, но поля не появляется
Если вы делаете настройку прямо на сайте, возможно у вас кэширование включено и показывается сохраненный ранее вариант. Другой причины придумать не могу.
Может быть у вас в настройках CSS этот блок невидимым выставлен?
Вы пробовали использовать полностью мой код формы?
Здравствуйте. Подскажите, какая может быть причина не отправки письма? Т.е. письмо не отправляется, появляется сообщение, что письмо не отправлено. Добавлял пару строк, изменял форму но не могу разобраться в чем проблема
По какой-то причине не выполняется функция mail, проверьте правильность ее написания и наличие/правильность переменных, относящихся к ней — это единственное условие, проверяемое для выдачи сообщения об ошибке.
Как проверю все переменные отпишусь.
Спасибо за форму и подробное объяснение.
Такая ситуация: нужно поставить 8 форм на одну страницу — 8 кнопок групп с разным расписанием занятий. Формы полностью одинаковы, а вот на почту нужно чтобы приходил заголовок конкретно той группы, в которую хочет записаться пользователь. Как это осуществить? 8 практически одинаковых обработчиков — как-то не особо правильно наверное. Может, можно это сделать в одном, но как?
Тема письма задается переменной $sub. В скрипте она задается в явном виде текстом. Если мы хотим, чтобы обработчик был единым, то нужно эту переменную брать со страницы из конкретной формы. Как вариант, задать дополнительное поле в форме с именем sub и значением по умолчанию (разным для разных форм). Чтобы это поле не было видно людям, надо сделать его скрытым, так же как защита от ботов сделана.
Тогда, в зависимости от формы будет подставляться в переменную sub то значение, которое соответствует форме.
Здравстуйте! письмо отправляется, но на почте приходит следующее:
«Мы не можем проверить подлинность отправителя. Рекомендуем вам быть внимательнее при совершении действий, указанных в письме. Подробнее
Сообщение с сайта service-ast-sport@mail.ru.
Имя отправителя: wer
Электронный адрес отправителя: 269081999@mail.ru
Текст сообщения:»
в чем именно причина?
Наверное, причина в том, что адрес отправки, который вы указали в скрипте принадлежит не домену вашего сайта, почтовый сервис видит что почта пришла с сервера вашего сайта, а адрес подставлен другой. Сделайте на своем домене почту и используйте ее для работы.
Дмитрий, спасибо за вашу работу.
Вроде бы все нормально, но вот проблема, как и у остальных. Заполняю форму, идет отправка, письмо получаю, но нет редиректа на нужную страницу, а только ошибка:
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 пробела, если есть, то удалите его.
Да все проверил, Вы уже об этом много раз писали. Прочел всю ветку все перепробовал.
Ну да ладно, я то уже другой скрипт нашел (он работает), но речь не о том. Я бы посоветовал проанализировать и может немного доработать, выявить причину из-за чего у части пользователей он работает с ошибками и устранить ее.
Каким методом реализована переадресация в скрипте, которым вы воспользовались?
Я бы с удовольствием выявил причину, но на двух моих хостингах все работает как часы, а дорабатывать что-то не видя проблемы очень сложно.
Дмитрий, не сочтите за рекламу, вот ссылка на готовую форуму (может вам то же она будет интересна), что я использовал tutorialzine(точка)com/2009/09/fancy-contact-form/ . На просторах интернета нашел ее частично переведенную и заточенную под русский язык (хотя немного и коряво), вот ее и использовал. Дополнительные поля в ней добавить очень быстро, редактируются 2 файла (самой формы и что должно приходить владельцу). Может сделаете и ее обзор? Думаю будет многим интересно. Если надо, то могу выложить в облако уже то, что переделал для себя.
В демонстрационной версии этого скрипта нет переадресации после отправки сообщения — мы же над решением этой задачи работаем? Избавиться от ошибки отключением переадресации не сложно, просто удаляем строки все это реализующие.
Сейчас подумал, может быть ваш хостинг воспринимает как пробел табуляцию, которая сдвигает команду header вправо. В коде сделано, чтобы удобнее воспринимался, но значения для работы она не имеет.
В приведенном вами скрипте очень большой и мудреный код (на мой взгляд) гораздо сложнее моего (даже JavaScript добавлен), при этом никаких преимуществ нет (у меня еще и русские буквы в имени не стал принимать). Кроме реализации математической капчи, а ради нее городить такой огород смысла нет. У меня защита сделана проще и эффективнее.
Здравствуйте!
Помогите… Форма заполнена, жму отправить — скачивается файл contact-form…
В чем может быть проблема?
Спасибо заранее.
Так и не скажешь, надо смотреть, что меняли в коде.
Добрый вечер,ночь.
Сделал все как вы написали,поля заполнил,жму отправить выходит » Сообщение не отправлено! и переход на стр левую»
Я даже вставлял ваши исходники.. все ровно все так же..
В чем может быть проблема?
Страница, на которую осуществляется переход указывается вами в коде, по умолчанию стоит мой блог biznessystem.ru.
По поводу не отправленного сообщения, возможно вы ошиблись при редактировании переменной $adress или $email — проверьте их корректность.
Если все в порядке там, то выкладывайте свой файл на яндекс диск и ссылку дайте, я посмотрю.
Чертос два! Я мучался около двух дней,перебирая столько php кодов и скриптом для отправки.. но ни что не работало.. оказывается вся суть была в пробном периоде на хосте timeweb,там не отсылается пока не оплатишь за хост) Спс вам,у вас хорошая форма,прикольный дизайн..
Только как например сделать,чтобы еще можно было прикреплять файлы?
Для добавления файлов понадобится довольно серьезная доработка этой формы. Я на вскидку не сделаю, надо сидеть разбираться.
Файл должен на ваш хостинг закачиваться, потом в письме отправляться, потом удаляться с хостинга.
Хотелось бы узнать еще,вот например у меня сайт чисто на HTML,без движка.
Возможно ли создать там регистрацию? чтобы люди могли авторизоваться и т.д.. если например создать базу php и настроить ее. а то говорят,без CMS этого не сделать.
По сути вы сейчас говорите о создании самописного движка. Уж проще использовать готовый.
Тогда вопрос в следующем,как например перенести свой сайт на движок?
Вот например устанавливаю я, Joomla or Wordpres. у них там создается как бы свой шаблон и т.д… но что делать,если мне нужен именно мой шаблон с HTML?Как правильно его вставить что ли.. не могу правильно сформулировать,но думаю идея понятна?)
Нужно переверстать ваш дизайн на WordPress (тут специальные темы оформления используются). Если у вас дизайн не сложный, то можно взять готовый шаблон и заменить в нем картинки на свои, базовых знаний в html будет достаточно. Если сложный, то верстальщика наймите, я думаю на сайтах фриланса за несколько тысяч сделают.
спасибо за форму отличный сайт. Я вот оставил только имя и телефон ввожу в поля имя и телефон номер телефона приходит на почту а имя нет почему так происходит?
Не приходит совсем имя или поле для имени приходит пустым?
Если не приходит совсем, значит, что-то недосмотрели когда правили — проверяйте код.
Если пустым, то, возможно, у вас сайт с кодировкой win1251 — решение описано в конце статьи (возможно, вы не обратили внимание на это).
все что ввожу в поле имя, приходит пустым, а все остальные поля приходят заполнеными не могу понять почему,
Напишите подробнее — какая кодировка на сайте, какой вариант присвоения переменной вы использовали. По вашему описанию проблемы невозможно догадаться ни о чем.
Решил испробовать ваш скрипт.Создал форму обратной связи,в файл отправки сообщения скопировал код скрипта с сайта,ничего не изменял.При отправки сообщения появляется письмо не отправляется.В чём может быть проблема.
спасибо разобрался отличный скрипт.Оказывается на хостинге была отключена функция mail().А так всё работает!!!
Такое бывает с хостингами. Рад, что разобрались и форма заработала.
Спасибо! Всё работает, но сперва приходили пустые письма затем не работала переадресация. В первом случае у меня слетели кавычки в строках объявления переменных php файла, во втором помогло сменить кодировку на utf-8 без BOM (в Notepad++). ещё раз спасибо!!!
С кодировками часто бывает проблема. Хорошо, что она у вас решилась.
Добрый вечер. Большое Вам человеческое спасибо за выкладку частички своих знаний!!!! очень помогла в решении задачи! Есть одно затруднение правда — может сталкивались? при открытии с моего компа форма отображается как надо, все отправляет и т.д. а вот при открытии с другого компа из любого браузера форма отображается криво т.е. между именем строки и строкой ввода появляется огромный пробел, по величине примерно такой же как и поле ввода. Может быть подскажите где концы искать, а то у меня опыта совсем в этом деле нет! Это мой первый сайт. Заранее спасибо.
Для того, чтобы что-то посоветовать мне нужно увидеть проблему. Можете сделать отдельную страницу на сайте (невидимую для посетителей) и разместить на ней форму, после чего дайте ссылку на страницу мне — я гляну.
ОГРОМНОЕ СПАСИБО!
Сейчас уже можно не вникать во все тонкости программирования, а воспользоваться готовыми решениями. Есть куча онлайн генераторов форм обратной связи. Первый что попался — formdesigner.ru. За несколько минут можно сделать классную форму, да еще и настроить интеграцию с другими системами (email рассылки или CRM). Но как говорится выбирать приходится самому. Я например отдаю предпочтение онлайн сервисам с их огромными возможностями. Решать вам!
На бесплатных тарифах функционал в сервисах не ахти какой. В вашем примере нет защиты от спама, вариант дизайна только один, всего 100 писем в месяц и можно указать только 1 почтовый адрес администратора — хочешь больше плати.
В собственном скрипте подобных ограничений нет.
Добрый день! Внедрили Вашу форму, все отлично работает. Но возникла одна проблема, нужно добавить еще одно поля, где будет список html. Пользователь выбирает нужное, сейчас эта часть в письме не отражается. buhshkola.e58.ru
В письмо нужно добавить ту же переменную, которая у вас добавлена для обозначения списка.
Если вы хотите включить в комментарий код, заключите его в теги
<code></code>>.
По другому некорректно отображается.
<?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 = "pbh58@yandex.ru";
$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 строки и до конца.
И неплохо было бы развить тему и прикрутить урок как прикрутить нормальную капчу.
Код неполный, не приходит вот эта строка:
$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>>
В письме нет того, что выбрали
Спасибо Дмитрий за вашу чудесную форму!
Скажите пожалуйста можно ли к ней добавить капчу ну или другую защиту?
Заранее благодарен.
Защита в форму уже встроена, я в посте описывал ее, внимательнее присмотритесь.
Да но хотелось бы капчу прикрутить!
Зачем?
Дмитрий, ну это реально сделать? Для того чтобы усложнить отправку письма всякими спамщиками ботами и так далее.
Бывает письма приходят с сайта и оно пустое, не имени, ни телефона, ни текста письма. Хотя стоит — required — на всех полях, но это видимо как то обходят.
Если заполнять все графы, хоть на английском, хоть на русском, все нормально приходит.
Все сделать реально, но я ее не делал. Погуглите на эту тему, информации про добавление капчи немало. По моим ощущениям овчинка выделки не стоит, капчу тоже некоторые боты распознают, а объем кода увеличится существенно.
Спасибо Дмитрий за вашу отличную форму! Работает отлично, но у меня два косяка.
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
Доброго времени суток, Дмитрий! Все сделал как Вы прописали и все нормально, но есть одно но — над строчкой через 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 строка закомментирована — она не должна влиять на работу скрипта. Странно, что выдает у вас ошибку. Можете ее удалить вообще.
Сообщения приходят вот такие:
????????? ? ????? ??? ?????????.
??? ???????????: Борис
??????????? ????? ???????????:
??????? ???????????: 8-123-4546789
????? ???????????:
????? ?????????:
проверка связи
Пробовал менять кодировку с помощью Notepad на UTF-8 без BOM в файлах html; php; css
Не помогает. Все то же самое.
Что еще сделать?
ENT_COMPAT использовали при назначении переменных? кодировка сайта какая?
Кодировка UTF-8 без BOM
ENT_COMPAT использовал но только с cp1251
Переменные у вас нормальные приходят, значит html код формы работает нормально.
То что с вопросиками прописывается в php файле обработчике — где-то в нем причина.
А текст в переадресации как отображается?
Подскажите, раньше отправлялись сообщения с данной формы, а после настройки smtp перестали отправляться выскакивает «Письмо не отправлено, через 5 секунд вы вернетесь на страницу…»
Возможно в этом косяк: /* Отправляем сообщение, используя mail() функцию */ как исправить с mail на smtp?
Я работал только с mail, в других вариантах не компетентен. Узнайте у хостера, почему mail может не работать на их серверах.
Попробуйте искать ответы по SMTP на форумах.
Форма просто ваша очень хорошая и раньше все работало, как по маслу) Ну ладно, буду спрашивать и reg.ru, почему не работает. Спасибо за ответ!
Текст в переадресации так же вопросами
Здравствуйте. Хорошая форма, но возникли 2 вопроса:
1) вставил дополнительную графу с выбором из списка, так он отличается по внешнему виду. Как бы это поправить?
2) при переходе обратно через 5 сек. новая страничка открывается в том окошке, где до этого стояла форма, а не во весь экран.
Спасибо.
Внешний вид определяется CSS стилями. В данной форме стилевое оформление для списков не задано, поэтому, для изменения их внешнего вида вам необходимо добавить данные в файл style.css.
Команда header открывает страницу в том же окне, где была открыта форма, если форма во всплывающем окне, то и переадресация идет в нем. Я понял, что вы хотите получить, но как это реализовать не знаю, не знаю возможно ли вообще.
Форма огонь! всем рекомендую! Простая, легкая в установке и редактировании!
Здравствуйте, после ввода данных открывается пустое окно, ни куда не перекидывает. Помогите
А письма отправляются?
Спасибо, вопрос решился. Я забыл подключить страницу.
Здравствуйте, поставил вашу форму на сайт(из изменений: стили слил в свой файл .css, и из формы убрал раздел «веб сайт») и вот какая закономерность: прописал свою почту на gmail.com, и когда отправляю письмо (пишу в форме тоже ….@gmail.com) то всё норм приходит, а если не с gmail.com но ничего не приходит, Подскажите в чём может быть проблема.Спасибо
В папке спам смотрели? Может быть туда попадают сообщения.
нет не приходят ни куда, пробывал даже почту на хостинге таже ситуация
О том что письмо отправлено сообщение есть или пишет что ошибка и письмо не отправлено?
Добрый день! Огромное спасибо за такой понятный пост. Все приходит нормально, но информация о том, что пользователь будет переадресован обратно отображается абракадаброй. Что не так?
То есть, кодировка букв в письме нормальная, а некорректная только надпись о переадресации? Если так, то странно, в одном файле не может частично совпадать кодировка, частично нет. Даже не знаю в чем косяк.
Попробуйте поменять кодировку php файла, посмотрите что получится.
Спасибо. А как поменять его кодировку?
Откройте файл в редакторе Notepad++ и при сохранении будет выбор возможных кодировок.
Ясно. Я просто в brackets учусь. Но там тоже наверняка можно это сделать.
Спасибо. Сделать отпишусь.
откройте файл php в notepad ++ ? там есть меню сверху «кодировка»
если сайт в кодировке UTF8(без BOM) то попробуйте в php файле поставить просто UTF8
Я понял, а где ставить эту кодировку. В тексте скрипта или при сохранении файла файла?
пишет отправлено
пишет отправлено всегда
спасибо, решил проблему удалением заголовков from и reply-to
Спасибо, разобрался. Изменил кодировку на 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 без ВОМ
Здравствуйте!
Хороший скрипт.
Все поставил (сейчас на тестовом домене отрабатываю адаптивный шаблон), но письма приходят вида (майлы изменил):
___________________________________________________________________
24 фев. в 22:21
Константин , cot13@yandex.ru
Кому
che2015@yandex.ru
Сообщение со страницы КОНТАКТЫ
Имя отправителя: Константин
Электронный адрес отправителя: coot13@yandex.ru
Телефон отправителя:
Текст сообщения:
Тест
______________________________________________________________________
Поле телефон — не обязательно, а вот в шапке письма — крякозябры — это кириллицей имя отправителя.
Кодировки все 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).'?=';>
Как сделать чтобы и письмо отправлялось и файл автоматически скачивался с сервера?
Если в качестве целевого URL на который переадресовывается пользователь после отправки сообщения поставите ссылку на файл, то пользователю будет предлагаться скачать этот файл.
да файл скачивается, но остается белая страница с надписью "Письмо отправлено, через 5 секунд вы вернетесь на сайт".
Хотелось чтобы перекидывало на главную и в тоже время скачивался файл.
Строку с echo уделите и сообщения не будет. У меня приведет частный пример работы формы после отправки сообщения. В фигурных скобках может быть абсолютно любой html код — что хотите, то туда и вставьте.
Только как одновременно переадресовать на главную и запустить скачивание я не знаю, либо одно, либо другое. Может кто-то более разбирающийся в php подскажет — на форумах поспрашивайте.
Здравствуйте, в поисках формы набрел на вашу Дмитрий, Все перекодировал, заполнил все что надо, свою почту, сайт, отправляю тестовое письмо и ничего не происходит, помогите понять причину. Прочитал все комменты о подобной ошибке не написал никто
Может хостинг отключил функцию mail — узнайте в поддержке.
Добрый день, спасибо за быстрый ответ, уже обратился, жду ответа, как разрулю ситуацию отпишусь и напишу о причине ошибки, может кому то пригодится.
Получил ответ с сервака, сказали что все работает, отправка письма проводится. Видно где то я накосячил, объясню подробнее, при нажатии кнопки отправить сообщение, текст и все данные пропадают с формы, вроде бы как письмо отправилось, по логике должен показаться текст об удачной или неудачной отправке и перенаправить меня на указанную мной страницу или сайт, этого нет, просто текст и данные пропадают из формы
Если сообщение об удачной отправке не появляется, значит функция отправки письма не выполнилась. Проверяйте по шагам все что делали.
У вас Вордпресс на сайте, чего вы мучаетесь. Поставьте плагин Contact Form 7 — на порядок меньше настроек и проблем, инструкция здесь.
Здравствуйте Дмитрий, спасибо за ответ, о Contact Form 7 я знаю и использую его. Дело в том что я занимаюсь Web разработкой, вернее начал заниматься недавно и начал с создания лендингов. Когда создаю ленд на Вордпресс то применяю этот замечательный плагин но многим клиентам нужна просто верстка с рабочими формами, поэтому я в поиске разных решений, в общем как то так.
В этом случае я бы искал проблему так — заменял по очереди функции в скрипте на функцию вывода текста, например, вместо mail поставить echo с проверочным текстом, так найдете место проблемы, а дальше смотреть уже что не так в этом месте.
Здравствуйте, сделал все по инструкции и тоже нет переменных.
Подскажите пожалуйста
так выглядит код 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
Здравствуйте! Как отключить этот эффект, когда ты обновляешь страницу то форма обратной связи с уменьшенного формата быстро увеличивается нормальный формат (который необходим)?
В стилях обязательно удалите этот блок:
.contact_form p {
width:650px;
margin:7px 10px 7px 10px;
padding:0px;
}
Иначе замучаетесь искать, что же поля в разнобой.
Так как здесь указано для верхней части страницы, а у Вас будет в своей части.
Здравствуйте! Проблемка у меня, помогите пожалуйста!
всё сделал по инструкции, только CSS поменял но думаю не по тому глючит.
Состав преступления:
Когда нажимаю отправить поевляетя ошыбка 500 — Ошибка сервера.
вот ее текст: «На сайте произошла ошибка при получении ru.reklamer.net/contact-form.php?sfera=wewqwe&doljnosti=asd&tekst=qf&file=&imia=fasegq&nomer=erg&mail=er%40saf.safc. Возможно, сайт временно недоступен или настроен неправильно.»
Как думаете в чем здесь дело?
Я бы задал вопрос хостеру — ошибка 500 спрятана в серверных настройках скорее всего.
Все время пишет что письмо не отправлено и перекидывает на выбранную мной страницу =( нид хэлп
Функция mail, видимо, не выполняется. Вопрос к тех. поддержке хостинга.
На хостинге апаче стоит на винде. Мучался что htaccess не работает. Может как то связано?
Пасиба
Помогите, пожалуйста!
Добавил код в style.css на сайт в самый конец, создал php в корне сайта на хостинге, добавил html код на страничку.
Внес коррективы — указал свой адрес почты в форме и т.п. но все равно ошибка.
подскажите, что делаю не так?
Добрый день!
Проблема с кодировками, что можно сделать? На клиент Outlook приходит письмо с кракозябрами, просмотр письма через Веб-клиент или Iphone всё нормально на русском.
При открытии письма в Outlook он показывает, что кодировка Кирилица KOI-8, меняю кодировку на utf-8 (как и написан весь сайт+форма php, почему показывает кодировку KOI-8 при получении не понятно) и всё-равно кракозябры. Подставляя другие кодировки результат нулевой. Где может быть подводный камень?
Я почтовыми программами давно не пользуюсь. Если все так, как вы описали, проблема в Оутлуке — может быть в нем есть настройки какие-то?
Свой вопрос решил.
Спасибо.
Каким образом удалось решить, если не секрет? В чем была проблема?
Вроде путь не верно указал до php файла в админке.
Ну а кодировку я решил не мудрить и после отправки выходит текст на английмком языке — Thank u!
Так было быстрее.
Сложнее было определить в цсс размер поля, чтобы не ломать шаблон при выводе на мобильных устройствах.
Там базовая указана в 500 пикселей. Вручную убирал названия полей, остпвил лишь текст внутри поля — введите e-mail и т.п.
Благодарю за код и файлы!
+-+ С наилучшими пожеланиями, Альбинас Казлаускас Бизнес-тренер +7-981-721-65-58 pret-a-portrait.ru
Помогите пожалуйста!
Всё сделала как описано, с кодировкой все в порядке — UTF8.
Письма приходят, НО! все поля пустые, не на русском не на латинице. В чем может быть проблема?
(Форма внизу на сайте kasior-belgorod.ru)
Что корректировали в файлах? Может быть переменные из формы не отправляются в php обработчик — проверьте соответствие полей.
Спасибо. Буду искать
Благодарю за чудесный скрипт. И не надо платить горе программистам и жуликам из разных сервисов с абонентской платой.
а на joomle 3 это можно реализовать?
Данный скрипт никак не привязан к определенной CMS, работает где угодно.
А можно подробней по поводу реализации на joomla. Вставил Html код на странице, прописал полный путь на стили и php код, форма на странице отображается, но при нажатии на кнопку ни чего не происходит, не читает php код
Значит, что-то неверно прописали. В значении атрибута action проверьте правильность пути к php обработчику.
Здравствуйте. Перестали работать формы заявок на сайте.При нажатии кнопки заказать звонок,выдает сообщение» Ошибка скрипта send.php» . Перепробовал разные скрипты,без изменений. Хотя на другом хостинге копия этого сайта работает без проблем. Может есть какие специальные настройки на хостинге,которые причастны к обработке этих форм? Первый раз такая проблема. Буду очень благодарен за дельные советы.
Вам стоит обратиться в поддержку хостера. Может быть, они заблокировали функцию mail или что-то еще.
а можно поставить это все на сайте Joomla? Помогите разобраться нужно очень как поставить эту форму на лединг пейдже плиз
Данная форма обратной связи подходит и для Джумла и для Вордпресс и для других движков сайта, она не привязана никаким образом к определенной CMS. Все что требуется — это поддержка вашим хостингом PHP (сейчас это есть везде).
Здравствуйте Дмитрий.
Я добавил в стили:
Выбор 1
Выбор 2
Выбор 3
Выбор 4
Выбор 5
Выбор 6
А как теперь сделать в php, что бы на почту приходил выбранный вариант?
В стиле для списка select name=’menu’, в value=»first», value=»second» и так далее. Какую функцию написать в php для отправки на почту?
Вам нужно добавить переменную, присвоить ей значение поля из формы и вставить эту переменную в письмо.
//
//Выбор 1
//Выбор 2
//Выбор 3
//Выбор 4
//Выбор 5
//Выбор 6
//
Можете написать пример?
Когда вы задаете дополнительное поле, вы ему прописываете какое-то имя, в вашем примере — menu.
Дальше значение этого поля вписываете в переменную через:
$menu = htmlspecialchars($_POST[«menu»]); (я об этом в статье рассказывал в статье)
Затем переменную вставляете в тело письма в блоке /* Формат письма */
Спасибо
Добрый день, Дмитрий!
Великолепная форма, работа супер!
Установил на сайт — письма приходят, с кодировкой без проблем, спасибо!
Не могу пока разобраться почему нет переадресации через «refresh», письмо отправляется, но спустя 3 секунды — переадресации не происходит, на экране остается надпись «Письмо отправлено, через 5 секунд вы вернетесь на сайт» и все… более ничего к сожалению.
В чем может быть загвоздка или причина?
Заранее благодарен!
Что-то с BOM записями.. решил вопрос через meta http-equiv=»refresh.)
Думаю как теперь сделать refresh не на конкретную страницу, а на возврат к предыдущей, на шаг назад, туда откуда заполняли форму, так как форма не для одной странички. Буду благодарен совету.)
Спасибо!
Когда делал форму не смог придумать как реализовать такое, моих познаний не хватило. Надо искать где-то по форумам.
Испробовал все способы, письма приходят в виде
п?п?я? п?я?п©я?п?п?п?я?п?п?я?: п?п?п?п?п? п?п?п?п?я?я?п?п?п?я?п? п?п?я?п?я?:
п?п?п?п?я?п?п? п?я?п©я?п?п?п?я?п?п?я?: п?п?п?я? п?я?п©я?п?п?п?я?п?п?я?:
Вроде бы все хорошо ни каких ошибок но письма не приходят,в чем может быть ошибка?
Варианта 2:
— хостинг не дает выполнять отправку писем (функция mail);
— почтовый сервис не пропускает входящие
По первому пункту — обращайтесь в поддержку хостинг компании, по второму — попробуйте использовать разные почтовые сервисы.
Не приходят на почту письма, почему?
Все нормально, разобрался.
Добрый день! Форма отличная, спасибо!
Но есть проблемы:
1. Письма не приходят на ящики mail.ru
Написал в поддержку хостинга, они ответили что «Письмо не принял mail.ru, ответ Вы можете прочитать ниже:
Jun 5 08:32:52 bmx0 [38521]: 1b9Qg5-0009zh-Ue ** dic_triumph@mail.ru 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. На почтовый ящик хостинга письма приходят, но с кодировкой никак не разберусь, прочитал все комменты, перепробовал все варианты
приходит в таком виде:
Тема: Сообщение с сайта
От: dic_triumph@mail.ru
Дата: Вск, 5 Июнь 2016 10:48
Кому: mail@podgol.com
Срочность: Обычное
Настройка: | Скачать | Исходный текст
????????? ? ????? podgol.com.
??? ???????????: ??????????????
??????????? ????? ???????????: triumph234@mail.ru
??????? ???????????: +7-935-6578000
????? ?????????:
????????????!
Подскажите пожалуйста как решить эти вопросы!
По первому пункту остается использовать другой почтовый сервис.
А по второму — в комментариях были разобраны разные проблемы — что из этого конкретно вы пробовали, а что нет?
Форма работает отлично!
Только если все слова набирать латинницей.
А если кириллицей, то получается чушь полная.
Вот:
Телефон отправителя: 907360734067`0476`45
Текст сообщения:
Хочу на семинар
А если форму закачать на чистый домен, то все работает, а ни на одном сайте — нет!
И ни один совет, ни один форум, ни один скрипт не помогает, хоть ты тресни!
Что делать?
оказалось фигня. нужна простая переконвертация кодировки переменных:
$pn = iconv (‘utf-8’, ‘windows-1251’, $pn);
$pname = iconv (‘utf-8’, ‘windows-1251’, $pname);
$action = iconv (‘utf-8’, ‘windows-1251’, $action);
Вопрос отпадает.
Благодарю, что отписались. Я про такое не знал, кому-то пригодится.
Огромное спасибо за форму, все работает как часы, если разобраться с кодировками))
Я добавил Вашу форму в модульное окно на сайте, и хотелось бы узнать, что нужно редактировать в php-коде формы чтобы во время отправки сообщения не осуществлялся переход на страницу «Письмо отправлено, через 5 секунд вы вернетесь на сайт XXX'»?
Можно ли как-нибудь сделать так, чтобы статус отправки сообщения отображался в том же модульном окне, без перенаправления на другую страницу?
Заранее спасибо!
вместо строк с 29 по 35 оставить только mail($address, $sub, $mes, $from)), тогда переадресации и сообщений не будет
Все сделал как Вы написали, но теперь вместо отправки сообщения выдает ошибку «сайт пока не может обработать этот запрос»
Спасибо за статью! Всё очень просто и доходчиво. Как только настроил правильно окружение своего сервера, форма сразу запустилась. Только с sendmail и чёртовым TLS возился пару дней, будь неладны эти mail.ru и прочие…
Одна только маленькая добавочка: Я удалил из запроса строки с e-mail и адресом сайта — они мне не нужны. Актуально — номер телефона. Только проверка по идентификатору «tel» не работает — в строку можно забить что угодно и письмо отправляется — защиты от невписывания номера телефона, к сожалению, нет. Есть другие решения
добрый день!! прошу прошения за беспокойство, но мой форма не работает, даже если я ничего не меняя вставляю ее на сайт, все равно письма не отправляются, вообще не знаю что делать((
А как сделать форму, чтобы в полях были:
1. выбор по списку с несколькими вариантами
2. выбор да или нет
3. выбор одного из нескольких вариантов
У form есть много возможностей, все их описать в рамках статьи нереально. В частности select и option позволяют в качестве полей устанавливать выпадающий список, checkbox — элементы для выбора. Есть и другие, но думаю этих двух вам хватит, как их правильно настраивать можете посмотреть, например, здесь — ab-w.net/HTML/html_forms.php
Здравствуйте!
Прежде всего большое спасибо за форму, все отлично работает!
Но у меня есть вопрос, а можно ли сделать так, чтобы обработчик отправлял два письма?
Вот с этим вожусь, но пока не получается, знаний маловато…
Мне нужно сделать так, чтобы после заполнения формы одно письмо отправлялось, как у вас в примере, а второе письмо уходило на почту того, что форму заполнял, что-то вроде автоответчика поставить. Можете помочь?
Разобралась сама)
Все получилось! Еще раз большое спасибо за форму!
Евгения, здравствуйте.
Если вам не сложно, поделитесь вашим кодом, чтобы письмо дублировалось и тому, кто заполнял форму.
Спасибо!
Хорошая форма, один вопрос, почему-то не работает перенаправление на сайт после отправки какие могут быть причины
Добрый день! Долго искал простое и подходящее решение для установки формы обратной связи на свой сайт. Ваша — понравилась, но после отправки сообщения почему-то выпадает 404 ошибка с сообщением о том, что страница contact-form.php не найдена, хотя и она лежит в той же папке, что и страница, в которую вложена форма, и перенаправление после нажатия на кнопку «отправить» должно идти на главную страницу.
Подскажите пожалуйста, в чем может быть проблема? Спасибо!
C 404 ошибкой разобрался — по-разному файлы назвал. Но зато теперь вылазят две другие ошибки:
во-первых, сообщения не отправляются, и я никак не могу найти ошибку в коде, если кто увидит, подскажите пожалуйста;
и второе — когда выводится сообщение пользователю об отправке или неотправке письма — сообщение не выводится кирилицей, а «левыми символами» — что здесь может быть?
Единственная причина не отправки писем, с которой я сталкивался — запрет хостером функции mail (при условии, что ошибок в коде нет) — спросите у них на этот счет.
По иероглифам вместо кириллицы — много обсуждений в комментариях выше — почитайте, скорее всего ваша проблема уже была решена.
У меня та же проблема была! Блин я забыл что на днях файл contact-form.php переименовал на contact_form.php то есть дефис — на _ поменял и забыл)
Доброй ночи. Запрета не было(проверял созданием тестового php файла с самой простой функцией отправки писма — все отправлялось). Оказалось, что письма шли просто оставались на хосте с ошибкой «Mail failure — malformed recipient address». Проблемму решил создав на хосте новый адресс, с которого сделал перенаправление уже на нужный мне(первоначальный), а в контакт-форм указал как раз новосозданный адрес на хосте.
Но вот проблема с вывдом сообщений об отправке/неотправке письма остались — кирилица=иероглифы, латиница — все норм, и это при том, что в самом письме все приходит идиально: и тело и отправитель — на каком бы языке форма не замолняламь…
кодировки везде одинаковые…
Добрый день. Форма супер, но есть одно но, почему то один раз отправил с формы, всё пришло на мою почту, всё супер без каракулей и т.д., но вот после отправки, попробовал ещё раз отправить и письма уже не приходят)))
Добрый день Читатели Блога, и те кто ищет форму обратной связи. Работаю я с системой DLE и хостингом hostiq^com^ua(вместо ^ ставим точку), сам переехал к ним от рег ру, по функционалу мне этот хостинг очень нравится, но суть моего поста не об этом.
У DLE есть стандартная форма обратки. НО…
Столкнулся с такой проблемой. (месяца 3-4 назад) конечный емайл на которые приходили письма был от системы Яндекс, заметил баг что перестало приходить половину писем! Меняю емайл, толку ни какого, делаю емайл-домен на хостинге, опять не приходят письма от mail.ru и кривых емайлов… Меняю хостинг (потому что тех под сома не понемала в чем дело, показывала логи и ошибки и говорила что у нас всё исправно. Но ведь и в правду на хостинге всё исправно было! И решил вс равно проверить весь сайт на другом хостинге). Сменив хостинг, заливаю весь сайт, сайт становится на ура всё отлично! Настало время тестов, и опять та же лажа! Меняю форму обратной связи на эту что в верху автор прописал, и опять тот же баг!!!
Начал искать пути решения этого трабла! Так как в программирование не очень селен, а за помощью обращаться не люблю, ведь тогда попадёт весь интерес решения задачки, перешурстил весь Гугл и Яндекс! Толи мои ключевые запросы были туповатые, да я и если честно не мог правильно сформулировать запрос XD)))
Но в одну прекрасную ночь промелькнула мысь, а что если отправлять письма с одного и того же мыла, на другой постоянный?
То есть есть сайт (я занимаюсь распространением косметики) к примеру gid-avon.ru (это моя творческая студия в ней и ведутся все разработки, а потом переносятся на основной домен)
И создаем к примеру два емайла Получатель pol@gid-avon.ru и отправитель otp@gid-avon.ru
Создаем форму обратной связи с дополнительными полями ЕМАЙЛ! (куда будет вписываться емайл клиента, а емайл отправитля otp@gid-avon.ru будет равен $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 = "pol@gid-avon.ru"; /* Ваш E-Mail: (емайл получателя!!!) */
$sub = $f1; /* теме сообщения присваеваем сам код емайла клиента */
$email = "otp@gid-avon.ru"; /* а тут мы показываем что наш емайл будет являться отправителем */>
И ёщё, косяк ридиректа не в ХОСТИНГЕ!!! А в том что у вас кодировка файлов не совпадает!!!! Именно из за этого и не работает ридирект! В чем был у меня косяк.
DLE кодировка win 1251
Я создаю статическую страницу и кладу туда нужный мне код хтмл вызывающий форму! Но, так как движок создает страницу с win1251 то кодировка не совпадает с php! и вследствие этого не срабатывает переброс на нужную страницу! Решение, если мы хотим что бы форма вписалась в дизайн, не то делаем так переходим на ту страницу где мы хотим её повесить, нажимаем Ctrl+U и копируем весь исходник страницы в файл с расширением .html мета тег с кодировкой удаляем и вписываем utf8 И на всякий случай прогоняем через кодировку utf-8 без BOM, стираем ненужный контент и вставляем нашу форму! ВСЁ!
И ещё из этих исходников я выкинул мне ненужное поле $message если что скопируйте всё что нужно из исходников автора блога!
Так, автор блога я дарю тебе новую ветку для размышление, так как описанное мною выше можно переписать и написать очень качественную статью. Суть в том этого урока, что больше ни когда ни одного письма не затеряется!!! Что очень важно в моей работе (одна такая заявка не пришедшая ко мне несёт убыток от 500 до 1000 рублей!!! )
Почему я посчитал нужным выложить это здесь? Да потому что я взял исходники автора)))
Ниже найдёте ссылку на архив
https://yadi.sk/d/JUJdRYB9tDnza
если что, админ, перезалей к себе, а то у яндекса есть ограничение на скачку
ВСЕМ ДОБРА)
Простите о печатался в php вам нужно указать вместо
$sub = $f2; /* теме сообщения присваеваем сам код емайла клиента */
Вот это
$sub = $f1; /* теме сообщения присваеваем сам код емайла клиента */
так как $f1 это емайл
а $f2 это индекс поля
В общем ни когда не бойтесь эксперементировать!
Стоит задача запустить данную форму на сайте на бесплатном хостинге. Функция mail() на таких хостингах, как показывает практика, или не работает, или работает через раз. А нужен стабильный результат. Нашёл обход — использовал данный скрипт в сочетании с библиотекой github.com/PHPMailer/PHPMailer/ на бесплатном хостинге, где работает ВордПресс.
Работало до последнего времени. Однако: 1. как выяснилось, почему-то работает с Хромом, но не работает с IE. 2. и в Хроме тоже перестало работать. Дмитрий, прошу помочь. Готов выслать исходники для анализа.
Начните с запроса в тех поддержку по поводу работоспособности функции.
Работает ли форма в том виде в каком выложена у меня без ваших изменений?
…все возможные фокусы с кодировками перепробовал. Все файлы в UTF-8 без BOM, проставлено в HTML и в PHP в header() на тему кодировки также танцы с бубном выполнены. Устал танцевать. К хостеру ещё не обращался, вдруг он чего-то там с глобальными настройками кодировок намудрил. Если Вы, Дмитрий, рассудите, что всё у меня по уму, буду с хостером вместе танцевать.
Алексей, скиньте мне на почту ваши исходники, посмотрю что у вас там. barsorel174ru@yandex.ru
Дмитрий, добрый день. Столкнулся с огромной проблемой. У меня html сайт. Установил Вашу форму (за нее отдельное спасибо), но письма приходят с вопросительными знаками. То есть, кроме почты отправителя (которая указана латиницей) я больше ничего не вижу кроме каракуль.
Самое интересное то, что я пробовал делать все, что указано в этой статье. Сайт у меня на UTF-8, но все равно перепробовал все. Результат нулевой.
Кстати, прошлая форма связи имела такие же проблемы.
P.S. Письма отправленные через форму могу прочитать только со штатных почтовых клиентов продукции Apple (то есть, если я открою пришедшее мне письмо с Айфона или Айпода, то я четко вижу все содержимое, а если с компьютера или андроида, то одни вопросительные знаки).
Прошу помочь мне, если это возможно. Моя почта 1984.denis.smirnov@gmail.com
Заранее Вам благодарен
Здравствуйте, Денис. Все известные мне причины и решения в комментариях уже обсуждались. Возможно, вы пропустили какое-то из них.
Что именно вы делали и какой результат получался?
Дмитрий. Для начала я проверил в какой кодировке мой сайт. Сайт в 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 на сам сайт и на скрипт, что выходит?
Дмитрий, доброе время суток!
Спасибо большое за форму, и достаточно все понятно и подробно расписано.
Но я не могу понять, почему выскакивает предупреждение в строке, если из вашего примера, то в 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
Дмитрий, проблема решилась таким образом.
в 28 строке убрал в конце строки лишний пробел, возможно он не влияет не на что, и все три файла заново преобразовал в UTF-8 без BOM. и все заработало
Да, пробел там ни к чему, правда, у меня он ни на что не влиял.
Дмитрий скажите мне такую вещь, после отправки формы выходит сообщение о том что оно отправилось, но оно не пришло, проверяю через open server, вообще через него оно отправиться или нужно непосредственно через хостинг это делать?
Open Server, насколько я знаю, предназначен для локальной работы сайта, не уверен, что он функцию mail выполняет. Я им не пользуюсь, не могу на 100% ответить.
Ну я так понимаю если сайт будет на хостинге, то скрипт отправки письма выполнится 100%
Если в настройках хостинга нет запрета, то все работать должно
А как изменить фон для сообщения :
Ваше письмо отправлено, через 5 секунд вы вернетесь на сайт?
Спасибо
этот текст может быть заменен любым HTML кодом с тегами задающими нужный формат
Дмитрий, а можно слегка подробней и если можно с небольшим примером.
Не совсем вас понял.
Спасибо
Учебник по HTML можно скачать тут — https://biznessystem.ru/katalog-knig/. Он старенький, но очень понятный.
Здравствуйте! скрипт работает на ура! письма отправляет, правда они в спам падают, но это поправимо. я уткнулся в проблему со стилями. открываю локально демо-индекс, всё правильно, заливаю на хостинг этот файл (без изменений кода) добавил только цвет фона, поля рассыпаются по странице, вот так: такси-горки10.рф/feedback.html. понимаю что причина банальна, но в 5 часов утра мой мозг отказывается искать проблему. если не сложно, ткните носом, где я накосячил! спасибо!
В стилях для объекта .contact_form label удалите свойство float: left;, без него ровно форма встает.
спасибо! встало как надо!
Как в Вашей форме вообще убрать перенаправление на другую страницу.
Т.к я хочу сделать всплывающее окно
строки с командой echo удалите
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»
Что делать?
Что-то у вас глючит в присвоении переменных, ругается на кодировку — задайте вопрос в тех поддержку хостинга, подозреваю, что это их косяки.
Большое спасибо!
Доброе время суток!
Я обратился в тех поддержку хостинга 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 строкой (из данного примера), в таком виде как она есть, и проблема решилась, с кодировкой се стало хорошо, попробуйте у себя у кого такая проблема, и отпишитесь что у вас получилось
Благодарю, что отписались. Я с такой проблемой не сталкивался, кому-то наверняка поможет решение.
Спасибо большое, помогло!
Здравствуйте!
Форма замечательная, понятна и легко редактируется. Использую под быстрый заказ в 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», а так хочется довести до ума)
Здравствуйте!
Пытался убрать «абракадабру» всеми перечисленными в обсуждении способам, но получается что либо в тексте письма кириллица нечитабельна, либо в заголовке и «письмо отправлено» в форме связи каляками написано. Декодер в каждом случае пишет CP1251 ? UTF-8. Хостинг сказал, что проблемы в коде, но помочь не может.
Спасибо! Все работает, пришлось немного помудрить так как самописная CMS’ка) Да и стили даже не пришлось использовать, как раз под дизайн подстроился.
Спасибо. Всё грамотно и понятно объяснил.
У меня почему-то приходят все пустые поля, одни названия, значений нет.
Когда я по методу одного из комментаторов присвоил теме письма значение адреса отправителя — письма стали приходить и без темы.
То есть почему-то не передаются данные в обработчик.
В чём грабли, подскажите, пожалуйста?
Я попробовал но у меня не вышло((( Решил, что не судьба и стал юзать конструктор форм testograf.ru/ru/blog/forma-obratnoj-svyazi.html Там можно создать любое количество форм, контактных, форм обратной связи или форм заказа для сайта. Короче все, что угодно. Добавляйте любые поля, включая загрузку файла.
В бесплатном варианте нельзя отключить рекламу сервиса в форме.
да это фигня, за то быстро и удобно
Добрый вечер!
<?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 = "info@ddumsk.ru";
$sub = "Сообщение с сайта ddumsk.ru";
/* Формат письма */
$mes = "Сообщение с сайта …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://…/partner.htm’);
echo ‘Письмо отправлено, через 5 секунд вы вернетесь на сайт …’;}
else {
header(‘Refresh: 5; URL=http://…’);
echo ‘Письмо не отправлено, через 5 секунд вы вернетесь на страницу …’;}
}
exit; /* Выход без сообщения, если поле bezspama чем-то заполнено */
?>
На ответной странице всё отображается корректно
На почту приходит всё без крокозябров, но имя и тескт сообщения не отображается.
Перепробовал уже всё, что мог :(((
Буду признателен за помощь!
У вас поля для имени и текста единственные заданы в cp1251, остальные без этого — копайте в данном направлении.
Здравствуйте, подскажите, в чем может быть причина не отправки писем на почту? Появляется текст что письмо отправлено, на почту ничего не приходит. Проверил на двух хостингах, письма не приходят
В папке спам писем нет
В результате долгих ковыряний оказалось, что отправляет письма только на почтовые ящики в зоне .com., как в примере. Если мыло в зоне ru письмо не отправляет.
Стоит задать вопрос хостеру, почему не отправляются письма. Сам скрипт на yandex и mail почту письма шлет нормально.
не совсем правильно написал, письма отправляются на все ящики, но если только отправитель указал свое мыло в зоне com, если в графе email стоит мыло в зоне ru, письма не приходят. Это тоже настройки хостингах? На двух разных хостах тоже самое.
Это было замечено ещё на движке Дле. У меня был сайт где форма обратной связи была типа «корзины» ну или «Стол заказов». Ну и как то заметил что стало мало заказов приходить на почту… Писал хостерам — те писали мы не виноваты в этом) Хостинг был Рег ру, переехал на другой хостинг, проблема осталась… После всех попыток понять в чем проблема у меня сдали нервы. И воспользовался таким способом
Создаем переменную
$f1 = htmlspecialchars($_POST[«f1»],ENT_COMPAT, «cp1251»); /* Ваш E-Mail: */ в этот блок и будет вводиться емайл вашего клиента.
$address = «bla@yandex.ru»; (конечный емайл)
$email = «bla2@yandex.ru»; (отправочный емайл)
Если что, где то выше в комментариях был описан этот способ мною, и выложены доработки по этому шаблону.
Таким способом если ваш клиент не указал емайл правильно или комовский, то вы всё равно его получите!
Вопрос решен следующим образом.
В строчке
$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 ящик пользователя, то такое письмо будет являться поддельным и блокироваться почтовым сервисом.»
Добавил ваше решение в текст статьи, благодарю за помощь. Я с такой проблемой не сталкивался, но кому-то пригодится.
Прошу прощения написал не точно
В строчке
$from = «From: $name \r\n Reply-To: $email \r\n»;
Удалил From: $name \r\n
Оставил только
$from = «Reply-To: $email \r\n»;
Комментарии здесь режут $email после From
Добрый вечер.
Сайт ddumsk.ru и форма PHP в UTF-8.
Всё отлично работает! Только не приходит имя и текст отправителя :(((
В чём может быть причина?
Здравствуйте, форма работает, отправляет.
Но он не пишет кто отправил, его сотовый, его почту.(Сайт на хостинге, сделано все точь в точь как у вас.)
Добрый день!
Уже проскакивал вопрос о том, как продублировать письмо и тому, кто заполнял форму на сайте.
Можете ли выложить код для тех, кто не силен в пхп?
Спасибо!
После команды 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
Спасибо автору, всё работает.
Добрый день Дмитрий!
Форма хорошая, установил на сайт во всплывающем окне. Жаль при отправке выдаёт 404.
В чём может быть проблема? Не нужно ли, помимо html, css и php ещё и подключение к js?
А зачем там js, если она на php?
Какой адрес страницы у 404 ошибки?
Просто выдаёт путь до файла contact-form.php и ошибка 404…
посмотрите:
goszakaz24.ru/katalog-uslug/stroitelstvo-zdanij-i-sooruzhenij/
кнопка «заказать услугу» вверху.
Вы убрали из скрипта переадресацию на заданную страницу? Поэтому после отправки браузер остается в файле contact-form.php. Либо верните эту команду, либо надо городить огород типа как в этой теме обсуждается — cyberforum.ru/php-beginners/thread1407509.html
В том то и дело, что ничего из Вашего скрипта не убирал (за исключением поля «сайт»), а в переадресации только поменял адрес Вашего сайта по умолчанию, на свой.
Но тем не менее, отправка письма тоже не происходит.
А, так вы не написали, что отправки письма нет. Значит у вас скрипт не выполняется совсем. Задайте вопрос хостеру — может быть у них нет поддержки какой-либо функции.
Добрый день, Дмитрий. Спасибо за ответ. Но так как в нём нет функции ответа, я пишу новое сообщение.
Функция mail() на хостинге работает. В чём может быть причина не отправки письма?
А зачем вам нужно несколько разных способов выводить форму? У вас же стоит плагин contact form7, почему через него все не выведете?
Добрый день.
Такая ошибочка:
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 коде формы
плагин contact form7 установлен с перезагрузкой страницы. Переадресация на другую страницу — mail.php. После отправки сообщения, появляется — «Ваше сообщение успешно отправлено». Задание у меня сделать форму во всплывающем окне.
Так вот вставляя шорт-код от contact form7, у меня при отправке сообщения информацию не выводит, а просто окно пропадает. А при повторном нажатии на кнопку — открывается окно уже с сообщением об отправке, которое пропадает только после перехода на другую страницу. Не могу понять в чём загвоздка. Ну и в принципе хотел разобраться в работе данного узла без применения плагина.
Как вариант, проверять с какого места php код не выполняется. Я бы попробовал убрать функцию проверки на спам и отправки сообщения, а вывел бы сначала просто список заданных переменных — этим проверим передаются ил данные из формы. Дальше заново подключать удаленные функции.
Дмитрий, вот смотрите какая оказия. Убрал из php кода — action=»contact-form.php», — всё то же самое, переходит на 404: Страница не найдена. Но, тестовое письмо на почту доставлено. Есть у Вас какие соображения на этот счёт?
action вы убрали не из php кода, а из html кода формы. Может быть у вас разные формы конфликтуют между собой (contact form 7 и эта)?
Убрал из html конечно. Но непонятно, как в таком случае система находит php обработчик? Ведь в html коде именно action=»contact-form.php» — указывает на него. Отправка письма идёт.
Дмитрий, я деактивировал contact form 7, и письма перестали отправляться. Значит они отправлялись обработчиком contact form 7.
А новый обработчик так и не видит. Я вернул action=»contact-form.php», и всё равно ничего не меняется. 404 и отправки нет.
Предположил, что проблема в модальном окне. Установил форму на свободное поле, без модалки, — всё те же проблемы.
Дмитрий, несмотря на то, что файл contact-form.php у меня находится в той же папке, я прописал путь до него. Это решило проблему. Начало появляться сообщение об отправленном письме и «через 5 мин вы вернётесь….».
Но сообщение на почту не приходит.
Хорошо, часть проблемы устранили. Конфликт форм можно убрать переименованием php файла — задайте ему любое произвольное имя и в action пропишите его — это чтобы абсолютный путь не надо было прописывать.
Теперь насчет не прихода писем:
1. Проверьте папку спам, если нет, то
2. В конце статьи есть пункт «Частые проблемы» — там описано одно из наиболее распространенных решений, если не помогло, то
3. В комментариях к статье вопрос с не приходом писем всплывал часто — почитайте, возможно у кого-то была аналогичная проблема, если не помогло, то будем думать дальше.
Я всё проверю, хотя это не спам — точно.
Дмитрий, а есть способ сообщение об отправке получить в том же всплывающем окне, что и форма?
Точно есть, но я на вскидку не знаю как сделать, надо искать по форумам. Вроде бы я интересовался когда-то, но реализация мне показалась очень сложной.
Упростил значение $from и письма начали приходить. Спасибо Дмитрий! Теперь буду искать решение по выводу сообщения.
Если мне попадется решение — выложу тут или ссылку вставлю.
Большое спасибо!!!!!!
Здравствуйте, подскажите форма на сайте выглядит коряво. Строчку добавил. $название = htmlspecialchars($_POST[«название»], ENT_COMPAT, ‘cp1251’); нет изменений. Все файлы в одной папке лежат. Куда копать?
Коряво в смысле дизайн съехал или буквы иероглифами? Форму используете как отдельный html файл или добавляете внутрь кода страницы?
разобрался, спасибо за форму!
Здравствуйте. Скажите пожалуйста, почему не происходит переход на обратную страницу? т.е. сообщение отправилось, новое окно «Письмо отправлено, через 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 (как и должно было быть). Только вот, до почты письма не доходят….
И снова добрый день. Должен сказать, что сегодня почему-то почта заработала…не могу понять, почему так? Вчера не работала, а сегодня заработала, хотя я ничего для этого не делал…. С чем это может быть связанно? Что-то с сервером?
Может быть и с сервером, я так точно не отвечу. Бывали и у меня случаи, когда с чем-то мучаешься, потом раз и само заработало.
Тогда значит, это наверное чудо :)) Классная форма, спасибо))
Благодарю, запрос отправил хостеру и буду ждать ответ.
«Сайт:
»
pattern не работает. Что угодно можно написать в строке, все проглатывается и отправляется.
Пишет такую ошибку
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 секунд вы вернетесь на сайт КрафтСервис
проблемы с header уже встречались вот в этом комментарии:
https://biznessystem.ru/2015/05/html-forma-obratnoj-svyazi-dlya-sajta-php/#comment-45483
там оказался лишний пробел в ненужном месте, проверьте, может у вас аналогичная проблема
Проблему с абройкадаброй в переадресовке можно решить иначе.
В переадресовку можно вставить картинку с написанным текстом.
Вот так:
Дмитрий дай Бог тебе здоровья. Действительно рабочая форма, для меня как для новичка лучшего для HTML-сайта просто не найти. Есть только один вопрос. Мне надо чтоб при отправке либо страница не менялась, либо появлялся дубликат страницы где эта форма стоит.
Короче чтоб было понятнее я хочу чтоб при отправке появлялось модальное окно, а не банальная страница с простяцким текстом. Скачал исходник окна от сюда:( ruseller.com/lessons.php?rub=2&id=1556) и ну ни как не получается объединить этих два произведения в одно.
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 скрипта приводит к закрытию изначальной страницы и, есил не делать переадресацию, вы получите белый экран (пустую страницу). Как сделать то, что вам хочется простым путем я не знаю, а форма изначально делалась как очень простая.
smartlanding.biz/forma-obratnoj-svyazi-v-modalnom-okne.html Вот тут я нашёл решение своей проблемы, но меня смущает довольно большое количество файлов, либо там ссылки на сайт прячутся либо вирусняк. Я бы с удовольствием воспользовался Вашей версией на основе ихнего исходника
Там модальное окно сделано на javascript, который в моей форме не используется, по этой причине там и дополнительные файлы (собственно скрипты).
На моем сайте уже были готовые формы связи нужно было их подключить и в этом мне очень помог именно Ваш php обработчик. 🙂
Спасибо!
Дмитрий — это наверное специальное имя для PHP-профессионалов. У меня другая форма (с модальным окном) тоже от Дмитрия только другого )) Дим подскажите пожалуйста что может быть причиной неработающей формы в модальном окне? Обращаюсь к Вам т.к. почему то думаю, что вы лучший из Дмитриев )
Про профессионала это вы громко сказали, в php я самый что ни на есть любитель, так, кое-что понял, когда необходимость возникала.
А без модального окна ваша форма работает, если ее просто в код сайта запихать? Я думаю от этого плясать, чтобы понять в форме дело или в привязке к окну.
Вот то и интересно, что БЕЗ модального окна форма работает, это меня прям вымораживает, вчера до утра экспериментировал, но так ни чего и не добился ((
Пути к файлам, которые обрабатывают форму относительные или абсолютные (полный url)? Если относительные, попробуйте заменить на полные.
Здравствуйте.
Можете ли изменить почту в форме обратной связи на лендинге и цвет фона?
И если да, то какая стоимость.
Спасибо за отличную форму, все работает, но у меня возникла проблема. Во всех браузерах незаполненная форма не отправляется, но в браузере сафари на маке и с айфона спокойно отправляется пустая форма. Т.е. я могу не заполнять поля и нажать кнопку отправить письмо. На почту естественно приходит пустое письмо. Как можно это исправить? Повторю, что в остальных браузерах параметр 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);
Спасибо огромное!
Здравствуйте Дмитрий! Установил Вашу форму. Проверил, отправив со своего же компьютера письмо, — пришло без проблем. Но от других пользователей не приходят письма. Сделал такую же запись: $from = «Reply-To: $email rn»; Также поставил свою почту. Кодировка: utf-8. Подскажите, пожалуйста, в чём ещё может быть причина и как можно проверить работу почты, и найти эту причину?
При использовании этой конструкции все письма приходят от адреса вашего хостинга и не должно быть никакой разницы кто и откуда отправляет, поэтому, мне непонятно в чем может быть причина. Как вы определили, что от других пользователей не приходят?
Тысячу извинений! Всё работает. Хотя перед тем, как к Вам обратиться, проверял с помощью знакомых и сообщений не получал. А сейчас сработало. Прям чудеса творятся. Благодарю за форму!
Поместил форму с обработчиком в папку conact своего сайта
форма — conact/contact.php, переименовал с ndex.html
обработчик — conact/contact-form.php
Теперь, если вместо строки домен/conact/contact.php поставить домен/conact/contact-form.php и нажать enter, пустое письмо летит на почту. Подскажите, пожалуйста, как можно защититься от этого. я так понимаю — это для хакеров есть лазейка?
Через этот файл нет возможности получить доступ к внутренним ресурсам сайта, так что для хакеров лазейки нет.
Это радует, благодарю за помощь!
Добавил: if(empty($_POST)) die; в самом верху обработчика, теперь, если кому-то вздумается побаловаться, пустое письмо, уже, не полетит на почту.
Благодарю что поделились улучшением.
как жму отправить вот это лезет
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
Данная проблема уже встречалась у других пользователей, возможные проблемы и решение обсуждалось в комментариях, например тут — https://biznessystem.ru/2015/05/html-forma-obratnoj-svyazi-dlya-sajta-php/#comment-34331
Подскажите пожалуйста, не приходят письма на почту. В чем может быть проблема?
<?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.
Значит проблема все таки здесь? Нужно сменить, так понимаю? Не сильно шарю в php
Лучше, конечно, задавать вопросы по скрипту автору у которого вы его взяли. Либо используйте другой обработчик, если у того автор неизвестен, например, приведенный в этой статье.
Спасибо Вам от душенски!
Благодарен Вам!
Добрый день
Прошу прощения за глупый вопрос, а где меняется цвет текста в полях для заполнения?
У меня получилось белое на белом.. Нашел где поменять цвет фона поля, но где менять сам цвет текста, не нашел.
Заранее благодарен.
В файлах цвет подсказок не задан и использует тот, который есть по умолчанию на сайте. Чтобы изменить, надо добавить в css файле в блоке:
.contact_form input:required, .contact_form textarea:required
свойство:
color: #000000
где вместо нулей указывается любой нужный цвет (нули это черный)
Спасибо огромное за быстрый ответ.
И спасибо за форму!
Долго думала как же избавиться от спама (очень не хотелось ставить капчу или чекбоксы), а всё оказалось вот так просто 🙂
Огромное спасибо автору!!! Это просто гениальное решение!
Здравствуйте, Дмитрий, скажите. пожалуйста, почему на адрес xxx@gmail.com почта приходит, а на доменный адрес компании на яндексе xxx@companyname.ru письма не приходят. В спаме тоже нет. ???? В чем может быть проблема???
Проблемы с неприходом писем обсуждались в комментариях не раз. Что из этого вы пробовали?
Подскажите, как сделать дополнительную графу для заполнения? Хотелось бы сделать графу с информацией о городе
1. Добавьте в форму соответствующее поле в html коде (блок с тегами label и input, укажите name=»gorod»)
2. Задайте переменную $gorod в файле contact-form.php
3. Вставьте переменную $gorod в текст письма
Спасибо, работает.
Добрый день.
Приходит кадабра. Не знаю, как побороть.
а?аМб? аОб?аПб?аАаВаИб?аЕаЛб?: аАаВаОаЛаАб?аЛаОб?
ааЛаЕаКб?б?аОаНаНб?аЙ аАаДб?аЕб? аОб?аПб?аАаВаИб?аЕаЛб?: б?аВаАаЛаОаДаОаВб?аА
аЂаЕаЛаЕб?аОаН аОб?аПб?аАаВаИб?аЕаЛб?: б?9182798792834
аЁаАаЙб? аОб?аПб?аАаВаИб?аЕаЛб?:
аЂаЕаКб?б? б?аОаОаБб?аЕаНаИб?:
sick;jksjdf;kj;sdl;kjklj;k
hgfuk;lkwe;flksdf
аАаАаАаЛаЛаЛаДаДаДб?б?б?б?
причем, символы на латинице отображаются нормально, а русские очень странно. В код по 1251 вставлял, не меняет ровным счетом ничего. 🙁
Не работает. Хостер дал ответ:
На данный момент письма блокируются нашим спам фильтром.
01 Feb 2017 20:13:12 (GMT +03:00) MID: 239799903 Show Details
SENDER: 119132@linwebng05.hostingspace.pro
RECIPIENT: admin@marina-sk.com
SUBJECT: ?????????????????? ?? ?????????????????????? ???? ??????????????
LAST STATE: Message 239799903 aborted: Dropped by CASE
Судя по всему, проблема в скрипте, отвечающем за формирование тела письма.
Обращаем Ваше внимание, что письма с вашего сайта не должны отправляться с нашего общего домена.
[Отправитель конверта 119132@linwebng05.hostingspace.pro]
Рекомендуем выполнить следующие действия:
1. Настройте TXT записи для домена следующего вида v=spf1 ip4:77.221.130.0/24 ~all
2. В почтовом скрипте в поле From необходимо указать реальный ящик на вашем домене — это требуется для корректной работы SPF записи.
3. Настройте return-path в почтовом скрипте, к примеру, mail($addr,$subj,$msg,$headers,» -f domain@domain.com«);
в пятый параметр и добавьте Return-Path (domain@domain.com — реальный ящик на вашем домене).
подскажите пожалуйста как надо исправить код. Заранее Благодарю.
Они вам все написали, изменение в скрипте — это только указание электронной почты вашего домена в адресе получателя (переменная $address) и добавление 5 параметра в функцию mail (29 строка).
Все остальное — это сделать почту на своем домене, настраивается это на каждом хостинге по разному — если в админке не получается разобраться самостоятельно, спросите в поддержке — есть ли инструкция.
Добрый вечер Дмитрий!!!
Помогите пожалуйста сделал все по инструкции!! Теперь можно ли проверит форму обратной связи не заливая сайт на хостинг например в денвере!! Если да то тогда нужно ли будет все HTML файлы поменять на PHP? P.S. У меня это мой первый опыт при создании сайта подправите если задал вопрос не корректно??????
Проверьте на денвере, я не тестировал, но не вижу причин по которым не должно работать. html на php менять не нужно, расширения сделаны такими какие требуются.
Спасибо вам огромное!!!!!!! Все работает но были проблемы с кодировкой настроил все в самом денвере! Очень полезная статья и вы оперативно отвечаете на сообщения! Удачи вам в вашей работе!!!
Добрый день, в чем может быть проблема, письмо приходит но тело пустое, данные которые заполняются посетителем почему то не прописываются в $mes
Скорее всего где-то ошибка — проверьте одинаково ли названы поля в форме и присвоение переменной, а также корректность переменной в разделе отвечающем за письмо.
да Вы правы, ошибочка закралась в разметку, спасибо за форму.
еще вопросик, на мейл в mac os все разборчиво, в w10 outlook — крякозябль, проблемка кодировки 1251?
разобрался проблема в outlook
Добрый день, в чем может быть проблема после нажатия на отправку письма получаю сообщение письмо не отправлено
Не срабатывает функция mail. Если нет ошибок в коде — вопрос к хостеру.
Добрый день.
Подскажите решение проблемы. Если код php стоит в изначальном виде (как представлен на сайте) все работает, но после отправки сообщения, через пять секунд идет пере направление на сайт https://biznessystem.ru. Меняю в строке header(‘Refresh: 5; URL=https://biznessystem.ru’); адрес сайта на адрес в зоне рф, т.е домен на кириллице, автоматически в конце адреса подставляется /kontact-form.php и перенаправление обратно на сайт не идет. т.е постоянно стоит надпись «Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX». На латинских доменах все работает (проверил несколько штук)
Вы кирилический домен в формате punycode пишете или прямо на кирилице? Надо в пуникоде.
Спасибо, Дмитрий. Все заработало!
Дмитрий, спасибо за форму. Отличное, понятное решение для новичков. Работала полгода нормально. Со вчерашнего дня стал приходить спам с периодичностью в 5мин. Пока не удалил php файл с сервера — ничего не помогало. Думаю как решить проблему.
Можно поиграться с добавлением простых математических защит, типа введите сумму (разность, произведение) и проверять результат на соответствие. Изначально форма очень простая, поэтому сложных защит в неё добавлять не хотелось.
Тоже стал спам наваливать постоянно,как в ней добавить капчу? помогите пожалуйста. или еще какую нибудь защиту. А то просто почту закидало спамом. =(
Добавил в статью раздел с инструкцией по замене варианта защиты или добавлению дополнительной. Попробуйте, по возможности напишите, помогло или нет.
Помогите пожалуйста=)
Сделал. Но почему то теперь сразу вылетает чистый лист. Ну переходит на белый экран.
Типо как бота ловит. И попробывал старую форму убрать. Все равно так.
а все получилось. посмотрим завтра день. будут письма приходить или нет.
Все равно пустые письма приходят =(
Может как то от индексации надо закрыть? может это яндекс бот ходит? или что еще может быть?
Пустые поля может пропускать браузер safari, он не воспринимает атрибут required.
Решений без яваскрипта я не нашел.
Попробуйте сделать как описано тут — adminway.ru/kak-zastavit-rabotat-atribut-required-dlya-input-v-starykh-versiyakh-ie
Подскажите как мне добавить на сайт на котором уже есть форма защиту от спама
где размещать код в файле index.html и где размещать код в файле php покажите пожалуйста
Вариант 1 — обратиться к разработчику формы.
Вариант 2 — убрать старую форму и поставить новую.
В том коде который вы прислали мне не разобраться, там все так наворочено.
Спасибо большое за статью! Поблагодарил)
Добрый день. Вашей формой ОС пользуюсь. Очень удобно. Возникла проблема с доменом на кириллице выдает 405 Not Allowed, как то обойти можно? Спасибо.
Вы уверены, что связано именно с кириллическим доменом? У меня нет ответа на вашу проблему. Начните поиск решения с запроса к хостеру — может они в курсе причин такой ошибки.
здравствуйте, Всё работает , но проблема в проверке правильности указания математической цифры , как сделать так что бы при указании не той цифры горел красный свет? и не отправлял письмо если цифра указана не правильно.
Сделать подсветку невозможно, так как правильность ввода данных проверяется не в самой форме, а скрипте обработчике.
Письмо не отправлено, через 5 секунд вы вернетесь на страницу Dodge
письмо никак не могу отправить помогите
код изменил, css не трогал:
кодировка utf-8
у обоих
Кодировка для этой ситуации значения не имеет. Не выполняется функция mail — это вопрос к хостингу, скорее всего она заблокирована у них.
Форма классная СПАСИБО!
Но есть вопрос, как сделать, чтобы не было перезагрузки страницы, то есть добавить ajax.
Эта форма на php и html изначально, ваша просьба повлечет существенные изменения и усложнит ее. Кроме того я в аяксе ноль 🙂
Можете посмотреть, например тут — vk-book.ru/prostaya-forma-obratnoj-svyazi-na-php-i-ajax/
Здравствуйте!!!
У меня на ДЕНВЕРЕ все работала, но когда залил сайт на хостинг сообщение не приходят!!!!
Служба поддержки пишет такое сообщение:
Здравствуйте.
Письмо отвергается почтовым сервером 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
Здравствуйте, Дмитрий!
Благодарю, Вас, за такую замечательную статью! С PHP, я, увы, на вы. Поэтому статья очень помогла! Все отлично работает! Только маленький нюанс, после отправки сообщения, появляется не «Ваше сообщение отправлено, спасибо!», а предложение в другой кодировке: ? ? ? ?’?°???µ ???????±?‰?µ?????µ ???‚???€?°???»?µ????, ?????°?????±??!
Никак не могу понять, где ошибаюсь. Все остальное работает отлично! Можете подсказать, где проблема прячется? 🙂 Спасибо!
Вместо тексте «Письмо отправлено …», попробуйте написать так:
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX</body>>
Благодарю! Всё работает отлично!!!
что делать если письма не приходят
Прочтите ветку комментариев, в ней рассмотрено множество возникавших проблем.
Возник вопрос с размерами шрифтов которые вводятся в полях, если размер placeholder можно изменить
::placeholder {
color: red;
font-size: 1.5em;
}
То как изменить размер шрифта который вводится ?
и второе я так и не смог изменить размер кнопки ( я не спец, так немного рукодельничаю)
Меняйте стили:
.contact_form textarea и .contact_form input
добавьте туда font-size и все что нужно
К вопросу о том, что после отправки письма не проходит перенаправление.
Вот ответ техподдержки:
В лог файле ошибок была обнаружена следующая ошибка:
[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 заголовки отправляются в браузер до начала выполнения кода. Это вызывает ошибки при попытке в дальнейшем коде отправить заголовок (например переадресацию или код ответа).
А форма отличная, даже цвета формы как раз в стиль оформления сайта. Спасибо.
Спасибо, что поделились решением.
Самое смешное, что при первой пробе, т.е. в том виде, как в шаблоне, я убрал BOM и всё работало. Потом, когда стал редактировать под себя, совсем забыл о нём и получил такой результат. При этом был уверен, что файл без BOM.
bulvar21.ru/2017/faq.html
Все отлично работает, подключил код к своей форме! Редиректа не было из за кодировки с BOM!!!! Спасибо!!!
Дмитрий, а возможно ли сделать поинтересней страницу, на которой выводится сообщение о успешной отправке!?
Конечно можно. Это же макет, сделан для того, чтобы вы могли легко настроить визуально всё под себя. Делайте любой код и заменяйте им стандартную надпись.
Дмитрий, а возможно, и если возможно, то как, сделать так, чтобы кроме сообщения на экране об успешной отправке, письмо дублировалось на адрес отправителя, т.е. к отправителю приходило бы письмо примерно с таким текстом:
«Вы, или кто то, указал Ваш адрес в запросе с сайта ХХХ.
Благодарим за обращение.
Администрация сайта ХХХ»
Что то типа такого.
Упс, пустая строка выскочила.
Там предполагается, что дублируется форма сообщения с сайта.
Добавьте в код еще одну функцию mail с нужными переменными и отправка пойдет на 2 адреса. Можно добавить хоть миллион получателей.
Спасибо, всё получилось. Теперь приходит само сообщение, а отправителю приходит уведомление о том, что он (или кто то, указав его адрес) отправил сообщение. Приводится цитата сообщения, уведомление, что сообщение сгенерированно автоматически и не требует ответа.
Добрый вечер!!! У меня проблема решено.
Старый:
Строка 29 if (mail($address, $sub, $mes, $from)) {
Новый: замена
Строка 29 if (mail($address, $sub, $mes,»Content-type:text/plain; charset = UTF-8\r\n $from»)) {
Почему то после отправки формы остаётся уведомление — Письмо отправлено, через 5 секунд вы вернетесь на сайт XXX , а сам переход не осуществляется 🙁
Дмитрий, добрый день. Я хочу добавить <input type="checkbox" и благодаря описанию в css получаю чекбокс в рамке заданного стиля. Как это можно обойти и избавиться от рамки?
Конечная цель — чекбокс "я согласен с условиями конфиденциальности" и после этого активизировать кнопку.
Спасибо
Прописать для чекбокса свой стиль и в нем задать нулевую рамку. Можно сделать через отдельный класс объекта или прямо в конкретном input type=»checkbox» style=»border:0;»
Дмитрий, как правильно прописать стиль? Если я правильно понимаю checkbox — один из типов input. Input имеет описание стиля. Я попытался описать, как .contact_form input type=»checkbox» {…
но, видимо я что-то делаю неправильно. Второй способ — в конкретном input попробовал вписать style =»border:0″ — ничего не меняется.
Отдельный класс у меня работает на другом сайте, где нет конфликта с описанием в css:
Cогласен
<a HREF="soglasie.html" rel="nofollow"> с политикой конфиденциальности сайта </A>>
Но в этом случае он не работает
Может у вас рамка не стилем border задается? Посмотрите в отладчике какие атрибуты задают параметры рамки и в приведенном мной ранее примере поставьте вместо border
<input class="input" type="checkbox" name="agreement" value="agreement" required /
Добрый день! Подскажите пожалуйста, подключила вашу форму, но при отправке пишет «Письмо не отправлено, через 5 секунд вы вернетесь на страницу». Подскажите пожалуйста в чем может быть дело?
Не выполняется функция mail, причиной может быть запрет на хостинге — запросите их техподдержку.
Письма не приходят
спасибо большое!
В скрипте как я понимаю все правильно и ошибок не должно быть. Я просто попробовала загрузить отдельно ваш скрипт и та же самая ошибка.
если были бы ошибки в скрипте, он бы совсем не выполнялся и выдавал системную ошибку
Проблема спама, боты и поисковые пауки переходят по прямой ссылки на php скрипт site.ru/contact-form.php в итоге приходят пустые письма!
Вот ваш пример Демо версия формы biznessystem.ru/../contact-form.php
Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX
Добавьте вторую проверку на спам через простую математическую капчу, описанную в конце статьи. В примере на моем сайте она была не подключена, сейчас поставил, срабатываний от ботов нет.
вот такая проблема после нажатия на кнопку «отправить»((
Not Found
The requested URL /contact-form.php was not found on this server.
Помогите пожалуйста(
Очевидно у вас нет указанного файла на хостинге, проверяйте куда вы его положили и где его ищет форма.
Все работает. Но не редиректит(
Где этот BOM убрать надо?
Спасибо
Редактор Notepad++, в нем в панели есть закладка «Кодировки».
Классная форма. Спасибо за подробное разъяснение. У меня 2 вопроса.
1. При нажатии на кнопку «отправить» может отправиться незаполненная форма
2. Как сделать, чтобы форма отправляла данные одновременно на 2 разных е-мейла?
1. Насколько я знаю, поля в форме не проверяет только браузер safari — у вас он? И, какие из вариантов защиты от спама вы подключили к форме?
2. Чтобы на второй адрес отправить, необходимо вторую функцию mail добавить после первой. Продублировать 29 строку «if (mail($address, $sub, $mes, $from))», заменив нужные переменные и закрывающую скобку где надо добавив.
все сделал как у вас — после отправки пернаправляет contact-form.php — страница не доступна
проверьте куда положили файл и туда ли ссылается форма
Здрасте.
Не получается написать, не отправляется чет.
Здравствуйте!
Форма работает, спасибо!
Только файл «contact-form.php» нужно сохранять в кодировке «utf-8 без BOM», во всяком случае, у меня, только так заработало…
Пожалуйста, подскажите, как к данной форме прикрепить капчу?
простая капча приведена в статье, сложные решения здесь специально не используются
Здравствуйте, форма отличная, спасибо! Но как можно прикрепить фотографии к этой форме?
К этой никак.
Подскажите как прикрутить текст при неверном ответе капчи, если ввел неверно капчу белый фон…
Перед командой exit после закрывающей скобки } можно вписать любой код с сообщением.
Спасибо большое за форму, вставила ее, как раз подошла к моему дизайну.
Но смотрю, что спамеры в основном у меня на сайте вводят вручную, хотя добавила обе защиты от спама. Теперь пробую варианты с проверкой на http, т.к. задолбали. Если знаете, подскажите пожалуйста
Доброго времени суток!
Заинтересовала ваша форма – взял на тестирование.
Сразу выплыло, что если отправлять от 222@gmail.com или 333@mail.ru, то форма считает эти «емейлы» некорректными и требует «…ввести нормальный адрес…».
Ну, я с этим уже сталкивался, поэтому сразу заменил «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», иногда бывает надо, потом отпишусь….
благодарю за полезные комментарии
Дмитрий, спасибо Вам огромное за Ваши знания и за Ваш опыт, по-больше бы таких статей. Удачи Вам по жизни и в достижении целей.
А где писать свою почту и домен куда тебе будут приходить заявки от клиентов???
в файле contact-form.php, переменная $address, в тексте это написано
Здравствуйте, при нажатии на кнопку отправить 404 ошибка
zodchiydom.ru/forma.php
Подскажите пожалуйста в чем проблема?
страница не найдена — файла нет в том месте куда ссылается форма, проверьте куда вы его положили
Здравствуйте. Не подскажите как вставить форму в сайт. В общем на сайте есть обратная форма но она почему то не работает я попытался переделать на вашу.
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 = "alexy.ru@bk.ru";
$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 чем-то заполнено */
?>
В чем вопрос? Для чего вы комментарий с кодом публикуете? Весь алгоритм установки описан в статье.
Я использую CMS joomla, но захотел использовать именно вашу форму.
1) Вставил html код на одной из страниц сайта
2) На хосте закинул файл php в директорию сайта, папку images (сделал это специально, так как когда я прописываю путь к картинкам, то пишу так src=»images/картинка.jpg», и картинка находится)
3) когда я в форме нажимаю «Отправить», мне выдает 404 ошибку и в конце урл настоящей страницы убирается последнее слово после / и добавляется /images/contact-form.php.
что я делаю не так? из трех файлов я использую только php , код html прописываю на странице, css у меня другой.
404 ошибка означает что файл не найден по указанному адресу.
Что прописано в первой строке html кода формы в атрибуте action? Если php файл лежит не в корне, то надо указывать полный путь (_http://домен/папка/название файла и т.д.)
Добрый день.
Друзья попросили сделать обратную связь на сайте.
Попробовала поставить Вашу.
На попытку отправить письмо мне пишут:
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).
Спасибо огромное. Все получилось!
Здравствуйте.
Форма отличная. поставил защиту от спама. Но при введении неверного ответа идет открытие php файла-обработчика (белый екран).
Что-то не так, или так надо?
Спасибо за ответ)
Так и должно. Если хотите что-то выводить, то добавьте любой код перед exit
Добрый день! Можно ли оставить, чтобы отправитель заполнял только поле «телефон» а остальные поля убрать?
можно, удалите лишнее из формы и скрипта, этот вопрос уже задавался, читайте комментарии
когда я удаляю, то форма перестает отправлять письма
пришло! Спасибо!!!!!!!!!!!!!
К сожалению, для меня это сложно, не смогла разобраться, стала использовать formdesigner, согласна, что выше писали, что одна тема оформления только, но мне достаточно для моего небольшого сайта, ограниченные возможности в бесплатном тарифе, но мне, кажется, что для больших проектов, тарифы куда лояльнее в отличии от других конструкторов. Спасибо,Дмитрий, за вашу работу и поддержку пользователей, успехов вам в ваших проектах
не переходит на русские сайты( .рф), на (.ru) переходит а (.рф) не видит как ссылку, подскажите что нужно прописать?
кириллицу нужно переводить в пуникод — у Яндекса спросите как, онлайн конвертеры есть
Добрый день!
Спасибо за отличную форму!
Всё работает отлично. Переделал под свои нужды.
Вот только с одним моментом не знаю как справиться.
Как в обработчике contact-form.php сделать, чтобы в приходящем письме у некоторых строк был жирный (bold) шрифт?
Вот, к примеру, эти строчки:
Имя отправителя
Электронный адрес отправителя
Телефон отправителя
Сайт отправителя
Если подскажите, буду очень благодарен! )))
Нужно в 4-й атрибут функции mail (в нашем случае это переменная from) дописать заголовки, что тело письма содержит html, а потом уже в сообщении вставлять теги. Писать долго, вот здесь посмотрите, этот момент расписан — tradebenefit.ru/otpravka-pisem-mail-php-i-css
Спасибо! Разобрался ))
Ðлектронный Ð°Ð´Ñ€ÐµÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ: roma40rico16@gmail.com
Вот такое приходит в почту.., с чем связано ?
с кодировкой, читайте до конца статью и обсуждение в комментариях
Нашел решение в комментариях, спасибо!
Здравствуйте. Спасибо за форму! Но сообщения приходят пустыми (без данных из заполненной формы), только текст из переменной $mes:
Сообщение с сайта moisait.ru
Имя отправителя: (пусто)
Электронный адрес отправителя: (пусто)
Телефон отправителя: (пусто)
Сайт отправителя: (пусто)
Текст сообщения: (пусто)
Кодировка utf-8
Проверяйте переменные — соответствуют ли поля формы тому что присваивается в скрипте.
да, соответствуют
тогда смотрите правильно ли задан их вывод в тексте письма, можете проверить что в самих переменных вносится просто выведя их на странице без отправки сообщения.
у меня тоже самое
вводил и цифры, и латинские и русские — не имеет значения
что-то при правке не так сделали — проверяйте
Хорошая статья, принцип работы формы наконец понял 🙂 А вот про защиту спама отлично что написано. Когда-то намучился с разными формами, спамеры не отставали пока самодельные формы не сменил. С тех пор лишь Contact Form 7 использую для небольших форм и плагин uCalc от конструктора ucalc.pro. Там встроенная защита стоит, но можно и капчу при желании привязать.
Спасибо за форму! «Благодарность» провел :))
Однако, не все получилось гладко: при отправлении на почту Яндекса имя отправителя и сообщение отображаются «козябрами», а при отправлении на Рамблер эти поля оказываются пустыми…. Перепробовал все советы, но корректной работы формы так и не добился. Может подскажите что….
Все подобные проблемы связаны с кодировкой, других причин нет (я не встречал). Нужно ковырять в этом направлении — сохранение самих файлов (используйте для редактирования notepad++) и указание в html коде сайта (meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″).
Да, действительно, проблемы были из-за кодировки! Все исправил, теперь работает отлично! Спасибо!
Не приходит сообщение на почту
но говорит,что отправил:
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 без настроек почту вроде не отправляет, насколько мне известно — эту тему проработали?
Ошибка с заголовками в комментариях обсуждалась — полистайте выше.
Доброе время суток. за форму спасибо, всё работает, письма на почту приходят, у кого не приходят, значит могут быть две причины — движок и шаблон в кодировки 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 пишем название главной или любой другой страницы своего сайта
Всё проверено и протестировано, переадресация работает, письма на почту приходят
Здравствуйте, у меня тоже проблемка. Письма отправляются но приходят пустыми. Я тестирую отправку и выглядит вот так
Сообщение с сайта Летотур-шоп.ру.
Имя отправителя:
Электронный адрес отправителя:
Текст сообщения:
Но вчера спамер пробился и все поля были заполнены.
У меня же ничего не видно. Писал хостерам, сказали что ничего не ограничивают. С кодировкой все ОК
Ого, данная форма пользуется популярностью уже как 4 года))) Респект автору!)