Этот урок посвящен созданию формы обратной связи с использованием ранее изученных функций PHP. Форма будет обрабатывать данные, проверять их корректность, выводить сообщения об ошибках пользователю и отправлять сообщение администратору.
Создание HTML-формы
HTML-код формы:
<!DOCTYPE html>
<html>
<head>
<title>Обратная связь</title>
</head>
<body>
<h2>Форма обратной связи</h2>
<form action="" method="post">
<label for="from">От кого:</label><br>
<input type="text" id="from" name="from" value=""><br>
<label for="to">Кому:</label><br>
<input type="text" id="to" name="to" value=""><br>
<label for="subject">Тема:</label><br>
<input type="text" id="subject" name="subject" value=""><br>
<label for="message">Сообщение:</label><br>
<textarea id="message" name="message" rows="10" cols="20"></textarea><br><br>
<input type="submit" name="send" value="Отправить">
</form>
</body>
</html>
Использованы атрибуты id и name для элементов формы. Атрибут method="post" указывает на использование метода POST для отправки данных. action="" означает, что обработка формы происходит на той же странице.
Обработка данных формы с помощью PHP
PHP-код для обработки формы:
<?php
if(isset($_POST['send'])) {
// Выводим массив полученных данных для проверки (удалите в продакшене)
//print_r($_POST);
$from = $_POST['from'];
$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$from = htmlspecialchars($from);
$to = htmlspecialchars($to);
$subject = htmlspecialchars($subject);
$message = htmlspecialchars($message);
session_start();
$_SESSION['from'] = $from;
$_SESSION['to'] = $to;
$_SESSION['subject'] = $subject;
$_SESSION['message'] = $message;
$errorFrom = "";
$errorTo = "";
$errorSubject = "";
$errorMessage = "";
if (empty($from) || !preg_match("/^[^@]+@[^@]+.[^@]+$/", $from)) {
$errorFrom = "<span style='color:red;'>Введите корректный email</span>";
}
if (empty($to)) {
$errorTo = "<span style='color:red;'>Введите email получателя</span>";
}
if (empty($subject)) {
$errorSubject = "<span style='color:red;'>Введите тему сообщения</span>";
}
if (empty($message)) {
$errorMessage = "<span style='color:red;'>Введите сообщение</span>";
}
if (empty($errorFrom) && empty($errorTo) && empty($errorSubject) && empty($errorMessage)) {
$subjectEncoded = "=?UTF-8?B?".base64_encode($subject)."?=";
$headers = "From: " . $from . "r\n" .
"Reply-to: " . $from . "r\n" .
"Content-Type: text/plain; charset=UTF-8r\n";
mail($to, $subjectEncoded, $message, $headers);
// Перенаправление на страницу успеха
header("Location: success.php?sent=1");
exit;
}
}
?>
В HTML-форме значения из сессии используются в атрибуте value для каждого поля ввода:
<input type="text" id="from" name="from" value="<?php echo isset($_SESSION['from']) ? $_SESSION['from'] : ''; ?>"><br>
Аналогично для остальных полей. Сообщения об ошибках выводятся в форме:
<span><?php echo $errorFrom; ?></span><br>
Аналогично для остальных полей.
Страница успеха (success.php)
Файл success.php:
<?php
session_start();
if(isset($_GET['sent']) && $_GET['sent'] == 1) {
echo "Вы успешно отправили сообщение на email: " . $_SESSION['to'];
}
?>
Этот файл выводит сообщение об успешной отправке письма.
В этом уроке создана функциональная форма обратной связи, обрабатывающая данные, проверяющая их корректность, выводящая сообщения об ошибках и отправляющая электронное письмо. Использование сессий позволяет сохранять данные пользователя при ошибках, а функция htmlspecialchars() обеспечивает защиту от XSS-атак. Урок обобщает ранее изученные темы, такие как условные операторы, сессии, работа с массивами и отправка писем.