Помогите с http_referrer

Савелей

Новичок
Помогите с http_referrer

Блин сижу туплю все утро, нужно сделать для админки возвращение на пред. страницу после поста сохранения...

есть форма, есть 3 сабмита (Отмена, Сохранить и выйти, Сохранить)

в контроллере после действия идет редирект на return_url,
он при "Сохранить и выйти" должен быть на страницу с которой обратились к скрипту (то есть REFERRER),
при "Отмена" туда-же но без параметров (REFERRER минус параметры если они есть),
при "Сохранить" return_url остается тот-же (REQUEST_URI).

как правильно это сделать передавая только один return_url в POST?


ps: cильно стебать не нужно, сам знаю что туплю:)
 

DiMA

php.spb.ru
Команда форума
смотри подходящие переменные по phpinfo()

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

Савелей

Новичок
А что кроме PHP_SELF, REQUEST_URI, QUERY_STRING там можно увидеть такого что мне поможет?

c сылкой в GET и так понятно, а по иной логике подскажите как, можно без примеров.
 

Фанат

oncle terrible
Команда форума
В №1 используем return_url
В №2 используем return_url, отрезав от него "параметры"
В №3 используем REQUEST_URI

если тебя этот ответ не устраивает, то будь добр изложить стоящие перед тобой неразрешимые проблемы в подробностях, без жевания соплей.
 

Фанат

oncle terrible
Команда форума
протокол НТТР несложный, методов передачи данных в нем ровно две штуки. выбирай любой и не морочь людям голову.
 

dimagolov

Новичок
вообще-то режется или нет referrer мы знаем до того, как надо решать включать или нет return_url в ссылку, вот и можем включать только по надобности.
 

Савелей

Новичок
так откуда взялся у Вас в форме return_url, если не по ссылке?

а вся проблема в том что для данного модуля нельзя задать статичный return_url, вызов модуля идет из разных скриптов и после действий он должен уйти туда от куда его вызывали.
 

prolis

Новичок
"как правильно это сделать передавая только один return_url в POST?" - яваскриптом
 

Савелей

Новичок
Уже сделал спасибо, но один фиг с HTTP_REFERRER, а без него только по ссылке или в сесию пихать.


в контроллере:
PHP:
if( $this->std->input['POST']['act_apply'] )
 $this->redirectSet( $this->CurrentUrl . 'return_url=' . urlencode( $this->std->input['POST']['return_url']) );
if( $this->std->input['POST']['act_save'] )
 $this->redirectSet( $this->std->input['POST']['return_url'] );
  
 $this->Location($this->redirect);
в шаблоне:
PHP:
<input type="text" name="return_url" 
value="<?=($return_url ? $return_url : $_SERVER['HTTP_REFERER'])?>">
 

x-yuri

Новичок
Савелей я бы тоже не доверял так HTTP_REFERER

если на форму прийти могут с разных мест, передавай при переходе на нее, куда надо вернуться (return_url, не обязательно даже URL - главное, чтобы понятно было, куда возвращаться). Его же в обработчик формы передавай. А в контроллере у тебя есть 2 URL, куда можно вернуться, один - return_url, второй - твоя форма (контроллер сам может, я думаю, ее URL определить)
 

antson

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

согласен ?

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

Савелей

Новичок
x-yuri
Все хорошо, но если не передавать URL то я теряю предыдущие GET параметры (формы, страницы) как быть с ними?



antson
Вы правы с добавлением, по этому я режу параметры сортировки, номер страницы, и отправляю на первую с сортировкой по id-desc....

Пока сделал как сделал, лучше варианта я пока не нашел:(

все CMS`ки которые я ковырял что-бы посмотреть как у них,
они (статично привязывают возврат, вобще без редиректа, в новом окне, bitrix кидает url для возврата, referrer - ну это не в счет, тупо кидают на старт модуля)

можно конечно открывать редактирование и добавление записей в новом "окне" через аякс, как делают некоторые,
но мне такой вариант не подходит.
 

x-yuri

Новичок
Все хорошо, но если не передавать URL то я теряю предыдущие GET параметры (формы, страницы) как быть с ними?
Савелей не понимаю, что ты теряешь... при работе с формой у тебя фактически один URL, который надо помнить - куда вернуться, причем это может быть _не_ URL, а просто набор данных, по которым можно сформировать URL

кроме того, логичнее резать параметры в "Сохранить и выйти", а не в "Отмена" потому, что при изменении информации твоя запись может уже быть на другой странице. Хотя, в общем-то такое и при отмене возможно

или я неправильно понял твою проблему?
 

Савелей

Новичок
x-yuri
наглядный пример:

Вызываем модуль из вкладки настройки статьи:
domen.uk/manager/articles/article/edit/34/?tab=options&page=2 (могут быть еще параметры...)

к примеру жмем ссылку глобальные настройки комментов, переходим на форму глобальные настройки комментов, что-то поменяли,
жмем "сохранить и выйти" или "отмена" (куда выйти, если не передать "articles/article/edit/34/?tab=options&page=2" URL возврата)


просто мы наверно не понимаем друг-друга, может я обьясняю плохо, что скорее всего.
 

x-yuri

Новичок
Савелей давай, по крайней мере для начала, без mvc и на упрощенной задаче

есть несколько страниц, с которых нужно перейти на форму. При нажатии сохранить в форме мы остаемся на ней же. Если же мы выбираем "Отмена" или "Сохранить и выйти", то надо вернуться на исходную страницу. Можно так упростить?
 
Сверху