Как отправить форму в php, чтобы она не отправлялась повторно, после обновления страницы
Invite pending
Доброе время суток, уважаемые 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. Спасибо за ваше внимание.