Делаем форму обратной связи
Наверняка на многих сайтах вы видели форму обратной связи. Как правило она позволяет наиболее быстрым образом отправить какое-то послание администраторам сайта, так как представляет собой простое текстовое поле, в которое можно просто ввести любой текст и нажать кнопку «Отправить». В данном уроке мы сделаем форму обратной связи на PHP.
Для большей простоты мы напишем скрипт, который будет записывать обращения пользователя в файл.
Сама форма будет выглядеть следующим образом:
Давайте создадим файл с именем feedback.php и напишем HTML-код формы.
<html>
<head>
<title>Обратная связь</title>
</head>
<body>
<div style="text-align: center">
<h1>Форма обратной связи</h1>
<form action="feedback.php" method="post">
<label for="text">Введите ваш текст:</label><br>
<textarea name="text" id="text" cols="55" rows="5"></textarea><br>
<input type="submit" value="Отправить">
</form>
</div>
</body>
</html>
Давайте будем записывать данные, переданные пользователем в файл feedback.txt. Так как мы не хотим, чтобы данный файл был доступен всем желающим, нельзя положить его в папку www. Поэтому в папке myproject.loc рядом с папкой www создадим ещё одну папку с именем private. А внутри неё уже создадим файл feedback.txt.
Осталось только написать логику, которая будет сохранять текст, переданный пользователем.
Для этого нам нужно:
- Получить данные POST-запроса, и убедиться, что переданный текст не пустой
- Дозаписать в конец файла этот текст. При этом перед текстом следует добавить дату и время создания записи.
Делается это проще простого:
<?php
$result = null;
$text = $_POST['text'] ?? '';
if (!empty($text)) {
$datetime = date(DATE_ATOM);
$isWrote = (bool) file_put_contents(
__DIR__ . '/../private/feedback.txt',
$datetime . PHP_EOL . $text . PHP_EOL . PHP_EOL,
FILE_APPEND
);
if ($isWrote === false) {
$result = 'Не удалось отправить сообщение, попробуйте ещё раз.';
} else {
$result = 'Ваше сообщение успешно отправлено!';
}
}
?>
<html>
<head>
<title>Обратная связь</title>
</head>
<body>
<div style="text-align: center">
<h1>Форма обратной связи</h1>
<?php if ($result !== null): ?>
<div><b><?= $result ?></b></div><br>
<?php endif; ?>
<form action="feedback.php" method="post">
<label for="text">Введите ваш текст:</label><br>
<textarea name="text" id="text" cols="55" rows="5"></textarea><br>
<input type="submit" value="Отправить">
</form>
</div>
</body>
</html>
Пройдёмся по тому, что для нас новенькое.
- Функция date() возвращает дату в указанном формате. Ей мы передаём константу DATE_ATOM, которая содержит в себе строку: “Y-m-d\TH:i:sP”. В итоге будет сформирована следующая дата: 2018-04-09T06:13:38+03:00.
- Далее мы видим приведение результата выполнения функции file_put_contents к типу boolean. Дело в том, что эта функция возвращает число байт, записанных в файл, или false – если произошла ошибка при записи. Таким образом, если мы хоть что-то записали, то после преобразования любого ненулевого числа к типу boolean мы получим true. Результат этого выражения мы положили в переменную isWrote (записано ли), и затем смотрим – если true, то в $result положим текст о том, что сообщение успешно отправлено, а иначе – положим туда текст с ошибкой.
Всё остальное нам уже знакомо.
Проверка
Давайте теперь проверим работу формы и отправим несколько сообщений.
После отправки сообщений будет выводиться соответствующее уведомление.
Давайте теперь посмотрим содержимое файла feedback.txt.
Как видим, всё записалось. Для того чтобы можно было связаться с отправителем, на форму стоит добавить поле email и записывать его тоже.
Вот и всё