О web-разработке
и даже немного больше...

Дублирование данных при отправке формы

Дублирование данных при отправке формы
Рассмотрим пример защиты от дублирования отправки данных посредством формы.

Для чего это нужно?
Возникает ситуация когда пользователь заполняет форму и нажимает кнопку «Отправить». Отправляемые данные записываются в базу (к примеру). Пользователю приходит некоторая страница об успешной отправке данных. После чего пользователь случайно или намерено жмет на кнопку F5 (обновить), предыдущий запрос с уже когда-то заполненными данными снова отправляется на сервер. Таким образом, заполненные ранее данные в форме отправляется заново, что не очень хорошо.
В данном примере задача решается с использованием cookies и md5 хэша данных.

Итак, код:

<?php

// В случае наличия POST переменных
if(count($_POST)){
	
	// формируем строку из данных формы
	$long = "";
	while(list($key,$value)=each($_POST))
		$long .= $value;
	
	// получаем хэш строки
	$hash = md5($long);
	
	// отправляем кукисы с хэшем в браузер
	setcookie("lasthash",$hash,time()+60*60*24*30);
} else
	$hash = 'none';

// если принятые значения lasthash не совпадают с текущим хэшом
if ( $_COOKIE["lasthash"] != $hash ){
	
	// показываем форму, либо сообщение
	if (!isset($_POST['send']))
	
		echo '<form method="post">
		<input type="text" name="inp">
		<input type="submit" name="send">
		</form>';

	else
		echo 'Форма отправлена!';

} else { // иначе если lasthash идентичен
	echo 'Дублирование данных!';
}
?>

Внимание
Стоит заметить, что при работе с cookies имеется значимый недостаток – они могут быть выключены в браузере. После чего, выше описанный код не поможет решить проблему дублирования данных.
Как вариант решения проблемы: можно проверять включены ли cookies в браузере, либо вовсе не использовать cookies для этих целей.
Так же, можно производить редирект (с помощью заголовков header()) при первой же отправке формы. Несомненно существуют и другие методы защиты от дублирования данных, пожалуй мы ещё вернемся к этой теме в другой статье.

Опубликован: 24.02.2013 г.

См. также:

Редакторы кода для PHP
Как просмотреть время загрузки страницы в PHP?
Генерация QR-кода в PHP
Загрузка файлов на сервер посредством Ajax
Импорт записей из Excel в WordPress
Парсинг XML в PHP
Установка IonCube на XAMPP
Создание PDF файлов в PHP

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта