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

Форум PHP

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

 

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

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

тема: Warning: Cannot modify header information - headers already sent by
 
 автор: alex151   (05.08.2007 в 17:22)   письмо автору
 
 

как не шаманю всё время получаю :

Warning: Cannot modify header information - headers already sent by (output started at ...\login.php:1) in ...login.php on line 33

Warning: Cannot modify header information - headers already sent by (output started at ...\login.php:1) in ...\login.php on line 34

Warning: Cannot modify header information - headers already sent by (output started at ...\login.php:1) in ...\login.php on line 35
вот виновник данного события :

<?php
if(!$_POST[log] && !$_POST[pas])
{
 echo 
"
 <link href='inc/style.css' rel='stylesheet' type='text/css'>
 <br><br><br><br><br><br><br><br>
 <div align=center><font color=silver>Пожалуйста авторизуйтесь</font></div>
 <br>
 <form method='POST' action='login.php'>
 <TABLE class=etable cellSpacing=1 cellPadding=3 align='center'>
        <TR class=etitle>
            <td>login</td>
            <td align='center'><input name='log' type='text' size=15><br></td>
        </tr>
        <TR class=etitle>
            <td>password</td>
            <td><input name='pas' type='text' size=15><br></td>
        </tr>
 </table>
 <table align=center><tr><td><input type='submit' method='POST' value='login'></td></tr></table>
 </form>"
;
}
else {
require(
"inc/connect.php");
mysql_query("set names 'utf8'");
$pas=md5($_POST[pas]);
$afto=mysql_fetch_assoc(mysql_query("select usrnumb,usrname,usrpass,usrnick from usr where usrname='$_POST[log]' and usrpass='$pas'"));
if(
$afto[usrname] != $_POST[log] && $afto[usrpass] != $pas) {echo "<br><br><BR><BR><BR><center> Ошибка авторизации !</center>";}
    else {
    
mysql_query("update usr set lastvisit=now()"); 
setcookie("usrname",$afto[usrname],time()+(3600*24*365));
setcookie("usrnumb",$afto[usrnumb],time()+(3600*24*365));
setcookie("usrpass",$afto[usrpass],time()+(3600*24*365));
echo 
"<link href='inc/style.css' rel='stylesheet' type='text/css'>";
}
}
?>

error_reporting = E_ALL & ~E_NOTICE выставлен. в чём проблема никак немогу понять. проверял и в ИЕ и в файерфоксе. Пожалуйста помогите решить проблему

   
 
 автор: tricket   (05.08.2007 в 17:28)   письмо автору
 
   для: alex151   (05.08.2007 в 17:22)
 

шаманишь плохо) попробуй так!

<?php
session_start
();
if(!
$_POST[log] && !$_POST[pas])

.............

и вообще вся информация о куках должна быть послана ДО тела запроса, приблизительно твоё решение такое

<?php
session_start
();
if(
$_POST[log] && $_POST[pas])
{
require(
"inc/connect.php");
mysql_query("set names 'utf8'");
$pas=md5($_POST[pas]);
$afto=mysql_fetch_assoc(mysql_query("select usrnumb,usrname,usrpass,usrnick from usr where usrname='$_POST[log]' and usrpass='$pas'"));
if(
$afto[usrname] != $_POST[log] && $afto[usrpass] != $pas) {echo "<br><br><BR><BR><BR><center> Ошибка авторизации !</center>";}
    else {
    
mysql_query("update usr set lastvisit=now()"); 
setcookie("usrname",$afto[usrname],time()+(3600*24*365));
setcookie("usrnumb",$afto[usrnumb],time()+(3600*24*365));
setcookie("usrpass",$afto[usrpass],time()+(3600*24*365));
echo 
"<link href='inc/style.css' rel='stylesheet' type='text/css'>";

}
else {
echo 
"
 <link href='inc/style.css' rel='stylesheet' type='text/css'>
 <br><br><br><br><br><br><br><br>
 <div align=center><font color=silver>Пожалуйста авторизуйтесь</font></div>
 <br>
 <form method='POST' action='login.php'>
 <TABLE class=etable cellSpacing=1 cellPadding=3 align='center'>
        <TR class=etitle>
            <td>login</td>
            <td align='center'><input name='log' type='text' size=15><br></td>
        </tr>
        <TR class=etitle>
            <td>password</td>
            <td><input name='pas' type='text' size=15><br></td>
        </tr>
 </table>
 <table align=center><tr><td><input type='submit' method='POST' value='login'></td></tr></table>
 </form>"
;
}
?> 
с учётом того что require("inc/connect.php"); ничего не выводит...
у мну самого были проблемы с пониманием куков) ща выложу да http запроса. после них поймёшь, как они работают.


   
 
 автор: tricket   (05.08.2007 в 17:38)   письмо автору
 
   для: tricket   (05.08.2007 в 17:28)
 

вот как общаются браузер и сервер
браузер посылает:

POST /forum/enter.php HTTP/1.1
Host: softtime.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://softtime.ru/forum/enterform.php?id_forum=1
Content-Type: application/x-www-form-urlencoded
Content-Length: 38

author=tricket&pswrd=***&id_forum=1


сервер отвечает:

HTTP/1.1 200 OK
Server: nginx/0.5.15
Date: Sun, 05 Aug 2007 13:35:40 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
X-Powered-By: PHP/5.2.3
Expires: Mon, 23 May 1995 02:00:00 GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: current_author=tricket; expires=Tue, 13-Nov-2007 13:34:43 GMT; path=/forum/
Set-Cookie: wrdp=1q2w3e; expires=Tue, 13-Nov-2007 13:34:43 GMT; path=/forum/
Content-Length: 115

<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_forum=1'>
          </HEAD></HTML>

как видно тело запроса

<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_forum=1'>
          </HEAD></HTML>

а заголовок ответа сервера(в них и хранятся куки)

HTTP/1.1 200 OK
Server: nginx/0.5.15
Date: Sun, 05 Aug 2007 13:35:40 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
X-Powered-By: PHP/5.2.3
Expires: Mon, 23 May 1995 02:00:00 GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: current_author=tricket; expires=Tue, 13-Nov-2007 13:34:43 GMT; path=/forum/
Set-Cookie: wrdp=1q2w3e; expires=Tue, 13-Nov-2007 13:34:43 GMT; path=/forum/
Content-Length: 115

СЛЕДУЕТ СТРОГО ДО ТЕЛА http запроса!!!!
А телом является echo, print и тд... тоесть любой вывод текста и тд!!
ууфф надеюсь так понятней?)

   
 
 автор: alex151   (05.08.2007 в 17:39)   письмо автору
 
   для: tricket   (05.08.2007 в 17:28)
 

нет тоже неправильно теперь получаю :
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ...\login.php:1) in ...\login.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ...\login.php:1) in ...\login.php on line 2

   
 
 автор: tricket   (05.08.2007 в 17:40)   письмо автору
 
   для: alex151   (05.08.2007 в 17:39)
 

сам файл login.php называется?
<?php перед ним убери пробелы, интеры и тд..

   
 
 автор: alex151   (05.08.2007 в 17:46)   письмо автору
 
   для: tricket   (05.08.2007 в 17:40)
 

да login.php

   
 
 автор: tricket   (05.08.2007 в 17:50)   письмо автору
 
   для: alex151   (05.08.2007 в 17:46)
 

смотри внимательно на пробелы
должно быть строго так
<?php
session_start();
чтоб начало документа было <?php без пробелов и тд!"!!

   
 
 автор: alex151   (05.08.2007 в 17:56)   письмо автору
 
   для: tricket   (05.08.2007 в 17:50)
 

в том то и дело, что пробелов нету. я даже разбил форму и скрипт установки кукисов в разные пхп файлы и нифига - та же ошибка.
сохранение файлов в кодировке utf-8 никак невлияет ?

   
 
 автор: alex151   (05.08.2007 в 18:46)   письмо автору
 
   для: alex151   (05.08.2007 в 17:56)
 

Всё нашёл в чём проблема .... а проблема в призраках ..
пользуюзь прогой Notepad++ для написания пхп-скриптов ну и для проверки просто блокнотом.
проверил скрипт login.php программой ZendStudio-5.5.0 и он нашёл перед тэгом <? символы "п»ї", которые в упор невидели ноутпады, и потом выявился невидимый пробел перед тэгом <? в скрипте connect.php
Так что вот такие вот приколы. Спасибо всем, кто мне помогал.

   
 
 автор: Валерий   (05.08.2007 в 17:28)   письмо автору
 
   для: alex151   (05.08.2007 в 17:22)
 

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

   
Rambler's Top100
вверх

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