Отправка сообщения






Добро пожаловать!

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

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

Для чего это нужно?
Возникает ситуация когда пользователь заполняет форму и нажимает кнопку «Отправить». Отправляемые данные записываются в базу (к примеру). Пользователю приходит некоторая страница об успешной отправке данных. После чего пользователь случайно или намерено жмет на кнопку 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()) при первой же отправке формы. Несомненно существуют и другие методы защиты от дублирования данных, пожалуй мы ещё вернемся к этой теме в другой статье.

Добавил: htmaker, 24.02.2013 г.
 
плохослабосойдетхорошоотлично (Еще не оценили)
Загрузка...

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

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

Комментарии

  • Загрузка...

Наверх