Запрет на повторную отправку формы

Хочу  с вами поделится одним трюком, который может быть полезен.

Часто случается так что вы на странице делаете форму. Потом отправляете ее. И потом выходит сообщение об успешной отправке или еще чем либо. Затем если ничего не предпринимать , если вы нажмете F5 в браузере (обновите страницу), то форма отправится еще раз с теми же данными, что не желательно. Конечно можно как то проверять была ли добавлено в базу такая запись, например, если вы в базу пишите данные, но можно поставить проще. Для этого нам потребуется только лишь хранить временную переменную в сессии. А теперь сам метод. Допустим у нас есть форма, которую мы хотим отправить один раз.

<form action='' method='POST'>
<input type='text' name='some_var' value=''>
<input type='submit' name='submit_some_form' value='Отправить'>
</form>

Добавить переменную hidden в форму, назовем ее к примеру post_time, и зададим есть значение текущего времени - time(). Получим

<form action='' method='POST'>
<input type='hidden' name='post_time' value='<?=time()?>'>
<input type='text' name='some_var' value=''>
<input type='submit' name='submit_some_form' value='Отправить'>
</form>

Далее в обработчике формы будем сравнивать эту переменную с сессионной, если совпадают, значит уже был сабмит этой формы, если нет то назначаем сессионной эти данные и выполняем обработчик.

<?if (isset($_POST['submit_some_form']) && $_SESSION['post_time']!=$_POST['post_time']){
	$_SESSION['post_time']=$_POST['post_time'];
	//// далее идет обработчик формы
}?>

<form action='' method='POST'>
<input type='hidden' name='post_time' value='<?=time()?>'>
<input type='text' name='some_var' value=''>
<input type='submit' name='submit_some_form' value='Отправить'>
</form>

Этот метод хорош тем что его можно использовать еще на всех страницах вашего сайта, потому как time() - никогда не повторится :) . Для обработки формы можете использовать этот урок. Все просто - удачи вам в ваших экспериментах.

Запись опубликована в рубрике Веб-программирование. Добавьте в закладки постоянную ссылку.

Комментарии запрещены.