Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: При обновлении страницы скрипт срабатывает снова..
Форумы портала PHP.SU » » HTTP и PHP » При обновлении страницы скрипт срабатывает снова..

Страниц (1): [1]
 

1. ADIOS - 05 Августа, 2010 - 08:13:27 - перейти к сообщению
Доброе время суток...

Проблемка заключается в том что скрипт повторяет свое действие после обновления страницы... форма сама передает данные и скрипт как положено его обрабатывает.. Ставить переменную на кнопку смысла нет, она тож передается.. файл обработчик подкружается через
2. duk - 05 Августа, 2010 - 09:51:30 - перейти к сообщению
пока не очень понятно, что и как там взаимодействует и как форма сама отправляет данные
3. ADIOS - 05 Августа, 2010 - 10:15:12 - перейти к сообщению
duk пишет:
пока не очень понятно, что и как там взаимодействует и как форма сама отправляет данные

... Скрипт обработал форму.. Выдал отчет об успешной работе.. но после нажатия F5 браузер спрашивает оправить данные заново или нет (что то в это роде), жмешь да и скрипт выполняеться снова... КАК ЭТОГО ИЗБЕЖАТЬ?

... Заранее спасибо...
4. alexspb - 05 Августа, 2010 - 10:34:00 - перейти к сообщению
ADIOS пишет:
но после нажатия F5 браузер спрашивает оправить данные заново или нет

Сделать редирект (header('Location: ...')) на другую страницу или на ту же, но добавить в урле ?ok=true (любую переменную)
5. JustUserR - 05 Августа, 2010 - 14:34:10 - перейти к сообщению
ADIOS пишет:
Скрипт обработал форму.. Выдал отчет об успешной работе.. но после нажатия F5 браузер спрашивает оправить данные заново или нет (что то в это роде), жмешь да и скрипт выполняеться снова... КАК ЭТОГО ИЗБЕЖАТЬ
Если необходимость в защите от повторной отпраки данных формы обарабатывающему PHP-скрипту при обновлении страницы - нужна в основном для простого предотвращения повторного выполнения каких-либо дейтсвий и удобства пользователя на тот случай если он случайно нажмет F5 - то можно использовать внешнее перенаправление на тот URL-адрес при запросе которого не выполняются никакие активные действия Обратите внимание что перенаправление должно быть именно внешним и реализовываться либо генерацией полного URL-адреса в пересылаемом Header-е Location - либо происходить на клиентской стороне с использованием JS-скрипта - потому что если перенаправление будет внутренним то Apache просто запустит соответствующий CGI-скрипт и выведет его результат работы с том же HTTP-ответе
Если же вам нужна реальная защита от повторного запроса PHP-скрипта то есть чтобы один и тот же пользователь не мог выполнить его несколько раз - даже в случае если этот пользователь не будет следовать перенаправлениям например с помощью прямого запроса по telnet - то самым эффективным способом будет обязательная авторизация благодаря который информацию по каждому пользователю и его дейтсвиях можно хранить в БД и накладывать соответствующие ограничения Как вариант можно использовтаь и проверку IP-адреса вместе с максимально полной информацией о браузере/системе/разрешении экрана и тд - это может позволить идентифицировать пользователя с некоторой приемлемой точностью
6. ADIOS - 05 Августа, 2010 - 21:13:59 - перейти к сообщению
JustUserR пишет:
ADIOS пишет:
Скрипт обработал форму.. Выдал отчет об успешной работе.. но после нажатия F5 браузер спрашивает оправить данные заново или нет (что то в это роде), жмешь да и скрипт выполняеться снова... КАК ЭТОГО ИЗБЕЖАТЬ
либо происходить на клиентской стороне с использованием JS-скрипта


CODE (javascript):
скопировать код в буфер обмена
  1. <script language='Javascript'>function reload() {location = 'users.php'}; setTimeout('reload()', 3000);</script>


Спасибо выручили... Улыбка
7. JustUserR - 06 Августа, 2010 - 00:45:36 - перейти к сообщению
ADIOS пишет:
Спасибо выручили...
Пожалуйста! Кроме того тот вариант JS-функции который вы используете является наиболее универсальным - и именно его модификацию следует использовать даже в том случае когда требуется мгновенное перенаправление - поскольку если DOM-модели и система событий страницы не успеет загрузиться в необходимой мере то это может привести к неправильной работе
8. laska470 - 11 Апреля, 2011 - 13:46:43 - перейти к сообщению
А если так:
PHP:
скопировать код в буфер обмена
  1. if(!isset($_SESSION['post'])) {    // Если данные присланы впервые
  2.                 $_SESSION['post']=$_POST;
  3.                 $double=false;
  4.                 }
  5.         else{    //Если данные уже присылались то
  6.         if(count(array_diff($_POST,$_SESSION['post']))!=0){   //сравниваем с предыдущими
  7.                 $double= false;    //Если отличаются
  8.                 $_SESSION['post']=$_POST;
  9.                 }
  10.         else $double= true;   //если те же самые, что и в прошлый раз
  11.         }
  12.         if(!$double){   // в зависимости от этого решаем исполнять ли нам
  13. //обработчик формы
  14. }

Не претендую на оригинальность но помогает
9. Electron - 10 Ноября, 2011 - 11:50:59 - перейти к сообщению
laska470, спасибо, выручил, сразу двух зайцев убил твоим скриптом! Даже ради этого коммента зарегистрировался Язычок

 

Powered by ExBB FM 1.0 RC1