[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редирект выдаёт ошибку
golovolom
Со страницы авторизации, получившей введённые логин и парольметодом POST, при определённых проверках должен происходить редирект на разные страницы. Но при достижении строки с header выводится ошибка

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\Avenging\www\authorize.php:3)

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


Где моя ошибка? вот текст:




<?php

$connection = mysql_connect("localhost","avenging","vehfirf"); //соединяемся с сервером базы данных
if (!$connection)
{ // если нет коннекта
$_POST['reginfo']="Извините, работа с учётными записями в данный момент невозможна по техническим причинам.";
header ("Location:index.php");
}
else // коннект есть
{
if(!mysql_select_db("имя_базы")) // выбираем базу данных, проверяем выбралась ли
{
$_POST['reginfo']="Извините, работа с учётными записями в данный момент невозможна по техническим причинам.";
header ("Location:index.php");
}
else
mysql_query("SET NAMES cp1251"); // запрос на установку кодировки


$query ="SELECT password FROM users WHERE login = '".$_POST['log']."'";
$result = mysql_query($query); // получаем выборку из базы
if (mysql_num_rows($result)!=0) //если количество записей (найденных пользователей) не ноль
$found_user_pas = mysql_result($result,0); // достаём пароль найденого пользователя

if (($found_user_pas==$_POST['pas']) &&($_POST['pas'])!="") //если пароль введённый и пароль в базе совпадают, и введён не пустой пароль
{
$_POST['login'] = $_POST['log']; // сохраняем логин в глобале
$_POST['log'] = ""; // удаляем временный логин
$_POST['authorize'] = true; // авторизуем чувака
// тут добавить id сессии в куки для дальнейшей самоавторизации

header ("Location:index.php"); // перенаправляем на главную
}
else
{
$_POST['reginfo']="Пользователя с таким логином и паролем не существует. Введите верные логин и пароль или пройдите регистрацию.";
header ("Location:index.php");
}

}






?>





Спустя 3 минуты, 20 секунд (30.06.2011 - 20:24) Winston написал(а):
Ты эту страницу нигде не инклюдишь ?

Спустя 2 минуты, 23 секунды (30.06.2011 - 20:27) golovolom написал(а):
Цитата (PHPprogramer @ 30.06.2011 - 17:24)
Ты эту страницу нигде не инклюдишь ?

я её вызываю из файла authorize_box.php

<form action='authorize.php' method='post'>
<input type=text name=log value=Логин class='content_box input'>
<input type=password name=pas value=Пароль class='content_box input'>
<input type=submit name=vhod value=Вход class='content_box button'>
</form>

а вот он уже include в файле index.php

Спустя 24 секунды (30.06.2011 - 20:27) walerus написал(а):
Цитата (PHPprogramer @ 30.06.2011 - 17:24)
Ты эту страницу нигде не инклюдишь ?

+1

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

Спустя 1 минута, 25 секунд (30.06.2011 - 20:29) golovolom написал(а):
Цитата (walerus @ 30.06.2011 - 17:27)
Цитата (PHPprogramer @ 30.06.2011 - 17:24)
Ты эту страницу нигде не инклюдишь ?

+1

как мне в таком случае поступить?

Спустя 3 минуты, 30 секунд (30.06.2011 - 20:32) Winston написал(а):
Напрягают такие вот записи.
$connection = mysql_connect("localhost","avenging","vehfirf"); //соединяемся с сервером базы данных
if (!$connection)
{ // если нет коннекта
$_POST['reginfo']="Извините, работа с учётными записями в данный момент невозможна по техническим причинам.";
header ("Location:index.php");
}


Все ведь можно свести к
 //соединяемся с сервером базы данных
$connection = mysql_connect("localhost","avenging","vehfirf") or die('Извините, работа с учётными записями в данный момент невозможна по техническим причинам.');

UDP
И зачем пихать текст в пост, а потом делать редирект? Ведь данные очистятся
Мой тебе совет. Замени все редиректы при коннекте к БД на or die

Спустя 2 минуты, 24 секунды (30.06.2011 - 20:35) walerus написал(а):
golovolom обрамляй код, который ты постишь в теги PHP, чтоб читабельный текст был )

Спустя 5 минут, 32 секунды (30.06.2011 - 20:40) golovolom написал(а):
Напрягают такие вот записи.


Все ведь можно свести к

соединяемся с сервером базы данных
$connection = mysql_connect("localhost","avenging","vehfirf") or die('Извините, работа с учётными записями в данный момент невозможна по техническим причинам.');


у меня было die, но после появления ошибки я начал искать из-за чего она могла появиться, я не совсем в курсе что является выводом в окно браузера а что нет, 4ый день учусь только)) потому и написал в таком виде после различных переделок и проверок


И зачем пихать текст в пост, а потом делать редирект? Ведь данные очистятся

а вот этого я не знал. спасибо за подсказку

Спустя 2 минуты, 43 секунды (30.06.2011 - 20:43) Winston написал(а):
Кодировка файла какая?
Если utf-8
То может быть UTF-8 BOM и в следствии ошибка.

Спустя 4 минуты, 57 секунд (30.06.2011 - 20:48) walerus написал(а):
Вывали коды всех трех файлов, а то что то нифига непонятно... только в тегаг PHP.

Над окошком куда вставляешь текст есть кнопочка PHP, вот нажимаешь ее, вставляешь код, потом еще раз ее, что б получилось примерно так:

[ php ]

тут твой код

[ /php ]

только без пробелов ...

Спустя 1 минута, 50 секунд (30.06.2011 - 20:50) walerus написал(а):
Цитата (PHPprogramer @ 30.06.2011 - 17:43)
Кодировка файла какая?
Если utf-8
То может быть UTF-8 BOM и в следствии ошибка.

Не, если бь был BOM, то он был бы в 1й строке, а по ошибке я так понял в 3й.

Спустя 8 минут, 1 секунда (30.06.2011 - 20:58) Winston написал(а):
Цитата (walerus @ 30.06.2011 - 20:50)
Не, если бь был BOM, то он был бы в 1й строке, а по ошибке я так понял в 3й.

Нет он выдаст ошибку в строке с header

Спустя 18 минут, 6 секунд (30.06.2011 - 21:16) golovolom написал(а):
Цитата (PHPprogramer @ 30.06.2011 - 17:43)
Кодировка файла какая?
Если utf-8
То может быть UTF-8 BOM и в следствии ошибка.

об этом я читал, скачивал утилитку, которая проверяет файлы на наличие UTF-8 BOM, но она не нашла ничего такого...


Спустя 23 минуты, 56 секунд (30.06.2011 - 21:40) golovolom написал(а):
Переделал немного текст, вставил кое-какие поправки по советам, данным здесь, но проблема не исчезла, появилась ещё одна - куки не устанавляваются опять же, замучался уже user posted image

Я так и не пойму где у меня происходит вывод в браузер из-за которого нельзя использовать setcookie и header. Ведь страница authorize.php после передачи ей через POST данных открывается новая, пустая и вывода я нигде не делал тут..


<?php
//соединяемся с сервером базы данных, выходим если не соединились
$connection = mysql_connect("localhost","logn","pass")
or die ("Извините, работа с учётными записями в данный момент невозможна по техническим причинам.");

// выбираем базу данных, выходим если выбор не прошёл
$select = mysql_select_db("my_base")
or die ("Извините, работа с учётными записями в данный момент невозможна по техническим причинам.");

mysql_query("SET NAMES cp1251"); // запрос на установку кодировки

$query ="SELECT password FROM users WHERE login = '".$_POST['log']."'";
$result = mysql_query($query); // получаем выборку из базы
if (mysql_num_rows($result)!=0) //если количество записей (найденных пользователей) не ноль...
$found_user_pas = mysql_result($result,0); // достаём пароль найденого пользователя

if ( ($found_user_pas==$_POST['pas']) && ($_POST['pas']!="") ) //если пароль введённый и пароль в базе совпадают
{
setcookie('login', $_POST['log']); // сохраняем логин в куки
//$_POST['login'] = $_POST['log']; // сохраняем логин в глобале

setcookie('authorize', true); // записываем в куки что чел авторизован
// $_POST['authorize'] = true; // авторизуем чувака
// тут добавить id сессии в куки

header("Location: http://www.yandex.ru/"); // на яндекс к примеру

//die ("Спасибо что зашли к нам,".$_POST['login'].".");

}
else
die ("Пользователя с данным сочетанием логина и пароля не существует.
Введите корректные логин и пароль или пройдите регистрацию."
);
?>


вот всё что в файле authorize.php
результат не радует


Warning: Cannot modify header information - headers already sent by (output started at ..........:3) in ........ on line 19
Warning: Cannot modify header information - headers already sent by (output started at ..........3) in ........ on line 21
Warning: Cannot modify header information - headers already sent by (output started at ........:3) in ........ on line 24


PS: попробовал в самое начало файла вставить

setcookie('login', "dfgdfg"); //5ая строка
echo $_COOKIE['login'];

результат такой

Warning: Cannot modify header information - headers already sent by (output started at .......:3) in ....... on line 5
Warning: Cannot modify header information - headers already sent by (output started at .........:3) in ....... on line 23
Warning: Cannot modify header information - headers already sent by (output started at..........:3) in ....... on line 25
Warning: Cannot modify header information - headers already sent by (output started at ...........:3) in.......... on line 28


bom не должно быть, так как редактирую в dreamweaver, в настройках стоит кирилица-виндовс..
кстати всё это на локальном сервере происходит. может быть проблема в этом?

а вот файл index.php

<?php
include 'is_cookies.php';
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>

<
head>

<
meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<
title>title</title>
<
link rel="stylesheet" type="text/css" href="styles/styletest.css">
</
head>

<
body>

<
div id="layer1">
<
img src="img/design/title.png" width="100%">
</
div>

<
div id="layer2">
<?php

include 'authorize_box.php';

?>
<div id="menu" class="content_box">
<?php
include 'menu.php';
?>
</div>

<
div id="content" class="content_box">
// тут контент, нет смысла занимать место

</div>

<
div class="content_box" id="footer">
<?php
include 'footer.php';
?>
</div>
</
div>
</
body>
</
html>


а вот authorise_box.php

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">

<
div id='auth' class='content_box' align='left'> <!-- окошко авторизации -->
<?php
echo "Приветствую, ".$_POST['login'].".";//.$_POST['temp'].$_COOKIE['session_id']; // пишем приветственное сообщение
if (!$_POST['authorized']) // если пользователь не авторизован
echo // выводим форму ввода для авторизации
"
Для входа на сайт введите свой логин и пароль, указанный при регистрации.
<form action='authorize.php' method='post'>
<input type=text name=log value=Логин class='content_box input'>
<input type=password name=pas value=Пароль class='content_box input'>
<input type=submit name=vhod value=Вход class='content_box button'>
</form>

"
;
?>

</div>

Спустя 53 минуты, 32 секунды (30.06.2011 - 22:33) Invis1ble написал(а):
golovolom
Ниче не понятно. Выложи архив, я гляну.

Спустя 22 минуты, 37 секунд (30.06.2011 - 22:56) golovolom написал(а):
http://dwa82.narod2.ru/www.rar тут архив

Спустя 5 минут, 29 секунд (30.06.2011 - 23:01) Invis1ble написал(а):
Нажми "Редактировать" на своем последнем посте - там будет поле в форме для загрузки файла.

Спустя 30 минут, 6 секунд (30.06.2011 - 23:31) golovolom написал(а):
вставил архив в предыдущее сообщение

Спустя 26 минут, 14 секунд (30.06.2011 - 23:58) Invis1ble написал(а):
В authorize.php в начале стоят 2 пустые строки - это есть вывод. Убери их.

Спустя 3 минуты, 50 секунд (1.07.2011 - 00:01) golovolom написал(а):
Цитата (Invis1ble @ 30.06.2011 - 20:58)
В authorize.php в начале стоят 2 пустые строки - это есть вывод. Убери их.

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

Спустя 3 минуты, 14 секунд (1.07.2011 - 00:05) Invis1ble написал(а):
golovolom
Цитата
Не думал что пустые строки посылаются как вывод информации.

пустая строка - это как минимум перевод каретки \n
Цитата
Спасибо громадное за потраченное время

пожалуйста

Спустя 6 минут, 40 секунд (1.07.2011 - 00:11) golovolom написал(а):
Цитата (Invis1ble @ 30.06.2011 - 21:05)
golovolom

пустая строка - это как минимум перевод каретки \n

Точно блин, не подумал. Если я суслика не вижу - не значит что его нет)))


_____________
Я не помню, как пьяный вчера это писал
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.