Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: header - посланные заголовки
 
 автор: 1999   (29.07.2006 в 23:37)   письмо автору
 
 

подскажите плиз. я начал писать собственный скрипт новостей с БД наподобие cutenews.
проблемка возникла при использовании header'а (у меня это постоянно больное место)
при выходе из администрироования unset'ятся переменные сессии, удаляется сессия (session_destroy) и производится header("location:index.php").
Тут собсна и возникает ошибка - пишет эту гадскую проблему, что заголовки уже посланы.
причем посланы на той строке, где и прописан этот хэдер.
я б сделал метой, но слышал, что не у всех она работает =(
причем при входе - все нормально - хэдер ошибок не выдает и плавно переходит на администрирование. Не подскажете, в чем ошибка?
Вот код этого index.php


<?php
// Стартуем сессию
session_start();

// Ставим уровень обработки ошибок
error_reporting(E_ALL & ~E_NOTICE);

// Подключаем конфиг, функции и соединяемся с БД
require_once("includes/config.php");
require_once(
"includes/functions.php");
db_connect();

// Вход в систему - обработка формы входа
if (isset($_POST['login']) && isset($_POST['password']))
{
  
// проверка правильного логина и пароля
  // если все нормально - создаем переменные сессии и хэдером перебрасываем
  // : header("location: index.php")
}
?>

<html>
<head>
<title>...</title>
<script src="includes/javascripts.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body>

<center><table class=main>
<tr><td>

<?
// т.е. если прошел проверку
if ($_SESSION['edit_mode'] == "on" && check_auth())
{
  
// администрирование

  // в т.ч. выход - ВОТ ЭТО
  
if ($_GET['action'] = "logout")
  {
    unset(
$_SESSION['edit_mode'],$_SESSION['user_id'],$_SESSION['pass']);
    
session_destroy();
    
header("location: index.php");
    break;
  }
}
else
{
  
// выводим форму входа
}
?>

</td></tr>
</table></center>

</body>
</html>

   
 
 автор: sasch   (30.07.2006 в 00:50)   письмо автору
 
   для: 1999   (29.07.2006 в 23:37)
 

Если я не ошибаюсь, то нужно header("location: index.php"); разместить до того как HTML cделает к-либо вывод. Перенесите обработку в самое начало, до <html>.....

   
 
 автор: Киналь   (30.07.2006 в 01:15)   письмо автору
 
   для: 1999   (29.07.2006 в 23:37)
 

Ну да, у вас сначала выводится html-код, а потом посылается заголовок.
Вообще же универсальное решение - это буферизация: первая строчка скрипта - ob_start(), последняя - ob_end_flush(). И не надо думать, когда что выводится.

   
 
 автор: beng-beng   (30.07.2006 в 03:04)   письмо автору
 
   для: 1999   (29.07.2006 в 23:37)
 

Кроме <meta http-equiv='refresh' ...> и header('location: ...') можно еще javascript-ом window.location='...'

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования