Pull to refresh

Как отправить форму в 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. Спасибо за ваше внимание.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.