Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.190.144] |
|
Сообщ.
#1
,
|
|
|
Столкнулся с еприятной проблеммой повторной отправки запроса серверу при нажатии F5 (обновлении), в следствии чего скрипт выполняет повторно заданное действие, например, вставляет еще одну запись в таблицу. Или еще ,например, после отправки POSTa, возврат на предыдущие страницу затруден...
Возможно ли как-то избежать этого? Делал с помощью перенаправления (header) все конечно стало хорошо, вот только информационные сообщения при этом выводить не удается... например при вставки записи, нужно вывести сообщение о успешном добавлении... но при перенаправлении (header: location) этого не удается... Здесь смотрю сделано с помощью JS, но может все же есть какие-нибудь пусти решения на стороне сервера? Спасибо! |
Сообщ.
#2
,
|
|
|
вконце обработки принятых данных (после записи их в базу или ещё куда ты их там пишешь) сделай:
Header('Location: '.$PHP_SELF.''); т.о. параметры формы заново переданы не будут и при обновлении по Ф5 их тоже не будет. |
Сообщ.
#3
,
|
|
|
Гхм... я же написал, что мне после получения данных нужно написать, что мол данные с таким-то ID вставлены...
Или вообще ошибка втавки... ек макарек... Может из в сессию писать, но думаю что идея кривая... |
Сообщ.
#4
,
|
|
|
http://phpclub.ru/faq/ProblemsLocations
Цитата snark @ Какая разница, что тебе нужно после вставки? я же написал, что мне после получения данных нужно написать, что мол данные с таким-то ID вставлены |
Сообщ.
#5
,
|
|
|
А мне кажется, что хорошим стилем является написание скрипта обработки отдельно, а php-html-кода визуализации результатов обработки отдельно. Я тоже с этим столкнулся и решил это так: пишу скрипт обработки данных, а потом через сессию передаю их скрипту для вывода в окно обозревателя. В этом случае F5 просто обновляет страницу визуализации без обновления данных (поскольку берет их неизменными из сессии). Кстати, такой способ написания избавляет от многих неприятностей, дробит общий код на части, которые понятнее, меньше и ошибка локализуется проще. ИМХО.
|
Сообщ.
#6
,
|
|
|
Чета вы не туда уезжаете. Вопрос конкретен и ясен.
Скрипт 1: Форма, отправляет данные в Скрипт 2. Скрипт 2: Получает данные, обрабатывает, и редиректит на Скрипт 2 с GET-параметром, например: index.php?post=true. Так же проверяется $_GET['post'] и результат сообщается пользователю. А от туда, с помощью JS пользователь через пару секунд отправляется обратно, от куда он пришел. Данные, куда он должен идти могут хзраниться в сессии или же ходить вместе с GET-параметрами. |
Сообщ.
#7
,
|
|
|
Вобщем, как я понялможно сделать так:
В скрипт передаю POST он его обрабатывает и результат обработки, в данном случае информационо есообщение или сообщение об ошибке засовываю в некую переменную сессии, после чего делаю редирект на стороне сервака на скрипт без поста и в ем проверяю содержимое перемнной сессии, если там что-то есть то вывожу в окно сообщения... так? |
Сообщ.
#8
,
|
|
|
Все спасибо! Пойду класс оповещения вешать на сессию... )
|
Сообщ.
#9
,
|
|
|
И что бы "враз и навсегда"!:
Эта тема на многих форумах поднимается,я сам на этой теме отметился(и не раз).Эта тема,как я понял одна из самых болезненных среди узкого круга интересующихся этой темой лиц.Если честно,я ответа в FAQ не нашел.По этой теме нужен конкретный,структуированный ответ,причем желательно с "живым" примером(желательно не забыть про Perl),а то,тема сама по себе - "конфликтная",и часто повторяющаяся. |
Сообщ.
#10
,
|
|
|
Цитата Ho Im @ К проблеме это отношения не имеет.А вы попробуйте. Только Location прикручивать не надо.Самый простой и надежный способ — это разделить обработку формы и вывод результатов так, чтобы они выводились по разным запросам. Цитата Ho Im @ Правило, которое нужно запомнить, и которое даже описано, если не ошибаюсь, в RFC - POST-запрос не предназначен для выдачи контента. Правило, которое нужно помнить — нельзя задерживать браузер на страничке, запрос к которой должен лишь однократно отправить данные на сервер |
Сообщ.
#11
,
|
|
|
Цитата К проблеме это отношения не имеет. Переформулируй так, чтобы имело. Иль предпочитаешь читать один и тот же вопрос через каждых 10 постов? |
Сообщ.
#12
,
|
|
|
Цитата Ho Im @ Я уже всё написал. Иль предпочитаешь читать один и тот же вопрос через каждых 10 постов? |