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

Форум PHP

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

 

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

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

тема: Проблема с header ("Location: .....)
 
 автор: MoriK   (04.04.2006 в 17:23)
 
 

файл login.php методом POST отправляет данные о логине и пароле в файл main.php:

main.php в случае некорректной аутентификации автоматически перебрасывает обратно
на login.php

main.php:
<?PHP
include("authlib.inc");
$id = get_user_id(@$_POST['login'],@$_POST['pass']);
if ($id == -1) {
print header ("Location: login.php");
exit;
}
?>

Результат:
Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\main.php:2) in z:\home\localhost\www\main.php on line 6

в общем print header ("Location: login.php"); не хочет робить!

   
 
 автор: Trianon   (04.04.2006 в 17:29)   письмо автору
 
   для: MoriK   (04.04.2006 в 17:23)
 

Предупреждение: Невозможно передать данные заголовков - заголовки уже отправлены.
Вывод был начат на строке 2 файла main.php.
Строка 2 - это include? этот файл вообще есть?

   
 
 автор: MoriK   (04.04.2006 в 17:35)
 
   для: Trianon   (04.04.2006 в 17:29)
 

Как переводится я знаю.

<?PHP
print header ("Location: login.php");
exit;
?>
Если оставить этот вариант, таже ошибка.... че делать!?!?!?

   
 
 автор: Trianon   (04.04.2006 в 17:36)   письмо автору
 
   для: MoriK   (04.04.2006 в 17:35)
 

Та же ошибка? Значит еще до первой угловой скобки <?php у Вас в файле лежат какие то символы.
СТОП!
Почему print header?
просто header("Location: login.php");
print - это же вывод данных!

   
 
 автор: MoriK   (04.04.2006 в 17:45)
 
   для: Trianon   (04.04.2006 в 17:36)
 

Тоже самое((
<?PHP
//include("authlib.inc");
//$id = get_user_id(@$_POST['login'],@$_POST['pass']);
//if ($id == -1) {
header ("Location: login.php");
exit;
//}
?>
Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\main.php:2) in z:\home\localhost\www\main.php on line 6

   
 
 автор: Trianon   (04.04.2006 в 17:53)   письмо автору
 
   для: MoriK   (04.04.2006 в 17:45)
 

прикрепите файл аттачем.

   
 
 автор: Лёлик   (04.04.2006 в 17:54)   письмо автору
 
   для: MoriK   (04.04.2006 в 17:45)
 

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

   
 
 автор: MoriK   (05.04.2006 в 07:30)
 
   для: Лёлик   (04.04.2006 в 17:54)
 

Ну вы же сами видите что ета команда первая идет в окне....
Может из за того что это окно было методом пост из другой странички открыто, т.е. были переданы вполне конкретные параметры...

   
 
 автор: 10100100   (05.04.2006 в 07:46)   письмо автору
 
   для: MoriK   (05.04.2006 в 07:30)
 

хм... тут действительно не разберёшься без атача. по идее мог вызвать ошибку Инклуд, но поскольку он закоментен то я даж не знаю....
а main.php случаем не вставляется куданибудь Инклудом?

   
 
 автор: Морик   (05.04.2006 в 08:29)
 
   для: 10100100   (05.04.2006 в 07:46)
 

В общем вот сехма:
login.php (запускается первым)
<HTML>
<FORM method='POST' action = 'main.php'>
Логин: &nbsp <INPUT TYPE=text name='login'><br>
Пароль: <INPUT TYPE=password name='pass'><br>
<INPUT TYPE=submit name='send' value='Войти'>
</FORM>
</HTML>

main.php

<?PHP
include("authlib.inc");
$id = get_user_id(@$_POST['login'],@$_POST['pass']);
if ($id == -1) {
header ("Location: login.php");
exit;
}
?>

authlib.inc

<?php
$passwd["Ivanov"]["id"] = 1289;
$passwd["Ivanov"]["password"] = "pass1";
$passwd["Petrov"]["id"] = 1423;
$passwd["Petrov"]["password"] = "table";
$passwd["Sidorov"]["id"] = 4598;
$passwd["Sidorov"]["password"] = "nothing";

function get_user_id($login, $password) {
GLOBAL $passwd;
if ($passwd[$login]["password"] == $password) {
return $passwd[$login]["id"];
} else {
return -1;
}
}

function get_correct_login($user_id) {
GLOBAL $passwd;
return in_array($user_id, $passwd);
}

?>

   
 
 автор: Trianon   (05.04.2006 в 10:04)   письмо автору
 
   для: Морик   (05.04.2006 в 08:29)
 

Я, например, ничего такого не вижу. Перед <?php мог затесаться пробел, пустая строка, или вообще невидимый символ вроде нуля. Кроме того, в некоторых случаях в выводимый поток начинает писать сам php. Что показывает просмотр в виде HTML на той странице, где вывыводится headers already sent...?

   
 
 автор: to4kaRU   (05.04.2006 в 11:30)   письмо автору
 
   для: Морик   (05.04.2006 в 08:29)
 

Проверь еще чтобы в конце фала authlib.inc не было пустой строки или пробела. Т.е. символ > должен быть последним.

   
 
 автор: Trianon   (05.04.2006 в 11:32)   письмо автору
 
   для: to4kaRU   (05.04.2006 в 11:30)
 

Это конечно нужно проверить. На будущее.
Да только сейчас вызов его закомментирован. А ошибка остается.Так что дело не в нем.

   
 
 автор: to4kaRU   (05.04.2006 в 11:46)   письмо автору
 
   для: Trianon   (05.04.2006 в 11:32)
 

Да, действительно.. только мне сдается, что автор сам что-то немного напутал.. Посмотрите на сообщение об ошибке, в посте, где строка с include закомментирована - там говорится, что вывод начат во второй строке, а ошибка в 6-ой, в то время, как header по коду находится в пятой.. Может, я чего-то не понимаю, но что-то тут не так...

   
 
 автор: Trianon   (05.04.2006 в 12:23)   письмо автору
 
   для: to4kaRU   (05.04.2006 в 11:46)
 

Пустая строка, наверное. Я отметил такую возможность в реплике 10:04

   
 
 автор: MoriK   (05.04.2006 в 10:35)
 
   для: MoriK   (04.04.2006 в 17:23)
 

я так понял надо забить....((

   
 
 автор: chars   (05.04.2006 в 10:53)   письмо автору
 
   для: MoriK   (05.04.2006 в 10:35)
 

Попробуй " echo "<head><meta http-equiv=\"Refresh\" content=\"1; url=имя_файла_перехода\"></head>";

   
Rambler's Top100
вверх

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