Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кнопка "Назад", оптимальный алгоритм 
:(
    Опции темы
Yoreck
Дата 21.4.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.6.2005

Репутация: нет
Всего: нет



Доброго времени суток, уважаемые. 

Такая вот простая задача - в web-проекте на одну и ту-же форму можно попадать с различных страниц. После обработки запроса, либо по нажатию кнопки "Назад" пользователь отсылается обратно.

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

В итоге, приходится редактировать полпроекта при добавлении очередной фичи. Как следствие, я немножко устал smile Что неприятно.

Хотелось бы обойтись чистым php, без сохранения параметров в $_SESSION. (так как пользователь будет работать с одним проектом в нескольких открытых окнах одновременно)

Буду рад услышать любые идеи по поводу того, как бы мне поменьше работать за те-же деньги. smile

Это сообщение отредактировал(а) Yoreck - 21.4.2008, 13:13
PM MAIL   Вверх
Vaulter
Дата 21.4.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



да в принципе никак =)
если не хочешь работать еще больше и переделать так чтобы добавление новых фич было максимально эффективным то будешь все тонуть и тонуть в этом болоте  smile 


--------------------
PM MAIL WWW ICQ   Вверх
skyboy
Дата 21.4.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



использовать $_SERVER['HTTP_REFFERER'], естественно, проверяя, принадлежит ли указанный адрес твоему домену.
впрочем, лучше изменить процедуру формирования формы, чтоб на кнопке "назад" лежал определенный адрес.
PM MAIL   Вверх
Feldmarschall
Дата 21.4.2008, 16:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Непонятно, при чем здесь "чистый РНР", если речь идет чистом HTML.
Непонятно, почему приходится редактировать пол-проекта. Какая проблема взять и передать адрес, с которого юзер пришел?
Непонятно, при чем здесь "блуждает". Надо информацию передать - взял, передал. Логин и пароль тоже так же "блуждает". Однако это не вызывает никаких вопросов на форуме. К чему эта ненужная беллетристика? Сделать хидден поле в форме быстрее, чем писать пост на форум.

Добавлено через 32 секунды
skyboy, реферер в логике приложения использовать запрещено.
PM   Вверх
Yoreck
Дата 22.4.2008, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.6.2005

Репутация: нет
Всего: нет



Feldmarschall
У мя порядка сотни страниц, на каждой может быть до 10 форм.

Добавить на КАЖДУЮ поле хидден и проверить, что работает - это пол дня, минимум! А вопрос на форуме задать - 5 минут smile

Цитата
Непонятно, при чем здесь "чистый РНР", если речь идет чистом HTML.

Поржал


Vaulter
Я собстна и хочу сделать так, чтоб добавление новых фич было максимально эффективным, отсюда и вопрос.

skyboy
Спасибо, пойду почитаю про это.

Это сообщение отредактировал(а) Yoreck - 22.4.2008, 08:01
PM MAIL   Вверх
Feldmarschall
Дата 22.4.2008, 08:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Yoreck.
Главная проблема начинающих программистов заключается не в том, что они не могут решить какую-то задачу. А в том, что они не могут её сформулировать. Ну вот хотят что-то сделать, а не знают - что. От этого ни у них самих не получается, ни - что закономерно - другим людям толком вопрос задать.

При чем здесь сто форм по 10 страниц?
Если ты один раз прописал во все формы это поле, то при чем здесь " редактировать полпроекта при добавлении очередной фичи"?

Это не говоря уже об осмысленности такого странного приложения в целом - сто страниц, на каждой по 10 форм, и КАЖДАЯ - что характерно - должна куда-то возвращать. То есть, формы заполняются не последовательно, а хаотично. И при этом не используются сессии, ага.
Единственный известный мне случай, когда требуется такой возврат - это единственная на все приложение форма авторизации. Если же таким функционалом надо снабжать кадлую форму на сайте, то здесь, я думаю, проблему можно решить другими средствами.

Цитата(Yoreck @  22.4.2008,  07:58 Найти цитируемый пост)
Поржал

Умение ржать над собой отличает сильных духом. Уважаю.
PM   Вверх
SamDark
Дата 22.4.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Переформулирую, пожалуй задачу. Интересны всё-таки варианты решения.

Есть форма с полями ввода и сабмитом. Допустим, редактирование поста.
Пост можно посмотреть по 4-м url-ам: собственный url, лента новостей, архив, подборка лучших постов.
Если админ залогинен, во всех 4-х местах рядом с названием поста появляется ссылочка «редактировать», ведущая к нашей форме.
Естественно после редактирования поста удобно перекинуть на страницу, с которой это самое редактирование вызвали.

Это сообщение отредактировал(а) SamDark - 22.4.2008, 13:33


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Feldmarschall
Дата 22.4.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Ну, решение-то только одно - других нету: в ссылку писать адрес страницы.
Либо редактировать "по месту" - добавлять к текущему урлу параметр ?edit и оставаться все время в рамках одного адреса.


PM   Вверх
Feldmarschall
Дата 22.4.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Собственно, если подумать над начальными  условиями, то варианты становятся видны, как на ладони. И автор зря смеялся. 
Мы имеем html страницу. И хотим передать из неё какую-то информацию. По ссылке. Ну и много у нас тут вариантов?
Нет, можно, конечно, ставить при клике куку яваскриптом. Но мне, пхпшнику старой школы, не сильно одобряюшему все эти рюшечки и бантики вебдваноля, это представляется не сильно совместимым решением. Да вообще - если уж юзать яваскрипт, то на полную катушку, и выводить форму аяксом =) 
PM   Вверх
SamDark
Дата 22.4.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Feldmarschall, 
Цитата
Ну, решение-то только одно - других нету: в ссылку писать адрес страницы.

Неправда. Жду вариантов, потом выложу свои.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
IZ@TOP
Дата 22.4.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(Feldmarschall @  22.4.2008,  15:25 Найти цитируемый пост)
Но мне, пхпшнику старой школы, не сильно одобряюшему все эти рюшечки и бантики вебдваноля, это представляется не сильно совместимым решением. 

Кука яваскриптом для обратной переадресации после отправки формы... я бы не назвал это WEB2.0.

Цитата(Feldmarschall @  22.4.2008,  15:25 Найти цитируемый пост)
Мы имеем html страницу.

Хорошо что не она нас  smile  smile 


Цитата(Feldmarschall @  22.4.2008,  15:25 Найти цитируемый пост)
Да вообще - если уж юзать яваскрипт, то на полную катушку, и выводить форму аяксом =)  

Если это может быть удобнее для задачи - почему бы и нет?

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


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
SamDark
Дата 22.4.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Мой вариант — завести стэк страниц в сессии и при переходах добавлять текущую страницу. Получится эдакая server-side история.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Yoreck
Дата 23.4.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.6.2005

Репутация: нет
Всего: нет



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

Придумал такой вариант:
Код

function back() {
    $result=str_replace('%','%25',$_SERVER['REQUEST_URI']);
    $result=str_replace('/','%2F',$result);
    $result=str_replace('?','%3F',$result);
    $result=str_replace('&','%26',$result);
    $result=str_replace('=','%3D',$result);
    return $result;
};

при переходе по ссылкам в href добавляем ...&returnto=<?php echo back(); ?>

для форм можно просто довавить поле
<input type='hidden' name='&returnto' value='<?php $_SERVER['REQUEST_URI'];?>'>

Ну и сама ссылко, очевидно <a href='<?php echo $_GET['returnto']?>'>Назад</a>


Недостатки:
1) Работает только для GET
2) URI при каждом переходе геометрически разрастается, а количество байт в GET-запросе ограниченно.

По хорошему, надо, как-то разобрать этот путь назад и оставлять, скажем, 10 шагов, остальные удалять.

Feldmarschall
Я очень прошу Вас больше не писать постов в данной теме, поскольку это мешает читать информативные сообщения.
Поясню причину: PHP выполняется на серверной стороне, результатом выполнения PHP скрипта является текстовая страница, передаваемая пользователю в том виде в котором её генерирует PHP скрипт. Как правило - в формате HTML. В том числе - "чистый HTML". Таким образом фраза "причем здесь чистый PHP, когда речь идет о чистом HTML" вызывает только улыбку smile. Кроме того, судя по Вашим сообщениям Вы не осознаете разницу между понятиями "сайт развлекательного характера" и "маштабный web-проект".  Как следствие - Ваше мнение, в любом случае, будет игнорироватся, а следовательно писать что-либо для Вас не имеет смысла. Прощайте.
PM MAIL   Вверх
Fortop
Дата 23.4.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Yoreck @  23.4.2008,  13:50 Найти цитируемый пост)
Проблема в том что у мя, как правило, на одну и туже сессию приходится несколько открытых табов, ну или браузеров там. Иначе пользователю неудобно работать.

Не вижу проблемы в другой теме я описал как это сделать.

http://forum.vingrad.ru/index.php?showtopi...t&p=1488274
http://forum.vingrad.ru/index.php?showtopi...t&p=1488488

При любых перемещениях GET/POST - неважно.
Передаешь не URI, а некий UID (для каждой страницы).
В сессии у тебя хранится массив вида, где UID уникален, а URI - обратный адрес
UID => URI

таким образом если пользователь попытается покинуть нашу страницу по двум разным направлениям
обе страницы получат один и тот же URI в качестве возврата, но будут иметь разный UID.

И поясню, то о чем я не договорил в другой теме -  дерево тут будет смотреться просто замечательно.

Т.е. хранить стоит.
PUID CUID URI

Соответственно для любой страницы мы будем иметь весь путь. Даже если это одна и та же страница, открытая в разных табах
То она будет иметь одинаковый PUID, но разный CUID

Это сообщение отредактировал(а) Fortop - 23.4.2008, 14:17


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Feldmarschall
Дата 23.4.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Yoreck, я решил не выполнять эту просьбу. Здравствуйте =)

Для начала, открой для себя функцию urlencode. Я понимаю, что писателям масштабных веб-проектов недосуг до мануала, так что, это небольшой подарок.

Теперь по поводу 10 шагов. А какой смысл вообще держать 10 шагов, а не один? 
Ну, не говоря уже о том, что все остальные масштабные веб-проекты обходятся как-то без столь экстравагантного функционала.

Ужасные проблемы с методом POST поражают воображение. Не мог бы ты попродобнее описать их?

По поводу стороны, на которой выполняется РНР. Очень интересный рассказ, я узнал из него много нового. Только он не закончен. А окончание я уже писал: В браузере у нас - чистый хтмл. И вопрос сводится к тому, как что-либо передать из него =)

Добавлено через 10 минут и 42 секунды
SamDark, Fortop, положа руку на сердце - вы действительно считаете, что городить весь этот огород в сессию лучше, чем просто передавать ури по ссылке? 

Это сообщение отредактировал(а) Feldmarschall - 23.4.2008, 15:00
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.