PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: ... а не надо..
ADIOS
Отправлено: 05 Августа, 2010 - 08:13:27
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




Доброе время суток...

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


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
duk
Отправлено: 05 Августа, 2010 - 09:51:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Февр. 2010  
Откуда: Москва


Помог: 3 раз(а)




пока не очень понятно, что и как там взаимодействует и как форма сама отправляет данные
 
 Top
ADIOS
Отправлено: 05 Августа, 2010 - 10:15:12
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




duk пишет:
пока не очень понятно, что и как там взаимодействует и как форма сама отправляет данные

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

... Заранее спасибо...


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
alexspb
Отправлено: 05 Августа, 2010 - 10:34:00
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




ADIOS пишет:
но после нажатия F5 браузер спрашивает оправить данные заново или нет

Сделать редирект (header('Location: ...')) на другую страницу или на ту же, но добавить в урле ?ok=true (любую переменную)


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
JustUserR
Отправлено: 05 Августа, 2010 - 14:34:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 8721
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ADIOS пишет:
Скрипт обработал форму.. Выдал отчет об успешной работе.. но после нажатия F5 браузер спрашивает оправить данные заново или нет (что то в это роде), жмешь да и скрипт выполняеться снова... КАК ЭТОГО ИЗБЕЖАТЬ
Если необходимость в защите от повторной отпраки данных формы обарабатывающему PHP-скрипту при обновлении страницы - нужна в основном для простого предотвращения повторного выполнения каких-либо дейтсвий и удобства пользователя на тот случай если он случайно нажмет F5 - то можно использовать внешнее перенаправление на тот URL-адрес при запросе которого не выполняются никакие активные действия Обратите внимание что перенаправление должно быть именно внешним и реализовываться либо генерацией полного URL-адреса в пересылаемом Header-е Location - либо происходить на клиентской стороне с использованием JS-скрипта - потому что если перенаправление будет внутренним то Apache просто запустит соответствующий CGI-скрипт и выведет его результат работы с том же HTTP-ответе
Если же вам нужна реальная защита от повторного запроса PHP-скрипта то есть чтобы один и тот же пользователь не мог выполнить его несколько раз - даже в случае если этот пользователь не будет следовать перенаправлениям например с помощью прямого запроса по telnet - то самым эффективным способом будет обязательная авторизация благодаря который информацию по каждому пользователю и его дейтсвиях можно хранить в БД и накладывать соответствующие ограничения Как вариант можно использовтаь и проверку IP-адреса вместе с максимально полной информацией о браузере/системе/разрешении экрана и тд - это может позволить идентифицировать пользователя с некоторой приемлемой точностью


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ADIOS
Отправлено: 05 Августа, 2010 - 21:13:59
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




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


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


Спасибо выручили... Улыбка


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
JustUserR
Отправлено: 06 Августа, 2010 - 00:45:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 8721
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ADIOS пишет:
Спасибо выручили...
Пожалуйста! Кроме того тот вариант JS-функции который вы используете является наиболее универсальным - и именно его модификацию следует использовать даже в том случае когда требуется мгновенное перенаправление - поскольку если DOM-модели и система событий страницы не успеет загрузиться в необходимой мере то это может привести к неправильной работе


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
laska470
Отправлено: 11 Апреля, 2011 - 13:46:43
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




А если так:
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. }

Не претендую на оригинальность но помогает


-----
Думаете нам, царям, легко?
 
 Top
Electron
Отправлено: 10 Ноября, 2011 - 11:50:59
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




laska470, спасибо, выручил, сразу двух зайцев убил твоим скриптом! Даже ради этого коммента зарегистрировался Язычок
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB