header после вывода информации

dorfey

Guest
header после вывода информации

столкнулся с такой вот проблемой.
имеем скрипт news.php
его содержимое:
шаг.1
PHP:
if(переменной get[id] не существует){
# выводим список новостей.
}
шаг.2
PHP:
if(если переменная get[id] существует))
{
# выбираем из бд новость с id = get[id]
# если новость с таким id имеется то выводим ее, иначе --->
# если юзер пришел по прямой ссылке на несуществующую новость делаем редирект на список новостей.
header("location: 404.php")
}
редирект не срабатывает, т.к. перед ним был вывод списка новостей.
Каким образом мона всетаки сделать редирект если новости не существует?
пока вижу тока два варианта:
1. поменять местами шаг.1 и шаг.2 тогде редирект будет обрабатываться до вывода информации. вариант не подходит, т.к. будет убогая структура скрипта.
2. использовать редирект в виде js. но жабу я как-то совсем не уважаю.
 

Quidle

Полноценный новичок
PHP:
echo '<meta http-equiv="Refresh" content="0;URL='. $url. '">';
Вариант ?
 

Serguitar

Новичок->продвинутый
dorfey
Откуда вывод, если новости не существует? Так и пиши, если есть - выводи, нету - посылай...
 

Фанат

oncle terrible
Команда форума
убогая структура скрипта у тебя сейчас.
а вариант 1 - единственно правильный.

-~{}~ 14.06.05 14:57:

Alex2003
else тут не нужно
 

Alex2003

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

dorfey

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

SelenIT

IT-лунатик :)
Вообще не понял. Откуда при приведенной структуре скрипта перед редиректом берется "вывод списка новостей", если условия для "шага 1" и "шага 2" взаимоисключающи?
 

dorfey

Guest
SelenIT
Скрипт разделен на две части.
первая часть это печать списка всех новостей.
вторая часть это печать новости с id=get[id].
условие очень простое:
PHP:
if(!isset($_GET['id'])){
 mysql_query(выбираем_из_бд_все_новости);
 while($row){
  echo"link=[news.php?id=$id]";
 }
}else{
 mysql_query(выбираем_из_бд_новость_с_id=$_GET['id']);
 if(mysql_num_rows==0){
  header("редирект_на_404.php");
 }else{
  принтуем новость
}
Вот в таком виде я мя не срабатывал редирект, т.к. до него была печать списка новостей.
Что тута не понятно?
 

dmk

Guest
dorfey,
не понял что у тебя выводится если новости с запрашиваемым id нет в базе.
 

dorfey

Guest
dmk
должен быть редирект на страницу 404.
редирект не работал т.к. перед хидером был принт.
Сча просто поменял местами хидер и принт, получилось:
1. хидер
2. принт
 

Фанат

oncle terrible
Команда форума
SelenIT прав.


dorfey, ты сам себе противоречишь.
в коде у тебя написано, что если в _GET['id'] что-нибудь есть, то списко НЕ ВЫВЕДЕТСЯ.
а ниже ты тут же говоришь, что была печать.

скорее всего, дело в else - вверху у тебя его нет, а внизу есть.
а как на самом деле?

-~{}~ 14.06.05 17:39:

хахаха, я понял.
вся "уродливость" скрипта заключалась в том, чтобы поставить else =)))
 

dorfey

Guest
Фанат
Все еще намного смешнее, у меня инклуд top.html был "выбит" из условия всей структуры скрипта.
т.е. перед отправкой хидера у мя вне зависимости от условий инклудился top.html
С else там проблем нет. Была нарушена структура всего сайта.
Усе, пойду выпью Йаду! lol
 
Сверху