редирект..

mixwell

Новичок
редирект..

у меня после выполнения редиректа на javascript(указан ниже) все равно выполняются нижележащие функции.
PHP:
  if (empty($mailTitle) || empty($mailData))
    {
       echo "<script language=JavaScript>location.replace('index.php?part=4&subPart=1&action=search&subAction=2')</script>";
     }        
   mysql_query("UPDATE mail SET checkMail  = 1 WHERE idMail = " . $idMail);
При выполнении вышеуказанного кода сраница редиректится, если переменные $mailTitle и $mailData пустые. Но все равно выполняются лежащие ниже редиректа функции(в данном случае- это mysql_query()). Почему так? Ведь страница редиректица, и после редиректа ни чего не должно выполнятся, так как скрипт перешел на другую страницу. Подскажите что не так. Раньше работало все нормально(до перехода на новый хостинг).
Всем большое спасибо.
 

Beavis

Banned
mixwell
разберись что выполняется на сервере, а что у клиента и в какой последовательности...
и почитай про способы переадресации
 

Фанат

oncle terrible
Команда форума
mixwell
что, в твоем понимании, происходит, когда "страница редиректится"? как можно более подробно
 

mixwell

Новичок
спасибо. Значит редиректа на javascript исполняется после выполения всего php скрипта. Да это правильно, но почему на старом хостинге после редиректа на javascript код написанный ниже него не исполнялся?
Значит просто достаточно поставить exit; после редиректа, чтобы не выполнялась остальная часть кода?
 

Beavis

Banned
mixwell
впринципе достаточно, только непонятно почему редирект именно на яваскрипте? а если у клиента отключены скрипты?
 

mixwell

Новичок
подскажите альтернативный вариант, буду очень благодарен:)
 

fStrange

Новичок
mixwell header('Location: moy_redirect_url')
но с ошибкой лучше все же разберись
ответь для себя на вопрос где исполняется php и где жабаскрипт и возможно поймешь в чем проблема у тебя.
 

mixwell

Новичок
спасибо всем огромное! to: fStrange а про какую ошибку вы говорите?

-~{}~ 28.10.07 20:32:

я думаю что сейчас все исполнятся правильно. вначале исполняется php(в том числе и все mysql_query() и т.д.) а потом javascript. Или не так?
 

Фанат

oncle terrible
Команда форума
mixwell
он тормоз. говорит про ошибку, которая была в начале, и которую ты уже исправил
 

Toxic_Cat

Новичок
Автор оригинала: mixwell
спасибо всем огромное! to: fStrange а про какую ошибку вы говорите?

-~{}~ 28.10.07 20:32:

я думаю что сейчас все исполнятся правильно. вначале исполняется php(в том числе и все mysql_query() и т.д.) а потом javascript. Или не так?
Ставь после редиректа exit/die, чтобы сценарий прекращал выполнение (хотя это не всегда приемлимо, тут надо исходить из ситуации).
 

Beavis

Banned
Автор оригинала: mixwell
вначале исполняется php(в том числе и все mysql_query() и т.д.) а потом javascript.
сначала браузер клиента посылает запрос на получение страницы на сервер, на сервере выполняется PHP-скрипт, результатом которого является в твоем случае HTML-код c JavaScript-вставками, и этот результат отдается клиенту, появляется в браузере и уже в этот момент исполняется JavaScript

Автор оригинала: Toxic_Cat
Ставь после редиректа exit/die, чтобы сценарий прекращал выполнение (хотя это не всегда приемлимо, тут надо исходить из ситуации).
а в 5-ом сообщении сверху о чем написано??
 

mixwell

Новичок
скорее всего просто был только вывод информации, без каких-либо операций с базой данных, что и создавало впечатление, что скрипт прерывает работу php. Хотя когда чуть-чуть подумаешь понимаешь, что такого не может быть. Я не новичок в php, просто очень глупо лохонулся, можно было и догадаться.
Всем большое спасибо за помощь!

-~{}~ 28.10.07 23:15:

с header('Location: moy_redirect_url') есть одна проблема, указываться он должен до вывода информации, а в данной реализации это не просто.
 

Фанат

oncle terrible
Команда форума
это только так кажется.
но иногда да, бывают такие кривые скрипты, которые выводят текст всегда - когда надо и когда не надо
 

mixwell

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

Фанат

oncle terrible
Команда форума
разумеется.
с "логистической" точки зрения, скрипт, который ничего не выводит пользователю, ничего не должен ему выводить.
поэтому, если он что-то выводит, то это неграмотно.

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

mixwell

Новичок
ФАНАТ, а может быть правильнее сделать так чтобы скрипт в котором будет необходим редирект лучше располагать в отдельном файле? Это позволит сделать грамотный редирект.
Просто у меня работа сайта организованна так:
существует скрипт index.php который определят по get-переменным какой раздел сайта загрузить и загружает его с помощью require(). Каждый раздел сайта храниться в ***.inc Перед реализацией процесса выбора раздела я загружаю (опять же с помощью require()) up.inc, который содержит верхнюю часть сайта, которая всегда постоянна. Данная логика сайта на позволит выполнить редирект в одном из ***.inc, так как до него будет загружен up.inc. Можно конечно сделать проверку в файле index.php до загрузки up.inc, но это будет нелепо....
 
Сверху