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

Введение

Простая форма обратной связи на phpВ этой статье я хочу показать, как быстро и просто реализовывается форма обратной связи на 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>

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

Рассказать друзьям:


Оценить:
(19 оценок, среднее: 4,37 из 5)

Простая форма обратной связи на php: 8 комментариев

  1. Спасибо большое автору за доступное пояснение. Мне как новичку пригодилось. Если будут статьи как такую простенькую форму максимально безопасно внедрить в самый простой модуль джумлы для собственных нужд, было бы прекрасно. Все доступные компоненты очень тяжелые и мудреные. А это решение само по себе прекрасно. ReCapcha Google с ней работает отлично в джумле. Вопросы только по методу отправки. Через настроенный SMTP не очень хочет работать. Хорошо сложилось только с phpMail

    1. Добрый день! Проверьте, что возвращает функция mail. Возможно сервер не отправляет письмо. Если пробуете локально, то скорее всего не будет работать. Можно вместо стандартного mail использовать smtp: https://vk-book.ru/novaya-versiya-klassa-sendmailsmtpclass-otpravka-fajlov-cherez-smtp-s-avtorizaciej-po-protokolu-ssl-na-php/

  2. Нихрена не работает. В полях выводится код вместо плейсхолдеров. При отправке пишет, что такого пути нет —

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

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

*

code