Как отправить форму в php, чтобы она не отправлялась повторно, после обновления страницы

Доброе время суток, уважаемые HABRовчане!


Сегодня тема пойдет об отправке формы на html-страничке, чтобы, при повторном обновлении, она не отправлялась заново в БД.

Не знаю, было ли такое где-то на просторах интернета, но, когда я попыталась найти, а мне было жутко это нужно, причем очень срочно, то я столкнулась с кучей проблем.

Во первых, почти все источники предлагают делать это таким образом:

<?php
header('Location: http://www.mysite.com/');
exit;
?>

Но, проблема в нем следующая, если вы, уже где то в начале страницы отправили заголовки, то на вас будут ругаться, мол, «заголовки отправлены, зачем ты хочешь, чтобы я это сделал еще один раз, угомонись!»

Еще были варианты:

1. обнулить форму
2. засунуть все переменные формы в переменную $_SESSION(нам нужно больше переменных сессии!)

Но данные способы были неудобны, возможно, вам покажется, что это наоборот, самый лучший вариант и зачем изобретать велосипед?

Меня же, все способы, встретившиеся на просторах интернета, не устроили. И я решила сделать то, что будет удобно мне и не будет занимать большое количество переменных/времени/ресурсов.
Приступим.

Для начала, создадим простенькую форму.

<!--index.php-->
<FORM  name="" action="" method="">
<INPUT name="name" type="text" size="25" placeholder="Ваше имя"/>
<INPUT name="phone" type="text" size="11" placeholder="Ваш телефон" maxlength="11"/>
<INPUT name="enter" type="submit" value="Отправить"/></FORM>

Затем добавим в форму метод отправки, действие и имя:
Действие будет происходить на другой странице, для удобства и дальнейшей функциональности.

Получается вот такой код:


<FORM name="back" action="redir.php" method="post">
<INPUT name="name" type="text" size="25" placeholder="Ваше имя"/><INPUT name="phone" type="text" size="11" placeholder="Ваш телефон" maxlength="11"/>
<INPUT name="enter" type="submit" value="Отправить"/></FORM>

Затем, мы создаем файлик redir.php и работаем над ним:


/*redir.php*/
<?php
 /* Принимаем данные из формы */
  $connect=mysqli_connect('localhost','login','password') or die(mysqli_error());
mysqli_select_db('myDB') or die ("Не могу выбрать базу данных");
if(isset($_POST['enter'])){/*если нажата кнопка, то заносим в бд данные*/
	 if (empty($_POST['name']) or empty($_POST['phone'])) {
        echo '<script>alert("Заполните все поля формы");</script>';
	 } else {
  $name = $_POST["name"];
  $phone = $_POST["phone"];
  $datetime= date("l dS of F Y h:i:s A");
$mysqly=mysqli_query($connect,"INSERT INTO contacts VALUES ('','$name','$phone','$datetime','')") OR DIE (MYSQLI_ERROR());}}
  ?>
<script type="text/javascript">
  document.location.replace("index.php");/*делаем редирект на главную страницу сайта*/
</script>

Все. Как видите это просто, быстро и удобно!

Надеюсь, вам пригодится данная статья.

Буду рада критике или вашим предложениям.

P.S. Да, можно сделать отправку заголовка на этой, дополнительной, странице, но, почему-то с использованием кода JS мне нравится больше.

P.P.S. Спасибо за ваше внимание.
Теги:
php, mysql, html, css, javascript

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Похожие публикации