Введение
В этой статье я хочу показать, как быстро и просто реализовывается форма обратной связи на php. Задача эта не новая, но практически при создании каждого сайта всплывает необходимость в такой форме. Чтобы постоянно не изобретать велосипед, я решил набросать эту статью.
Для создания формы обратной связи нам потребуется php, поскольку отправки писем на одном html невозможна. Все что нам потребуется — это один файл, например расположим его в папке /feedback/ и назовем index.php.
Логика формы следующая: при загрузке страницы, делаем проверку — были отправлены данные или нет. Если ни чего не отправлялось, то просто отображаем форму с полями — имя, e-mail и текст сообщения. Если же данные были отправлены, то проверим что нам пришло. В случае, когда все данные корректные, отправляем их на свой почтовый ящик. А когда данные не корректные, например, не все поля были заполнены, мы будем выводить сообщение о ошибке.
С логикой разобрались, теперь нужно написать код.
Простая форма обратной связи на php. Код
Ниже я привел код полностью рабочей формы обратной связи с подробными комментариями.
<?php $msg_box = ""; // в этой переменной будем хранить сообщения формы if($_POST['btn_submit']){ $errors = array(); // контейнер для ошибок // проверяем корректность полей if($_POST['user_name'] == "") $errors[] = "Поле 'Ваше имя' не заполнено!"; if($_POST['user_email'] == "") $errors[] = "Поле 'Ваш e-mail' не заполнено!"; if($_POST['text_comment'] == "") $errors[] = "Поле 'Текст сообщения' не заполнено!"; // если форма без ошибок if(empty($errors)){ // собираем данные из формы $message = "Имя пользователя: " . $_POST['user_name'] . "<br/>"; $message .= "E-mail пользователя: " . $_POST['user_email'] . "<br/>"; $message .= "Текст письма: " . $_POST['text_comment']; send_mail($message); // отправим письмо // выведем сообщение об успехе $msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>"; }else{ // если были ошибки, то выводим их $msg_box = ""; foreach($errors as $one_error){ $msg_box .= "<span style='color: red;'>$one_error</span><br/>"; } } } // функция отправки письма function send_mail($message){ // почта, на которую придет письмо $mail_to = "my@mail.ru"; // тема письма $subject = "Письмо с обратной связи"; // заголовок письма $headers= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма $headers .= "From: Тестовое письмо <no-reply@test.com>\r\n"; // от кого письмо // отправляем письмо mail($mail_to, $subject, $message, $headers); } ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Обратная связь</title> </head> <body> <br/> <?= $msg_box; // вывод сообщений ?> <br/> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="frm_feedback"> <label>Ваше имя:</label><br/> <input type="text" name="user_name" value="<?=($_POST['user_name']) ? $_POST['user_name'] : ""; // сохраняем то, что вводили?>" /><br/> <label>Ваш e-mail:</label><br/> <input type="text" name="user_email" value="<?=($_POST['user_email']) ? $_POST['user_email'] : ""; // сохраняем то, что вводили?>" /><br/> <label>Текст сообщения:</label><br/> <textarea name="text_comment"><?=($_POST['text_comment']) ? $_POST['text_comment'] : ""; // сохраняем то, что вводили?></textarea> <br/> <input type="submit" value="Отправить" name="btn_submit" /> </form> </body> </html>
Вот и все, для тех копу не терпится попробовать форму в действии, я выложил исходники в архиве — вот тут.
Спасибо большое автору за доступное пояснение. Мне как новичку пригодилось. Если будут статьи как такую простенькую форму максимально безопасно внедрить в самый простой модуль джумлы для собственных нужд, было бы прекрасно. Все доступные компоненты очень тяжелые и мудреные. А это решение само по себе прекрасно. ReCapcha Google с ней работает отлично в джумле. Вопросы только по методу отправки. Через настроенный SMTP не очень хочет работать. Хорошо сложилось только с phpMail
Здравствуйте! Ваш код не работает. На емеил ничего не приходит.
Добрый день! Проверьте, что возвращает функция mail. Возможно сервер не отправляет письмо. Если пробуете локально, то скорее всего не будет работать. Можно вместо стандартного mail использовать smtp: https://vk-book.ru/novaya-versiya-klassa-sendmailsmtpclass-otpravka-fajlov-cherez-smtp-s-avtorizaciej-po-protokolu-ssl-na-php/
Нихрена не работает. В полях выводится код вместо плейсхолдеров. При отправке пишет, что такого пути нет —
Код, действительно, не работает ((
А как сделать без емейл? Чтобы просто телефон был?
Информация интересная . Я для своего сайта делал форму через https://formfor.site, работает отлично. Сообщения уходят в telegram и почту.
рекламщик обоссаный