Скрипт формы обратной связи
Не секрет, что очень часто приходится как-то общаться с посетителями своего сайта. Разумеется, можно просто дать свой e-mail (как сделал я), а можно предложить и другой способ - это форма обратной связи. Разумеется, здесь потребуется знание PHP. Но чтобы Вам не надо было писать всё с нуля, я предоставляю Вам очень даже хороший скрипт формы обратной связи.
Ссылка на скачивание скрипта: скачать скрипт формы обратной связи.
После скачивания извлекайте архив на Ваш сайт (смотрите, ничего не сотрите у себя). Теперь давайте его настроим. Для этого открываем файл "config.php". И меняем значения следующих переменных:
- "mailto" - поставьте вместо "[email protected]" адрес своего почтового ящика.
- "charset" - поставьте кодировку, хотя если Ваш сайт русскоязычный, то можете оставить "windows-1251".
- "content" - советую оставить "text/plain", так как вряд ли Ваши посетители будут отправлять Вам сообщения в HTML-формате.
Теперь Вы можете запустить файл index.php у скрипта. В результате, перед Вами возникнет форма. Можете её заполнить и отправить письмо.
Теперь встаёт вопрос: "Как вставить эту форму обратной связи на свой сайт?". Чтобы это сделать, найдите файл, который отвечает у Вас за страницу обратной связи (пусть это будет "feedback.html"). Сразу измените расширение на php (то есть на "feedback.php"). Скопируйте код из index.php скрипта в файл со страницей обратной связи (feedback.php). Теперь Вы можете делать всё, что пожелаете нужным между тегами <html> и </html>, только не стирайте то, что Вы вставили из index.php. То что между тегов <?php и ?> тоже не трогайте, если точно не знаете, что делаете.
И, наконец, если Вам не нравится внешний вид формы, то Вы можете его подкорректировать в файле "styling.css".
Если у Вас остались какие-либо вопросы, либо происходят какие-то глюки со скриптом (я его не тестировал), то пишите мне на e-mail, чтобы я исправил.
Чтобы не зависеть от работы чужих скриптов, научитесь их создавать самостоятельно. Этому Вас научит мой Видеокурс "PHP и MySQL с Нуля до Гуру": http://srs.myrusakov.ru/php
-
- Михаил Русаков
Комментарии (90):
Здравствуйте, у меня сайт на joomla, вставила себе на страничку данный скрипт, все сделала как здесь описано, но в ответ тишина. Письма не приходят. Почему, подскажите, пожалуйста.
Ответить
Как Вы добавляли этот скрипт на Joomla? Опишите поподробнее последовательность действий.
Ответить
Извлекла архив и все содержимое папки "sendmail" бросила в корневой каталог сайта. В файле "config.php" ввела в "mailto" свой адрес и др. по тексту. Из "index.php" скопировала от "<html>" до "</html>" и вставила в созданный материал сайта joomla. Все. Пишу письмо и делаю отправить. Идет переброс на главную и все. В почте пусто.
Ответить
На Joomla так не установить. Нужно завести отдельную папку куда всё это скопировать. Однако, тогда не будет Вашего дизайна. В общем, эта затея бессмысленная. Данный скрипт создан для сайтов с нуля. А для Joomla поищите готовый компонент с формой обратной связи.
Ответить
Почему бессмысленная? В joomla есть возможность вставлять подобные скрипты, а Ваш скрипт мне понравился. Но мне кажется, загвоздка в е-мейле - как-то он не так или не там прописан. Вы можете помочь или нет)
Ответить
Вы неправильно делаете, поэтому я Вам и советовал выбрать путь полегче. А если хотите трудностей, то, во-первых, Вы скопировали в материал от html до html. А всю обработку просто взяли и выкинули. Поэтому нужно вставить скрипты. Для этого существует компонент Jumi. Он позволяет в статьи добавлять скрипты. И так: 1. Скачать и установить Jumi. 2. Соединить в один файл все файлы скрипта, только аккуратно, чтобы не возникло ошибок. 3. Далее создать материал, куда вставить всё, что внутри body, а также подключить через Jumi в эту же статью скрипт, который Вы собрали в один файл. Как видите, задача непростая будет, но вполне осуществимая.
Ответить
Я хочу трудностей))), потому что на сайте хочу сделать несколько похожих форм на разных страницах. И большое спасибо Вам за пояснения, но не могу установить ни одного компонента. На локальном компьютере все понятно, но в сайте на хостинге я не знаю в какую папку сбросить компонент, чтобы его загрузить на сайт через "компонент-установить". Может Вы знаете. Буду очень благодарна.
Ответить
В "Установке расширений" просто укажите архив для загрузки (первое поле там). И загрузите, после чего оно автоматически установится. http://myrusakov.ru/joomla-ustanovka-extensions.html
Ответить
Я именно так и делала, если устанавливаю через "Загрузить файл пакета" - пишет ошибку: JFolder::create: Невозможно создать каталог Unable to write entry". Если "Установить из папки", указываю папку на хостинге, то пишет "Укажите папку пакета". Что я делаю не так?
Ответить
Установите права 777 на все каталоги. И посмотрите, правильно ли прописаны пути к tmp.
Ответить
У Вас есть скайп-так быстрее будет))) Права стоят 777.
Ответить
Скайпа нет, ICQ только для клиентов. Для остальных комментарии, форум (с 30-го апреля) и почта. Кстати, такая проблема ещё возникает, когда включён safe mode. Если он включён, то установить можно только сохранив сайт на локальный сервер, установить расширение, а после отправить обратно на удалённый.
Ответить
А где посмотреть включен или нет?
Ответить
Помощь->Информация о системе->Установки PHP. По-моему, первый же параметр это "Безопасный режим".
Ответить
Стоит выкл. Буду разбираться, огромное вам спасибо за помощь!
Ответить
Зайдите в помощь, перейдите во вкладку "Права на папки". Там должны быть все папки доступны для записи.
Ответить
Да, я проверяла
Ответить
В общем, тогда сделайте следующее: попытайтесь закомментировать строку "$obd = ini_get('open_basedir');" в файле "libraries/joomla/filesystem folder.php". Если это не поможет, то убедитесь, что путь к logs и tmp прописан правильно. Он почти наверняка должен отличаться от того, что стоит на локальном. Также это должен быть физический путь. Например, на Yutex (мой хостинг) он таков: /home/username/www/logs и /home/username/www/tmp Больше источников ошибок не могу предположить, поэтому если Вы уверены, что пути указаны правильно, то тогда копируйте к себе на локальный, устанавливайте, а потом отправляйте на удалённый.
Ответить
при получение сообщения мне приходит ни текст а слово загрузить после чего я могу открыть текст а как сделать чтобы сразу на почту приходил сам текст и Михоил если есть аська или скайп поделитесь!
Ответить
При получении сообщения точно должен приходить именно текст. Это чётко видно в исходниках, и также я проверил. Возможно, что сбились какие-нибудь настройки, поэтому попробуйте скачать скрипт заново. В настройках исправьте только e-mail получателя. Аська раньше была, но затем она стала отнимать слишком много времени, и сейчас меня могут по ней спрашивать только мои клиенты. А все свои вопросы Вы можете задавать на форуме.
Ответить
http://www.imagepost.ru/images/2/12/212_9.JPG Михаил вот вам скришот смотрите вы что то путаете надо чтобы приходил просто текст а не это!
Ответить
Переменная $content (в config.php) должна равняться "text/plain". Если не поможет, то заново перезагрузите скрипт, так как я там исправил один момент. Если и это не поможет, то попробуйте отправить письмо на другой сервер, например, mail.ru. Возможно, проблема в настройках самого google.
Ответить
Notice: Undefined index: posRegard in W:\html\sam.local\www\config.php on line 4 Notice: Undefined index: posText in W:\html\sam.local\www\config.php on line 6 Notice: Undefined index: act in W:\html\sam.local\www\index.php on line 8 Вот ошибка выскакивает при открытие формы. Всё из текущего архива извлёк в первоначальную дерикторию, из файла index.php, который отвечал за файл вызова обратной связи, извлёк весь код в свой файл обратной связи. Сообщения не отправляет.
Ответить
Для решения первых двух проблем добавьте такие строчки: $charset = “windows-1251″; if (isset($_POST['posRegard'])) { $subject = $_POST["posRegard"]; } $content = “text/plain”; if (isset($_POST['posText'])) { $message = $_POST['posText']; } $statusError = “”; Для решения последней проблемы замените: if ($_POST['act'])== “y”) на строчку: if (isset($_POST['act']) && $_POST['act']== “y”)
Ответить
Как добавить дополнительные поля, можете помоч?
Ответить
Это дело не самое простое, и писать здесь достаточно много придётся. Изучайте PHP, тогда сможете это сделать.
Ответить
А можете подсказать как убрать редирект на главную страницу...Я просто немного запутался...Я хочу чтобы выводилось сообщение после параграфа - Обратная связь,а оно просто сразу переходит на главную! Как это убрать???
Ответить
Откуда у Вас там редирект? Не понятно с чем именно проблема.
Ответить
Ну у меня при отправке письма переходит на главную страницу "но эта страница сильно уменьшена не понимаю почему - она как квадратик" с чем это может быть связано?
Ответить
Создайте отдельную папку /feedback с содержимым скрипта, а в ней уже оставьте index.php с формой обратной связи.
Ответить
Здравствуйте, Михаил! Письма на почту через данную Вами форму обратной связи с каким интервалом должны отправляться? У меня почему то, они приходят через раз. Т.е. если отправить сообщение, а за ним следом еще одно, то первое придет, а второе нет. Если после отправки первого сообщения сделать интервал в 10 минут, то так же, письмо не приходит на почту. Не подскажете в чем м.б.проблема? заранее, спасибо! п.с. файлы залиты на вн.тестовый сервер (если это играет роль).
Ответить
Может играть роль то, как работает почтовый сервер. Тем более так как там должна стоять защита от спама, и письма могут блокироваться.
Ответить
Попробовала. Получилось непонятно. Если я отправляю сообщения - то письма не приходят. А если сообщения пишет другой человек с другого ip - письма все приходят. Михаил, подскажите, пожалуйста, а как сделать, что бы после отправки сообщения, появлялось бы только одно уведомление что сообщение успешно отправлено? при этом сама форма уже не должна отображаться.
Ответить
Уже не помню где там в коде вывод уведомления, но можете просто сделать сразу редирект после него.
Ответить
"можете просто сделать сразу редирект после него." а как это сделать? конкретно в каком файле и какой код нужно прописать (для чайника)? заранее,спасибо большое!
Ответить
В обработчике формы, найдите там функцию отправки почты, и после неё делайте редирект через header()
Ответить
session_start(); Почему в этой строке выдает ошибку?
Ответить
session_start(); должно стоять в самой первой строке кода, и до него не должно быть никакого вывода.
Ответить
<?php include('kcaptcha/kcaptcha.php'); session_start(); require_once("config.php"); Изначально стоит вот так вот. <?php session_start(); include('kcaptcha/kcaptcha.php'); require_once("config.php"); Сделал так, все без изменений.!!! session_start(); <?php include('kcaptcha/kcaptcha.php'); require_once("config.php"); И даже так )))
Ответить
Проверьте что нет никаких пробелов перед <?php. И ещё, если у Вас кодировка utf-8, стоит именно "utf-8 без BOM".
Ответить
Скажите пожалуйста, зачем, тогда, в форме поле "Имя" если оно не отображается в письме? или это у меня только?
Ответить
Если посмотрите в коде, то оно присоединяется к $headers, которые отправляются с письмом: From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">
Ответить
Михаил, сделал всё как вы описали, но при нажатии кнопки отправить, просто перекидывает на главную страничку и всё.
Ответить
http://blog.myrusakov.ru/feedback.html
Ответить
Здравствуйте! Салам-алейкум! Народ, вот решил поделиться своим опытом использования скрипта :) Собственно зарегался из-за этого. Я установил этот скрипт, сменил почту на свою в настройках. Пыхтел и так и эдак, но он, собака :) ,не работал! Решение было простым -- я создал почтовый ящик у себя на хосте. Оказывается чтобы скрипт работал должен быть хоть 1 ящик на хосте у тебя. И вот еще что. Почта на Mail.ru не работает. Видимо там не принимаются письма с моего сайта (у меня кириллический домен .рф). Удачи и процветания!
Ответить
здравствуйте,как сделать чтобы форма поиска по сайту , выполняла свои функции.тоесть поиск по сайту?спасибо.
Ответить
http://myrusakov.ru/video-search.html
Ответить
здравствуйте,форму обратной связи можно как нибудь протестить на денвере?спасибо.
Ответить
Можно.
Ответить
Здравствуйте Михаил. Следовал вашим инструкциям по установки скрипта. К сожалению скрипт не работает, не знаю в чем причина. Во первых не отправляет, во вторых при неправельном вводе также нет действий со стороны скрипта, просто страница переходит на главную? где промах? спасибо.. П.С. у вас на сайте форма работает. :)
Ответить
http://blog.myrusakov.ru/feedback.html
Ответить
Михаил, зравствуйте. спасибо за ваше старание и понимание. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ответить
Здравствуйте Михаил! У меня проблема. С формы обратной связи мне надо сделать форму заказа, по этому мне надо добавить много полей, все это делаю без проблем, саму форму сделал в таблице, но не могу разобраться с обработчиком и файлом config.php. Например добавляю поле и не как не могу сделать чтоб набранные данные в этому поле отправлялись на мой е-meil. Подскажите пожалуйста решение, или может есть другие формы.
Ответить
http://blog.myrusakov.ru/feedback.html - свою форму создавайте с нуля.
Ответить
Здравствуйте! Воспользовался вашем уроком, в принципе все понятно кроме одного: сама отправка письма. В $to = "[email protected]"; - здесь записываю свой адрес электронной почты на который должны приходить сообщения, тогда зачем $from = ""; - как понять адрес отправителя, отправитель это случайный пользователь .
Ответить
$from - это от кого придёт письмо, то есть кто будет стоять в обратном адресе.
Ответить
так что мне там указывать? $from = "что здесь мне писать?";
Ответить
еще одно, когда я добавляю свои поля мне на странице почты вместо адреса отправителя приходит вот что: [email protected] - это какой то email с моим логином от моего хостинга, подскажите какое решение?
Ответить
Вот и пишите в $from что-нибудь нормальное, чтобы не писался другой e-mail.
Ответить
Михаил конечно я набрал на пример слово заказ в $from, и вот что получились: заказ@srv10-h-st.jino.ru. когда я добавляю свои поля мне на почту приходит вот что, уже без слова заказ: [email protected] Джино+7 (495) 229-30-31Москва, ул. Юннатов, 18, оф. 709. Подскажите пожалуйста какое решение?
Ответить
В from должен быть e-mail адрес, а не какое-то слово.
Ответить
Здравствуйте Михаил. Вписал свой другой e-mail адрес, все ок. работает, но когда я добавляю еще поля и снова мне на почту вместо e-mail адреса отправителя приходит [email protected] Джино+7 (495) 229-30-31Москва, ул. Юннатов, 18, оф. 709. Может надо еще какой то код прописывать, помогите пожалуйста?
Ответить
http://blog.myrusakov.ru/feedback.html
Ответить
Здравствуйте Михаил. Посмотрел еще ваш урок, мне одно не понятно: у форме есть поле (Ваше имя... $name = $_POST['name'];) набираете вы там имя Вася но у вас на почту это имя не приходит, как вы это можете объяснить. Хорошо добавляю $name в mail, имя приходит на мою почту но возникает старая проблема, вместо e-mail адреса отправителя (где я прописал: $from = "[email protected]";) приходит [email protected] Джино+7 (495) 229-30-31Москва, ул. Юннатов, 18, оф. 709. Понимаете мне надо сделать форму заказа автомобилей, в итоге мне надо добавлять много полей.
Ответить
$from = "Вася <[email protected]>";
Ответить
Какой код нужно набрать в $from = "..." чтоб приходил e-mail отправителя?
Ответить
Здравствуйте Михаил.Помогите мне решить проблему следующего рода. Я сделал скажем так короткую форму обратной связи по вашему уроку.И данная форма выбивает мне предупреждение: Warning: Cannot modify header information - headers already sent by (output started at /home/lidertes/public_html/php/telefon.php:1) in /home/lidertes/public_html/php/telefon.php on line 11. Как я понимаю тут предупреждение мол не получилось сменить ссылку в строке браузера так как она уже изменена. Но ошибку в коде я не вижу. Помогите решить проблему... Вот мой код
Ответить
<?php $nomer = $_POST['nomer']; $to = "[email protected]"; $from = "[email protected]"; $subject = "Текст"; $subject = "=?utf-8?B?".base64_encode($subject)."?="; $headers = "From: $from\r\nReply-To: $from\r\nContent-type: text/plain; charset=utf-8\r\n"; mail($to, $subject, $nomer, $headers); $redir = $_SERVER['HTTP_REFERER']; if (strpos($redir, "mail=1") === false) $redir .= "?mail=1"; header("Location: $redir"); ?>
Ответить
http://myrusakov.ru/php-modify-header.html
Ответить
Здраствуйте. У меня ошибку выводит. Предупреждение: дата () [function.date]: Это не безопасно полагаться на часовой пояс системы настройки. Вы * обязательны для заполнения * использовать date.timezone настройки или date_default_timezone_set () функция. В случае, если Вы использовали любой из тех методов, и Вы все еще получаете это предупреждение, вы, скорее всего, неправильно часового пояса. Мы выбрали 'Asia / Tokyo »для '9 .0/no DST' вместо этого в C: \ Apache \ test.ru \ WWW \ index.php на линии 41 Внимание: почта () [function.mail]: Не удалось подключиться к почтовому серверу на "локальный" порт 25, проверьте "SMTP" и "smtp_port» в настройках ini_set php.ini или использования () в C: \ Apache \ теста. RU \ WWW \ index.php на линии 45
Ответить
Пишите свою форму обратной связи: http://blog.myrusakov.ru/feedback.html
Ответить
Здравствуйте. Форму работает. Отсылает письма. Текс письма приходит в непонят но что (набор символов),не соответсвует кодировке. Невозможно вернуть. Танцы с бубном не помогли. Знание php очень слабые. Помогите в чем проблема
Ответить
http://blog.myrusakov.ru/feedback.html
Ответить
Это я смотрел.Там не ни чего про кодировку самого тела письма. Само сообщение портится. Послал "Проверка сообщения" а пришло �������� ��������� хотя в списке писем отображается вроде правильно. Андрей Сообщение- Проверка сообщения нокогда откроешь письмо там квадратики
Ответить
http://myrusakov.ru/php-encoding-problems.html И ещё проверьте кодировку в заголовках письма ($headers), указана она там или нет.
Ответить
Здраствуйте. Проблема решена. На самом деле плохо собирался заголовок письма $headers
Ответить
У меня такой скрипт для обратной связи <?php $name = $_POST['name']; $topic = $_POST['topic']; $message = $_POST['message']; $form = $_POST['form']; /* Подключение к базе данных */ $dbc = mysqli_connect('localhost', 'имя', 'пароль', 'базаданных') or die ('Ошибка соединения с сервером, возможно он был отключен всвязи с неплановыми техническими работами.'); /*Соединение с таблицей*/ $query = "INSERT INTO mail (name, topic, message) " . "VALUES ('$name', '$topic', '$message')"; $result = mysqli_query($dbc, $query) or die('Ошибка отправки сообщения, возможно сервер отключен из-за внеплановых тезнических работ.'); mysqli_close($dbc); echo '<div class="thankyou">Спасибо за отправку письма<br>'; echo 'Через неоторое время оно будет рассмотрено</div>'; ?>
Ответить
Сообщение не приходит на email((можете сказать в чем проблема
Ответить
Ошиблись в коде значит. Либо запускаете через локальный сервер, который почту и не отправляет.
Ответить
на локальном сервере все работает,писмо приходит а вот на реальном сервере никак не хочет работать
Ответить
Тогда проблема может быть со стороны хостера. Иногда сервис отправки почты может быть ограничен, чтобы от спамеров защитить, например.
Ответить
Здравствуйте,вставил данный скрипт к себе на страницу,но не приходит письмо на почту.Когда нажимаешь "отправить",страница начинает перезагружаться и виснет.
Ответить
Скрипт рабочий, а по Вашей причине может быть тысяча проблем. Внимательнее делайте.
Ответить
Помогите написать скрипт к такой форме? <form action="..." method="POST"> <p>Добавить e-mail:</p> <input type="email" placeholder="E-mail:" maxlength="30" required><br> <p>Добавить тел:</p><!-- Чтобы в текстовом поле можно было вводить только цифры --> <input type="tel" placeholder="Tel:" maxlength="20" required><br> <p>Добавить ссылку:</p> <input type="url" placeholder="Url:" required><br> <p>Добавить баннер:</p> <input type="file" accept="image/*" required><br> <input type="submit" value="ОТПРАВИТЬ" id="button"><br> </form>
Ответить
Добрій вечер. Мучает один вопрос. Почему когда приходит сообщение на єлектронную почту, то оно отображается как файл "noname.txt"? Как можно сделать, чтобы отображалось как текст или как изменить "noname" на другое назнавание? Спасибо
Ответить
Здравствуйте. А как сделать, чтобы можно было еще прикрепить файлы?
Ответить
Подбираете где по разумной цене заказать надёжную мебель в Волгограде? Онлайн интернет магазин "Где Мебель" в г.Волгоград http://gde-mebel.com всегда может предложить широкий асортимент мебели от крупнейших брендов России и СНГ. Наш магазин всегда рад помочь Вам подобрать качественную мебель, которая бы замечательно вписывалась в ваш интерьер и при этом не била по карману. Интернет каталог мебели нашего интернет магазина в волгограде http://gde-mebel.com/catalog имеет множество наименований. Наш магазин предлагает широкий выбор мебели, и предоставляет Вам огромный асортимент различной мебели под любой вкус. Онлайн нтернет-магазин "Где Мебель" городе Волгограде всегда с удовольствием рад вам помочь! Мы всегда вам рады!
Ответить
Здравствуйте подскажите как вычленить емаил человека заходившего на сайт
Ответить
Здравствуйте. Я скачал скрипт формы обратной связи. Сделал всё по инструкции. XAMPP настроен правильно. Во-первых, криво отображаются данные строк: $errors_name = 'Ââåäèòå âàøå èìÿ'; $errors_mailfrom = 'Неверно указан E-mail адрес'; $errors_incorrect = 'Çàïîëíèòå ïðàâèëüíî Âàø E-mail àäðåñ'; $errors_message = 'Íàáåðèòå òåêñò âàøåãî ñîîáùåíèÿ'; $errors_subject = 'Ââåäèòå òåìó ñîîáùåíèÿ'; $captcha_error = 'Ошибка Капчи'; $send = 'Âàøå ñîîáùåíèå óñïåøíî îòïðàâëåíî'; Некоторые я интуитивно озаглавил. Во-вторых, не удаётся отправить данные, появляется ошибка: Notice: Undefined index: posRegard in C:\xampp\htdocs\maiya\config.php on line 4 Notice: Undefined index: posText in C:\xampp\htdocs\maiya\config.php on line 6 Notice: Undefined index: act in C:\xampp\htdocs\maiya\form.php on line 8 Какие данные нужно указать в этих строках? В-третьих, не отображается текст Капчи. Почему так?
Ответить
Здравствуйте. Нигде не написано, как к форме приделать защиту от спама или калькулятор расчетов?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.