На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Как избежать повторной передачи POSTa , при обновлении содержимого браузера по F5
      Столкнулся с еприятной проблеммой повторной отправки запроса серверу при нажатии F5 (обновлении), в следствии чего скрипт выполняет повторно заданное действие, например, вставляет еще одну запись в таблицу. Или еще ,например, после отправки POSTa, возврат на предыдущие страницу затруден...

      Возможно ли как-то избежать этого? Делал с помощью перенаправления (header) все конечно стало хорошо, вот только информационные сообщения при этом выводить не удается... например при вставки записи, нужно вывести сообщение о успешном добавлении... но при перенаправлении (header: location) этого не удается...

      Здесь смотрю сделано с помощью JS, но может все же есть какие-нибудь пусти решения на стороне сервера?

      Спасибо!
        вконце обработки принятых данных (после записи их в базу или ещё куда ты их там пишешь) сделай:
        ExpandedWrap disabled
          Header('Location: '.$PHP_SELF.'');

        т.о. параметры формы заново переданы не будут и при обновлении по Ф5 их тоже не будет.
          Гхм... я же написал, что мне после получения данных нужно написать, что мол данные с таким-то ID вставлены...
          Или вообще ошибка втавки... ек макарек...

          Может из в сессию писать, но думаю что идея кривая...
          Сообщение отредактировано: snark -
            http://phpclub.ru/faq/ProblemsLocations
            Цитата snark @
            я же написал, что мне после получения данных нужно написать, что мол данные с таким-то ID вставлены
            Какая разница, что тебе нужно после вставки?
              А мне кажется, что хорошим стилем является написание скрипта обработки отдельно, а php-html-кода визуализации результатов обработки отдельно. Я тоже с этим столкнулся и решил это так: пишу скрипт обработки данных, а потом через сессию передаю их скрипту для вывода в окно обозревателя. В этом случае F5 просто обновляет страницу визуализации без обновления данных (поскольку берет их неизменными из сессии). Кстати, такой способ написания избавляет от многих неприятностей, дробит общий код на части, которые понятнее, меньше и ошибка локализуется проще. ИМХО.
                Чета вы не туда уезжаете. Вопрос конкретен и ясен.
                Скрипт 1: Форма, отправляет данные в Скрипт 2.
                Скрипт 2: Получает данные, обрабатывает, и редиректит на Скрипт 2 с GET-параметром, например: index.php?post=true.
                Так же проверяется $_GET['post'] и результат сообщается пользователю. А от туда, с помощью JS пользователь через пару секунд отправляется обратно, от куда он пришел. Данные, куда он должен идти могут хзраниться в сессии или же ходить вместе с GET-параметрами.
                  Вобщем, как я понялможно сделать так:

                  В скрипт передаю POST он его обрабатывает и результат обработки, в данном случае информационо есообщение или сообщение об ошибке засовываю в некую переменную сессии, после чего делаю редирект на стороне сервака на скрипт без поста и в ем проверяю содержимое перемнной сессии, если там что-то есть то вывожу в окно сообщения... так?
                    Все спасибо! Пойду класс оповещения вешать на сессию... )
                      И что бы "враз и навсегда"!:
                      Эта тема на многих форумах поднимается,я сам на этой теме отметился(и не раз).Эта тема,как я понял одна из самых болезненных среди узкого круга интересующихся этой темой лиц.Если честно,я ответа в FAQ не нашел.По этой теме нужен конкретный,структуированный ответ,причем желательно с "живым" примером(желательно не забыть про Perl),а то,тема сама по себе - "конфликтная",и часто повторяющаяся.
                        Цитата Ho Im @
                        Самый простой и надежный способ — это разделить обработку формы и вывод результатов так, чтобы они выводились по разным запросам.
                        К проблеме это отношения не имеет.
                        Цитата Ho Im @
                        при последующих F5 форма уже не будет отправляться, так как параметры будут другими.
                        А вы попробуйте. Только Location прикручивать не надо.
                        Цитата Ho Im @
                        Правило, которое нужно помнить — нельзя задерживать браузер на страничке, запрос к которой должен лишь однократно отправить данные на сервер
                        Правило, которое нужно запомнить, и которое даже описано, если не ошибаюсь, в RFC - POST-запрос не предназначен для выдачи контента.
                          Цитата
                          К проблеме это отношения не имеет.

                          Переформулируй так, чтобы имело. Иль предпочитаешь читать один и тот же вопрос через каждых 10 постов?
                            Цитата Ho Im @
                            Иль предпочитаешь читать один и тот же вопрос через каждых 10 постов?
                            Я уже всё написал.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0601 ]   [ 15 queries used ]   [ Generated: 25.04.24, 06:44 GMT ]