Форум русской поддержки Joomla!® CMS
10.12.2016, 01:17:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Повторная отправка формы

 (Прочитано 1652 раз)
0 Пользователей и 1 Гость смотрят эту тему.
devirus
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 144



« : 29.06.2014, 12:15:50 »

Думал это у меня что-то не так настроено, но проверил — у всех так на ЖШ.

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

Есть ли готовые решения? (что-то не нашел на форуме)

Сейчас изучаю корни проблемы, как работают запросы и что за странная штука вроде "84112981041deae..." в кукисах, которая сбрасывает сортировку при удалении.
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7781



« Ответ #1 : 29.06.2014, 12:30:24 »

Цитировать
Думал это у меня что-то не так настроено, но проверил — у всех так на ЖШ.
не у всех

Цитировать
Есть ли готовые решения? (что-то не нашел на форуме)
почитайте
Записан
devirus
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 144



« Ответ #2 : 29.06.2014, 18:35:38 »

Почитал, посмотрел плагин продлевающий Expires Headers - чуть лучше, при возвращении назад с товара в категорию, не ругается.
Но при F5 категории по прежнему выскакивает окно "Повторная отправка"  (так же как и тут: http://demo.nevigen.com/cars.html)

Если перезагрузить страницу без POST - боюсь в данном случае сортировка сбросится.

...хотя нет, попробовал. Не думая сунул

Код:
if (!empty($_POST)){
    header('Location: ' . $_SERVER['PREQUEST_URI']);
}

в form_filters.php

в фаерфоксе заработало как надо, в Chrome продолжает спрашивать...

Еще нашел в значения сортировки в php-сессии, значит каждый раз пост запрос не нужен? Нужно правильно сделать header('Location: '... ?
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7781



« Ответ #3 : 29.06.2014, 18:49:29 »

Expires Headers мне тоже не понравился. не тот путь решения как по мне выбран. кэш есть кэш, со всеми вытекающими...

Цитировать
значит каждый раз пост запрос не нужен? Нужно правильно сделать header('Location: '... ?
в общих чертах да, верно
Записан
devirus
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 144



« Ответ #4 : 29.06.2014, 20:43:58 »

хм.
ну в общем
Код:
if (isset($_POST['order'])){
    header('Location: ' . 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
}
помогает и от F5 и от "назад", причем даже если после вывода контента написать локейшн (везде говорят, что так нельзя и не будет работать).

Ищу в чем подвох, слишком всё хорошо и просто, так не бывает...  Grin
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7781



« Ответ #5 : 29.06.2014, 22:47:17 »

лучше использовать JFactory::getApplication()->redirect(...)
Записан
dipner
Новичок
*

Репутация: +2/-0
Offline Offline

Сообщений: 4


« Ответ #6 : 03.03.2015, 21:18:57 »

offtop
« Последнее редактирование: 05.03.2015, 01:07:34 от dipner » Записан
dipner
Новичок
*

Репутация: +2/-0
Offline Offline

Сообщений: 4


« Ответ #7 : 05.03.2015, 01:03:56 »

Решаем проблему назад и f5 Повторная отправка формы.
Сортировка товаров list_products/form_filter.php
В конце файла так:
Код:
<input type="hidden" name="orderby" id="orderby" value="<?php echo $this->orderby?>" />
<input type="hidden" name="limitstart" value="0" />
</form>
<!-- Вписываем это -->
<?php if (isset($_POST['orderby'])){ ?>  <!—если не поставить, получим циклическую переадресацию -->
  <?php  header('Location: ' . 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); ?>
<?php } ?>
______________________________________________________________________________________________
Mod_joomshopping_filters
Дописываем в конец Mod_joomshopping_filters/default.php:
Код:
<input type="hidden" name="on" value="1" />  
</form>
<?php if (isset($_POST['on'])){ ?>
  <?php  header('Location: ' . 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); ?>
<?php } ?>
Не знаю насколько правильно, но проблема повторной отправки формы решилась полностью.
_______________________________________________________________________________________________
Частичное решение проблемы plugin:
Expires Headers продление заголовков - избавляемся от проблемы повторной отправки формы при нажатии назад.
1. Скачиваем и устанавливаем.
2. Видим
Strict standards: Non-static method JApplicationCms::getMenu() should not be called statically, assuming $this from incompatible context in ...
Вольный перевод: метод getMenu() не является статическим, поэтому не может быть вызван как статический в виде JApplicationCms::getMenu()...
Решение
В expiresheaders.php
Заменить код типа
Код:
$menu =& JSite::getMenu();
на
Код:
$menu = JFactory::getApplication()->getMenu();
и вроде в javascript.php убрать &.
Настройки
Cache-Control Header Values ставим
Default - on
Cachable - no-Cache
must-revalidate - ok

Благодарю devirus.
« Последнее редактирование: 05.03.2015, 01:11:20 от dipner » Записан
юрий 009
Давно я тут
****

Репутация: +5/-1
Offline Offline

Пол: Мужской
Сообщений: 337



« Ответ #8 : 01.04.2016, 20:00:43 »

день добрый.
скажите пожалуйста такая проблема с повторной отправкой только в 10-х человек на форуме. у всех все гладко?
вот я перепробовал все варианты решения проблемы что нашел на форуме и различные фильтры но результата ноль.
проблема стала после миграции на 3,5 как это разработчики смогли такое допустить.... или там заложенный определенный смысл ?
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7781



« Ответ #9 : 01.04.2016, 20:08:49 »

скажите пожалуйста такая проблема с повторной отправкой только в 10-х человек на форуме. у всех все гладко?
думаю такое у всех. где есть POST - есть такой нюанс. зависит от браузера, не все выдают предупреждение. но от версии Жумла не зависит точно. вероятно вы раньше не обращали внимание на это, либо использовали браузер, который раньше не выдавал такое предупреждение, а после одного из обновлений браузера начал. ну или например вариант, что у вас были хаки ядра в Ж2.5 которые делали какие то действия чтобы такой ошибки не было, а после обновления их уже нет. короче, по-умолчанию это у всех. если вас это конечно утешит Azn
Записан
юрий 009
Давно я тут
****

Репутация: +5/-1
Offline Offline

Пол: Мужской
Сообщений: 337



« Ответ #10 : 01.04.2016, 20:40:07 »

по-умолчанию это у всех. если вас это конечно утешит Azn
Скажите пожалуйста что за POST ? ... ядро 2,5 я не трогал (вы мне как-то писали что ядро трогать нельзя) раньше такого точно не было я бы увидел, это произошло после миграции с 2,5 на 3,5
подскажите пожалуйста как это решить ...
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7781



« Ответ #11 : 02.04.2016, 10:40:47 »

Скажите пожалуйста что за POST ?

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

подскажите пожалуйста как это решить

одним из вариантов исправления этого является метод, когда при переходе с POST данными этот POST-массив сохраняется в сессию, а посетителя редиректит на ту же самую страницу, но уже без POST. а потом при загрузке проверяется не POST, а уже сохраненный в сессию массив. это как раз тот вариант, который ранее описал devirus
Записан
юрий 009
Давно я тут
****

Репутация: +5/-1
Offline Offline

Пол: Мужской
Сообщений: 337



« Ответ #12 : 02.04.2016, 12:40:51 »

спасибо за помощь .. я уже три дня бился с этой отправкой ... Уже были серьезные намерения вернуться на 2,5 Azn

всем огромное спасибо
Записан
юрий 009
Давно я тут
****

Репутация: +5/-1
Offline Offline

Пол: Мужской
Сообщений: 337



« Ответ #13 : 13.04.2016, 23:15:33 »

только что увидел поиск тоже просит повторную отправку
нужно внести аналогичные изменения как в предыдущие файлы

/modules/mod_jshopping_search/tmpl/default.php
Код:
<input type="hidden" name="on" value="1" />   
</form>
<?php if (isset($_POST['on'])){ ?>
  <?php  header('Location: ' . 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); ?>
<?php } ?>

/components/com_jshopping/templates/default_div/search/form.php
Код:
<?php if (isset($_POST['orderby'])){ ?>  <!—если не поставить, получим циклическую переадресацию -->
  <?php  header('Location: ' . 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); ?>
<?php } ?>
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet