Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Избавиться от повторной отправки данных при перезагрузки страницы
 
 автор: alexander95   (02.05.2011 в 16:45)   письмо автору
 
 

Пользователь вводит данные, отправляет их (обработчик находится на этой же странице).
Если он нажмет в своем браузере "обновить", данные отправятся снова. Как от этого избавиться?

  Ответить  
 
 автор: Tamplier   (02.05.2011 в 17:47)   письмо автору
 
   для: alexander95   (02.05.2011 в 16:45)
 

После отправки header("Location: ссылка на страницу"); exit();

  Ответить  
 
 автор: cheops   (02.05.2011 в 17:49)   письмо автору
 
   для: alexander95   (02.05.2011 в 16:45)
 

Сразу после того, как обработчик закончил работу, останавливайте скрипт и осуществляйте перезагрузку страницы (как вариант переход на другую страницу) при помощи HTTP-заголовка Location и функции header(). Это позволит обнулить POST/GET-данные.

  Ответить  
 
 автор: alexander95   (02.05.2011 в 19:45)   письмо автору
 
   для: cheops   (02.05.2011 в 17:49)
 

Спасибо. А вариант с unset почему не подходит?

  Ответить  
 
 автор: cheops   (02.05.2011 в 20:29)   письмо автору
 
   для: alexander95   (02.05.2011 в 19:45)
 

unset() уничтожит переменные только в рамках текущей сессии, перегрузка страницы заставит браузер снова послать POST-данные и сервер будет вынужден их воссоздать.

  Ответить  
 
 автор: parczynski   (02.05.2011 в 21:00)   письмо автору
 
   для: alexander95   (02.05.2011 в 16:45)
 

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

то есть вот форма

$_SESSION['rand']=rand()." - ".rand()." - ".rand;

<input type='hidden' name='rand' value='<?=$_SESSION['rand']?>' />


а вот обработчик
<?php
  
if ($_POST['rand']==$_SESSION['rand']) {
Обработать форму
}
?>


при обновлении страницы в $_POST['rand'] будет старое значение и форма не обработается

  Ответить  
 
 автор: alexander95   (02.05.2011 в 21:17)   письмо автору
 
   для: parczynski   (02.05.2011 в 21:00)
 

спасибо.

  Ответить  
 
 автор: Гость   (04.05.2011 в 05:45)   письмо автору
 
   для: parczynski   (02.05.2011 в 21:00)
 

а если посетитель случайно откроет два раза страницу?

  Ответить  
 
 автор: parczynski   (04.05.2011 в 15:56)   письмо автору
 
   для: Гость   (04.05.2011 в 05:45)
 

тогда форма будет работать только на последней. либо на первой со второго раза.

но я думаю это вопрос из разряда "а если пользователь случайно пнет ногой тройник под столом и компьютер выключится, как сделать чтоб сайт остался на экране?"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования