Пусть у нас есть некоторая форма:
<form method="POST">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
Давайте сохраним данные этой формы в базу:
<?php
if (!empty($_POST)) {
// сохраняем в базу
}
?>
Здесь, однако, нас поджидает проблема: если обновить страницу браузера, то форма будет отправлена и сохранена еще раз, породив дубль данных.
Для решения проблемы нужно после сохранения формы выполнить редирект на эту же страницу:
<?php
if (!empty($_POST)) {
// сохраняем в базу
header('Location: form.php');
}
?>
Сделайте форму и реализуйте ее сохранение в БД после отправки. Избавьтесь от двойного сохранения после отправки.
Вывод сообщения об успехе
Давайте теперь сделаем так, чтобы после редиректа на страницу выводилось сообщение об успехе сохранения. Используем для этого флеш сообщения:
<?php
session_start();
if (!empty($_POST)) {
// сохраняем в базу
$_SESSION['flash'] = 'форма успешно сохранена';
header('Location: form.php');
}
if (isset($_SESSION['flash'])) {
echo $_SESSION['flash'];
unset($_SESSION['flash']);
}
?>
Модифицируйте предыдущую задачу так, чтобы на экран выводилось сообщение об успешном сохранении формы.
Валидация формы
Представим теперь, что вам необходимо выполнять валидацию формы. Если валидация пройдена успешно, то форму будем сохранять в бд и выводить сообщение об успехе. В противном случае нужно вывести сообщение о неудаче. Реализуем:
<?php
session_start();
if (!empty($_POST)) {
if (валидация формы) {
// сохраняем в базу
$_SESSION['flash'] = 'форма успешно сохранена';
header('Location: form.php');
} else {
$_SESSION['flash'] = 'форма не прошла валидацию';
}
}
if (isset($_SESSION['flash'])) {
echo $_SESSION['flash'];
unset($_SESSION['flash']);
}
?>
Модифицируйте предыдущую задачу так, чтобы выполнялась валидация формы. Сделайте так, чтобы данные формы не исчезали после отправки.
Модифицируйте предыдущую задачу так, чтобы данные формы не исчезали после отправки.