![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
linuxoid |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Здравствуйте друзья. У меня такой вопрос:
Сейчас я делаю так (Вы поймете о чем я, из кода): index.php
functions.php
В данном случае, если $logged_in === true, то все ОК, но если нужно перебросить пользователя на login.php, то нужно делать редирект. Так вот мой вопрос такой: как организовать код таким образом, чтобы было удобно и грамотно, т.е. чтобы я смог использовать Header("Location:... Еще одна сомнительная схема, которую я использую (из за удобства - все в 1й функции), но из за этого не могу применять (точнее могу с помощью ob_start(), ob_end_flush(), но это уже другая история) Header("Location:... .
Я так понимаю, что ответ заключается в изменении action="" на выделенный файл, который обрабатывает форму? К примеру action="process_from.php". Тогда оттуда уже можно будет сделать Header("Location.... А если возникли ошибки и мне надо снова вывести форму с уже введенными значениями и как бы снова запустить этот круг? Это сообщение отредактировал(а) linuxoid - 7.6.2010, 22:44 |
||||||
|
|||||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
вопросы с редиректом решаются всегда очень просто. код, который отвечает за редирект выносится до первого вывода (до всяких <!DOCTYPE...)
|
|||
|
||||
linuxoid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
В том то вся и проблема. У меня сама концепция кода такая, что идет главный index.php. В нем в зависимости от $item'a вызываются различные функции. В любой из этих функций (если есть форма или проверки какие-то) есть условие, при выполнении которого (к примеру $_POST["process_form"]) происходит проверка формы, затем вставка в базу, затем редирект. Вот тут и происходит неизбежное. Т.к. изначально функция была вызвана из index.php, то часть HTML'a всегда выводится вне зависимости от того, что там идет дальше (т.е. форма хочет сделать редирект к примеру). Поэтому я и спрашиваю, как бы по грамотнее все это реорганизовать, чтобы мухи отдельно, котлеты отдельно.
|
|||
|
||||
нуп |
|
|||
![]() Ботокодер ![]() ![]() Профиль Группа: Участник Сообщений: 987 Регистрация: 22.6.2009 Где: Кременчуг Репутация: нет Всего: 33 |
Разбей хтмл на функции. Одна выводит верхнюю часть, вторая нижнюю, или как там тебе надо. А проверка на редирект будет первой, до вызова функций по отрисовке
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
linuxoid, есть грязное решение этой проблемы. В начале файла нужно поставить
тем самым весь текст, который выводится сервером будет задержан до окончания вывода. Так что вызов header('location...' попадет именно в свою очередь. А почему это решение грязное - будет ясно, когда все это хозяйство будет разростаться и отлаживаться... ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
linuxoid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Я уже думал о ob_start();, но чувствую, что это просто маскировка глобальной проблемы, которая как раз скрыта в самой организации кода. Хотя, честно говоря, различные разбиения на функции или вынос в отдельные файлы - тоже очень большая жертва в пользу работы header'a. Очень уж удобна моя схема, когда все дела в самой функции - и вывод, и обработка.
Может быть сделать как в паттерне MVC? По моему там как раз то решение, которое медленно, но верно назревает у меня. В общем сомнения такие - сейчас все супер удобно. Все функции находятся в functions.php и являются полностью самодостаточными. Проблема - нельзя использовать header("Location... как полагается. - Другой вариант - переделать всю работу (на что уйдет много времени) и действительно распределить либо как предложил нуп (что по моему не очень удачно, т.к. для одной задачи нужно будет использовать как минимум 2 функции - одна над HTML, другая выводит HTML - хотя в целом это тоже простой вариант) - или сделать обработку вообще в других файлах (как MVC шаблон). |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
ksnk, ну не совсем грязное. если есть еще и кэширование то способ себя оправдывает на все 100
-------------------- Amazing ![]() |
|||
|
||||
IgorIV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
До первого вывода определяем что надо делать. Все супер удобно, но есть проблема ![]() |
|||
|
||||
linuxoid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
IgorIV thx, думаю это самое удачное решение в моем случае + не так много переделывать.
В общем вывод такой: - либо использовать ob_start(), ob_end_flush() и оставить все на своих местах - либо более предпочтительный вариант (что я и сделаю), тоже с минимальными потерями.
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |