Првиет всем!! Только начал локально эксплуатировать PHP Стоит Апач2, PHP 5, MySQL. Все работает штатно. В index.php выполняется код... Код (Text): // Редирект с параметром function redirect( $par ) { header( "Location: index.php?task=" . $par ); exit; } на что PHP ругается: Предупреждение: Не может изменить информацию заголовка - заголовки, уже посланные (вывод, начатый в C:\Program Files\Apache Group\Apache2\htdocs\oow\index.php:7) в C:\Program Files\Apache Group\Apache2\htdocs\oow\index.php на строке 40 Понятно, что не может поменять заголовок уже присланный, но вопрос... а чо делать? Как передернуть свою же страницу с параметрами?
аааааааааааааааааааааааааааааа функция header() должна быть до любого вывода в браузер P.S. Админам: предлагаю наряду с разделами "Программирование на PHP" и "Программирование на PHP для новичков" создать раздел "Программирование на PHP для слепых, глухонемых и тех, кто капитан подводной лодки" и переместить туда все подобные темы
Поверил. Не верно. Один и тот же файл на внешнем хосте заголовки передергивает. На локальном компе: Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\oow\index_bff.php:7) in C:\Program Files\Apache Group\Apache2\htdocs\oow\index_bff.php on line 40 Хотя и там и там он сначала рисует примитивную таблицу и форму входа....
Хорошо, стартовал оттуда то.... в данном случае с винта. И что? Получается, что при работе на локальной машине ни как не удастся перезапустить этот же файл с параметрами? Но это же неправильно, вернее если бы было настолько большое ограничение, то просто куча кода не работало бы. Вероятнее всего, что то необходимо изменить в системе, что? ....... усталость и тупость )))
Я не понимаю проблемы. Считай дерево. Выдели время, объясни дереву. Или переадресуй туда, где разжевали. Опыт PHP исключительно лично наживной. Все лбом. Как и сейчас. Вместо траты времени объясните плиз что делать. Или скажите - здесь ты не сможешь передать в файл параметры. Ну не верю я в это, а как сделать не понимаю.
пхп пишет, что в 7ой строчке начат вывод в браузер, а функция header() должна быть до любого! в браузер выложи свой код тогда уж и там посмотрим
Вот это я причесываю: Код (Text): <html> <head> <title></title> <link type="text/css" rel="StyleSheet" href="http://s24.ucoz.net/src/css/551.css" /> </head> <body style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;"> <?php // Функция получения IP пользователя function get_ip() { if ($ip = getenv("HTTP_CLIENT_IP")) { return $ip; } if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { if ($ip == '' || $ip == "unknown") { $ip = getenv("REMOTE_ADDR"); } return $ip; } if ( $ip = getenv("REMOTE_ADDR") ) { return $ip; } } // Вычисляе хэш безопасности function u_hash( $user , $user_agent , $user_ip , $tm ) { return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm ); } // Получаем текущее время с учетом дробных частей секунды function getmicrotime() { $mt = explode( " ", microtime() ); return ( (float)$mt[0] + (float)$mt[1] ); } // Редирект с параметром function redirect( $par ) { header( "Location: index.php?task=" . $par ); exit; } // Продление сессии (проверка, что пользователь - авторизован) function check() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `u_mail` = '" . mysql_escape_string( $_COOKIE['u_mail'] ) . "' LIMIT 1" ); // Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "u_mail" , "" , time() - 900 , "/" ); redirect( "not_auth" ); } // Парсим полученную запись. global $user; $user = mysql_fetch_object( $result ); // Количсетво минут для жизни сессии $minutes = 15; // Ищем, есть ли активная сессия $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `u_hash` = '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " ); // Если нету активной сессии, перекидываем на форму авторизации if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "u_mail" , "" , time() - 900 , "/" ); redirect( "not_auth" ); } // Если авторизированный пользователь хочет выйти if( isset( $_GET['quit'] ) ) { // Удаляем запись о сессии пользователя mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `u_hash` = '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" ); // чищаем куки и устанавливаем время жизни в прошлом setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "u_mail" , "" , time() - 900 , "/" ); // Возвращаем значение "Ложь" return FALSE; } // Иначе, т.е. если пользователь не хочет выходить else { // Обновляем время последней активности пользователя на текущее. mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `u_hash` = '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" ); // Продлеваем время жизни кук setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" ); setcookie( "u_mail" , $_COOKIE['u_mail'] , time() + ( $minutes * 60 ) , "/" ); // Возвращаем значение "Истина" return TRUE; } } // Функция авторизации function auth() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `u_mail` = '" . mysql_escape_string( $_POST['u_mail'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" ); // Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { redirect( "not_auth" ); } // Парсим полученную запись. $user = mysql_fetch_object( $result ); // Получаем текущее время с учетом дробных частей секунды $tm = getmicrotime(); // Вставляем запись в таблицу с сессиями. mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" ); // Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут setcookie( "time" , $tm , time() + 900 , "/" ); setcookie( "u_mail" , $user -> u_mail , time() + 900 , "/" ); // делам редирект без параметра, т.к. никаких ошибок не было redirect( "" ); } // Функция регистрации function reg() { // Ищем пользователя с именем, указанным в форме регистрации $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `u_mail` = '" . mysql_escape_string( $_POST['u_mail'] ) . "' LIMIT 1" ); // Если пользователь найден, делаем редиркт if( mysql_num_rows( $result ) == 1 ) { redirect( "exists" ); } // Иначе, регистрируем пользователя mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['u_mail'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" ); $_POST['pass'] = $_POST['pass1']; // Делаем как бы автоматическую авторизацию после регисрации. auth(); } // Соединение с MySQL { $host = "localhost"; $port = "3306"; $user = "root"; $pass = "111111111"; $dbnm = "oow"; $h = ( empty( $post ) ) ? $host : $host . ":" . $port; $db = mysql_connect( $h , $user , $pass ); if( !$db ) // Если соединиться не удалось: { print ("Datebase connection failed."); exit(); } if( ! mysql_select_db( $dbnm ) ) { print ("Datebase select failed."); exit(); } } // Проверка куков на наличие пользователя. // пока не делаем. // Если нажата кнопка с именем blogin (Авторизация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) ) { // Если поле логина или пароля пустое - делаем редирект if( empty( $_POST['u_mail'] ) || empty( $_POST['pass'] ) ) { redirect( "login" ); } // В протовном случае переходим к авторизации auth(); } // Если нажата кнопка с именем breg (Регистрация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) ) { // Если поле логина или пароля или его подтверждения - пусты делаем редирект if( empty( $_POST['u_mail'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) ) { redirect( "fields" ); } //Состав мыла, //Формат тел, // Если введенные пароли не совпадают - делаем редирект if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) ) { redirect( "nepass" ); } // Иначе переходим к функции регистрации reg(); } // Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['u_mail'] ) && check() == TRUE ) { print "Welcome.<br><a href='?quit'>Выйти</a>"; } // иначе else { // Если была ошибка, выводим соответствующее сообщение switch( $_GET['task'] ) { case "": $err_mes="все ок"; print $err_mes; break; case "login": $err_mes="Укажите e-mail и пароль."; print $err_mes; break; case "nepass": $err_mes="Пароли не совпадают"; print $err_mes; break; case "not_auth": $err_mes="Логин или пароль неверный."; print $err_mes; break; case "fields": $err_mes="Не заполнены все поля";print $err_mes; break; case "exists": $err_mes="Пользователь с таким именем уже существует";print $err_mes; break; print "<br><br>"; } // И показываем форму ?> <!-- Вывод наружу --> <table style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;" align="center" border="0" cellpadding="0" cellspacing="0" width="95%"> <tr> <td style="border-left:0px solid #9D9CAD; "> </td><td align="center" height="20">Оптимизация личной работы</td><td style="border-right:0px solid #9D9CAD;"> </td> </tr> </table> <table align="center" border="0" cellpadding="0" cellspacing="0" width="98%"> <tr> <td width="20" height="20"><img src="http://s24.ucoz.net/t/551/16.gif" border="0"></td><td style="border-top:1px solid #9D9CAD; background:#FFFFFF;"> </td><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/17.gif" border="0"></td> </tr> <tr> <td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td><td height="560" style="background:#FFFFFF;"> <!-- Тело экрана --> <? if( $_GET['task']=="" or $_GET['task']=="login" ) { ?> <table align="center" border="0" cellpadding="0" cellspacing="0" width="98%"> <tr> <td valign="top" align="left" width="50%" height="240" style="background:#FFFFFF;"> <FONT FACE="Courier New" SIZE="+1" COLOR="#000000">Существует 2 параметра.........</FONT></td> <td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td> <td valign="bottom" align="right" width="30%" height="240" style="background:#FFFFFF;"> <? print $err_mes;?><br><br> Вход:<br><br> <form action='' method='POST'> E-mail : <input type='text' name='u_mail' maxlength='150' value=''><br>Пароль: <input type='text' name='pass' maxlength='150' value=''><br><input type='Submit' name='blogin' value='Вход'><br></form></td> <td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td> <TH align="centr" ROWSPAN=2 width="160" height="480" style="background:#FFFFFF;"> <!-- временно гасим рекламу <script type="text/javascript"><!-- google_ad_client = "pub-6025044686488160"; /* 160x600, BFF главный */ google_ad_slot = "1563170255"; google_ad_width = 160; google_ad_height = 600; </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> --> </TH> </tr> <tr> <td align="right" valign="bottom" width="50%" height="240" style="background:#FFFFFF;">Нажимая клавишу ВХОД..........</td> <td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td> <td align="right" valign="top" width="30%" height="240" style="background:#FFFFFF;"><br><br><a href="http://........reg.php" title="Регистрация">Регистрация.</a> <a href="mailto:call89155227227@gmail.com" title="В разработке">Восстановить пароль.</a></td><td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td> </tr> </table> <? } ?> <!-- /Тело экрана --> </td> <td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td></tr> <tr> <td width="20" height="20"><img src="http://s24.ucoz.net/t/551/18.gif" border="0"></td><td style="border-bottom:1px solid #9D9CAD; background:#FFFFFF;"> </td><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/19.gif" border="0"></td> </tr> </table> <!-- Нижний заголовок --> <table style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;" align="center" border="0" cellpadding="0" cellspacing="0" width="95%"> <tr> <td style="border-left:0px solid #9D9CAD; "> </td><td align="center" height="20"><a href="http://.........." title="www.oow.at.ua">........a </a> <a href="mailto:call89155227227@gmail.com" title="Администратор"> call89155227227@gmail.com</a></td><td style="border-right:0px solid #9D9CAD;"> </td> </tr> </table> <?php } ?> </body> </html> После старта коннект с БД. Выходит форма входа. При вводе пустых параметров форма входа проверяется на пустоту и надо передернуть файл с сообщением о том что необходимо ввести параметры. Попытка генерирования хеадера не удается. Прошу прощения, что подчеркиваю еще раз. Когда этот файл работает на внешнем хостинге, все катит. При разработке на локально машине выходит указанный трабл.
все обращения к функции redirect() должны идти до этого куска HTML: <html> <head> <title></title> <link type="text/css" rel="StyleSheet" href="http://s24.ucoz.net/src/css/551.css" /> </head> <body style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;">
Как идею я понимаю, что до 7 строки, но по сути 7 строка это начало PHP кода, как я могу вызвать ранее????? Здесь проблема в локальном компе. Т.е. если на внешнем компе код делает заголовок http://p...../forum/viewtopic.php?t=16233 и PHP его успешно съедает, то здесь тот же код по какой то причине не может сгенерить заголовок, хотя когда в браузере подсовываешь его вручную все работает.... т.е. PHP заголовок обрабатывает нормально, но вот причину по которой он не хочет его генерить на локальной машине не понимаю. Вернее вопрос в том, что нужно чтоб он смог его генерить....
Выполняется страница http:\\127.0.0.1\work.php в процессе работы код фиксирует ошибку NO_DATA я хочу чтобы сам код сгенерил заголовок http:\\127.0.0.1\work.php?task=NO_DATA закончил работу. затем заголовок запускает work.php с параметром task равным NO_DATA и продолжается обработка данных.... Понятно объяснил?
Установил описание функции в которой генерится хеадер наверх файла, 1 строкой....... ошибка только перекинулась на строку 4 и все. Прочел: http://forum.maxsite.org/viewtopic.php?id=1075 смена кодировки не спасает....... http://rus-phpnuke.com/forum/lofiversio ... 15251.html тоже по бубну...
покажи, в каком именно месте код фиксирует ошибку NO_DATA и кстати, я до сих пор не могу понять, как это катит на хостинге ссылку можешь дать, где стоит счас именно этот скрипт и там все работает?
Описание о работе общее ошибка NO_DATA придумана. Формируется вот тут Код (Text): // Если нажата кнопка с именем blogin (Авторизация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) ) { // Если поле логина или пароля пустое - делаем редирект if( empty( $_POST['u_mail'] ) || empty( $_POST['pass'] ) ) { redirect( "login" ); } // В протовном случае переходим к авторизации auth(); } Вызывая редирект запускается код: Код (Text): function redirect( $par ) { header( "Location: index.php?task=" . $par ); exit; } в результате которого, насколько я понимаю должен быть сгенерирован новый заголовок ///////index.php?task=login и страница перезапускается. Вот ссылка где работает. http://bff.serpuxov.net/oow/index.php т.е. давим ввод не заполнив фому входа. скрипт проверяет что поля пусты и передергивает страницу передав ей ошибку fields помоему В верху выводится результат обработки этой ошибки.[/code]
интересное инфо: http://otvety.google.ru/otvety/thread?t ... b3560d464d действительно, говорится о том, что неадер нельзя строить после вывода в браузер. Но я не понимаю.... я же на экран выбросил кучу всего, значит все, кирдык, header() нельзя использовать? А типа на внешнем хосте можно. Что то не так.
странно как-то работает на удаленном хостинге сервер заголовки не должны посылаться после вывода в браузер =) нет времени подробно изучать скрипт, возможно помогу позже но мне кажется, что-то странное с внешним хостингом =)
повтор уже.... http://www.geeklog.net/faqman/index.php?op=view&t=38 снова говорят о лишних символах. Смотришь сам файл, в конце действительно 3 невидимых символа. Это мтадата UTF-8 Стираешь, портится кодировка (ну и с ней....) но проблема все равно остается. Так что переходим на 15 января с нерешенным вопросом.... ...думай голова. (действительно до вызова реадер был вывод принтом... убрал, пофигу...)
Делаю на основе вот этого: http://forum.vingrad.ru/faq/topic-158301.html толково, легко пишет хозяин.... есть ошибки, но правятся.... начал на внешнем хосте... перешал на локальную машину, а тут трабл..... но мне так понравилась эта схема. Надо что то придумать. Спасибо. До завтра.
Классная статья - http://phpfaq.ru/headers завтра дожму!!!! =============== Завтра наступило))) Всем привет! Действительно, в указанной выше статье, все расписано очень понятно. Т.е. другой причины не бывает, насколько я понял. Однако ни куда не продвинулся с тех пор. Постараюсь объяснить как понимаю сам. т.е. берем за аксиому, что если хоть один байт был передан сервером браузеру, то заголовок уже формировался т.к. он должен был предшествовать передаваемым данным. т.е. после этого второй раз формировать заголовок технически нельзя (притиворечит протоклу HTTP) ) Снова привожу полный листинг т.к. внес изменения, убрал заголовки и некоторые бекграунды. Код (Text): <html> <?php // Функция получения IP пользователя function get_ip() { if ($ip = getenv("HTTP_CLIENT_IP")) { return $ip; } if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { if ($ip == '' || $ip == "unknown") { $ip = getenv("REMOTE_ADDR"); } return $ip; } if ( $ip = getenv("REMOTE_ADDR") ) { return $ip; } } // Вычисляе хэш безопасности function u_hash( $user , $user_agent , $user_ip , $tm ) { return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm ); } // Получаем текущее время с учетом дробных частей секунды function getmicrotime() { $mt = explode( " ", microtime() ); return ( (float)$mt[0] + (float)$mt[1] ); } // Редирект с параметром function redirect( $par ) { header( "Location: index.php?task=" . $par ); exit; } // Продление сессии (проверка, что пользователь - авторизован) function check() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `u_mail` = '" . mysql_escape_string( $_COOKIE['u_mail'] ) . "' LIMIT 1" ); // Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "u_mail" , "" , time() - 900 , "/" ); redirect( "not_auth" ); } // Парсим полученную запись. global $user; $user = mysql_fetch_object( $result ); // Количсетво минут для жизни сессии $minutes = 15; // Ищем, есть ли активная сессия $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `u_hash` = '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " ); // Если нету активной сессии, перекидываем на форму авторизации if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "u_mail" , "" , time() - 900 , "/" ); redirect( "not_auth" ); } // Если авторизированный пользователь хочет выйти if( isset( $_GET['quit'] ) ) { // Удаляем запись о сессии пользователя mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `u_hash` = '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" ); // чищаем куки и устанавливаем время жизни в прошлом setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "u_mail" , "" , time() - 900 , "/" ); // Возвращаем значение "Ложь" return FALSE; } // Иначе, т.е. если пользователь не хочет выходить else { // Обновляем время последней активности пользователя на текущее. mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `u_hash` = '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" ); // Продлеваем время жизни кук setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" ); setcookie( "u_mail" , $_COOKIE['u_mail'] , time() + ( $minutes * 60 ) , "/" ); // Возвращаем значение "Истина" return TRUE; } } // Функция авторизации function auth() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `u_mail` = '" . mysql_escape_string( $_POST['u_mail'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" ); // Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { redirect( "not_auth" ); } // Парсим полученную запись. $user = mysql_fetch_object( $result ); // Получаем текущее время с учетом дробных частей секунды $tm = getmicrotime(); // Вставляем запись в таблицу с сессиями. mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . u_hash( $user -> u_mail , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" ); // Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут setcookie( "time" , $tm , time() + 900 , "/" ); setcookie( "u_mail" , $user -> u_mail , time() + 900 , "/" ); // делам редирект без параметра, т.к. никаких ошибок не было redirect( "" ); } // Функция регистрации function reg() { // Ищем пользователя с именем, указанным в форме регистрации $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `u_mail` = '" . mysql_escape_string( $_POST['u_mail'] ) . "' LIMIT 1" ); // Если пользователь найден, делаем редиркт if( mysql_num_rows( $result ) == 1 ) { redirect( "exists" ); } // Иначе, регистрируем пользователя mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['u_mail'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" ); $_POST['pass'] = $_POST['pass1']; // Делаем как бы автоматическую авторизацию после регисрации. auth(); } // Соединение с MySQL { $host = "localhost"; $port = "3306"; $user = "root"; $pass = "111111111"; $dbnm = "oow"; $h = ( empty( $post ) ) ? $host : $host . ":" . $port; $db = mysql_connect( $h , $user , $pass ); if( !$db ) // Если соединиться не удалось: { print ("Datebase connection failed."); exit(); } if( ! mysql_select_db( $dbnm ) ) { print ("Datebase select failed."); exit(); } } // Проверка куков на наличие пользователя. // пока не делаем. // Если нажата кнопка с именем blogin (Авторизация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) ) { // Если поле логина или пароля пустое - делаем редирект if( empty( $_POST['u_mail'] ) || empty( $_POST['pass'] ) ) { redirect( "login" ); } // В протовном случае переходим к авторизации auth(); } // Если нажата кнопка с именем breg (Регистрация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) ) { // Если поле логина или пароля или его подтверждения - пусты делаем редирект if( empty( $_POST['u_mail'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) ) { redirect( "fields" ); } //Состав мыла, //Формат тел, // Если введенные пароли не совпадают - делаем редирект if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) ) { redirect( "nepass" ); } // Иначе переходим к функции регистрации reg(); } // Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['u_mail'] ) && check() == TRUE ) { print "Welcome.<br><a href='?quit'>Выйти</a>"; } // иначе else { // Если была ошибка, выводим соответствующее сообщение switch( $_GET['task'] ) { // case "1": $err_mes="все ок"; print $err_mes; // break; case "login": $err_mes="Укажите e-mail и пароль."; print $err_mes; break; case "nepass": $err_mes="Пароли не совпадают"; print $err_mes; break; case "not_auth": $err_mes="Логин или пароль неверный."; print $err_mes; break; case "fields": $err_mes="Не заполнены все поля";print $err_mes; break; case "exists": $err_mes="Пользователь с таким именем уже существует";print $err_mes; break; print "<br><br>"; } // И показываем форму ?> <!-- Вывод наружу --> <table style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;" align="center" border="0" cellpadding="0" cellspacing="0" width="95%"> <tr> <td style="border-left:0px solid #9D9CAD; "> </td><td align="center" height="20">заголовок</td><td style="border-right:0px solid #9D9CAD;"> </td> </tr> </table> <table align="center" border="0" cellpadding="0" cellspacing="0" width="98%"> <tr> <td width="20" height="20"><img src="http://s24.ucoz.net/t/551/16.gif" border="0"></td><td style="border-top:1px solid #9D9CAD; background:#FFFFFF;"> </td><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/17.gif" border="0"></td> </tr> <tr> <td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td><td height="560" style="background:#FFFFFF;"> <!-- Тело экрана --> <? if( $_GET['task']=="" or $_GET['task']=="login" ) { ?> <table align="center" border="0" cellpadding="0" cellspacing="0" width="98%"> <tr> <td valign="top" align="left" width="50%" height="240" style="background:#FFFFFF;"> <FONT FACE="Courier New" SIZE="+1" COLOR="#000000">..........распределить их исполнение.</FONT></td> <td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td> <td valign="bottom" align="right" width="30%" height="240" style="background:#FFFFFF;"> <? print $err_mes;?><br><br> Вход:<br><br> <form action='' method='POST'> E-mail : <input type='text' name='u_mail' maxlength='150' value=''><br>Пароль: <input type='text' name='pass' maxlength='150' value=''><br><input type='Submit' name='blogin' value='Вход'><br></form></td> <td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td> <TH align="centr" ROWSPAN=2 width="160" height="480" style="background:#FFFFFF;"> <!-- временно гасим рекламу <script type="text/javascript"><!-- google_ad_client = "pub-6025044686488160"; /* 160x600, BFF главный */ google_ad_slot = "1563170255"; google_ad_width = 160; google_ad_height = 600; </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> --> </TH> </tr> <tr> <td align="right" valign="bottom" width="50%" height="240" style="background:#FFFFFF;">................администратору.</td> <td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td> <td align="right" valign="top" width="30%" height="240" style="background:#FFFFFF;"><br><br><a href="http://bff.serpuxov.net/oow/reg.php" title="Регистрация">Регистрация.</a> <a href="mailto:call89155227227@gmail.com" title="В разработке">Восстановить пароль.</a></td><td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td> </tr> </table> <? } ?> <!-- /Тело экрана --> </td> <td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td></tr> <tr> <td width="20" height="20"><img src="http://s24.ucoz.net/t/551/18.gif" border="0"></td><td style="border-bottom:1px solid #9D9CAD; background:#FFFFFF;"> </td><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/19.gif" border="0"></td> </tr> </table> <!-- Нижний заголовок --> <table style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;" align="center" border="0" cellpadding="0" cellspacing="0" width="95%"> <tr> <td style="border-left:0px solid #9D9CAD; "> </td><td align="center" height="20">заключение </td><td style="border-right:0px solid #9D9CAD;"> </td> </tr> </table> <!-- /Вывод наружу --> <!-- Регистрация: <form action='' method='POST'> Логин: <input type='text' u_mail='u_mail' maxlength='127' value=''><br> Пароль: <input type='text' u_mail='pass1' maxlength='127' value=''><br> Повторите пароль: <input type='text' u_mail='pass2' maxlength='127' value=''><br> <input type='Submit' u_mail='breg' value='Вход'> </form> --> <? } ?> <!-- </body> --> </html> при запросе: http://127.0.0.1/oow/index.php запускается скрипт, проходит различные проверки, выводит таблицы и форму авторизации. не заполняя форму давим ВВОД. Браузер методом POST передает на сервер скрипту пустые данные. Скрипт снова стартует... Этим участком проверяет что введенные данные пустые: Код (Text): // Если нажата кнопка с именем blogin (Авторизация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) ) { // Если поле логина или пароля пустое - делаем редирект if( empty( $_POST['u_mail'] ) || empty( $_POST['pass'] ) ) { redirect( "login" ); } // В протовном случае переходим к авторизации auth(); } вызываем редирект Код (Text): // Редирект с параметром function redirect( $par ) { header( "Location: index.php?task=" . $par ); exit; } т.е. скрипт еще не выводил в браузер ни каких данных, а значит и заголовки не посылал. однако натыкаясь на строку header(" ........... система все равно продолжает говорить, что: Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\oow\index.php:2) in C:\Program Files\Apache Group\Apache2\htdocs\oow\index.php on line 31 (работаю в Хроме) (кстати пробовал в разных браузерах) (так же пробовал перестартовать Апач - по бубну) Вызываю в хроме по правой кнопке на экране состав кода элемента. Выводится листинг в котором видно, что ничего до этого варнинга не выводилось. Поэтому опять тупик. Хотя на внешнем хосте http:\\bff.serpuxov.net\oow\index.php тот же код работает.... Вот засада!!!!! Чем можно залогировать и рассмотреть обмен информацией между браузером и сервером? [/img]
Идем далее. Скачан и установлен HTTPSniffer есть локальный брайзер OPERA удаленный сервер bff.serpuxov.net локальный сервер 127.0.0.1 и там и там в папочке oow лежит один и тот же скрипт index.php делаем: в опере открываем 2 страницы, в каждой пускаем свой запрос: http://bff.serpuxov.net/oow/index.php http://127.0.0.1/oow/index.php открывается некоторая форма авторизации. не заполняя поля давим ввод. данные методом POST передаются на соответствующий сервер..... и вот в заголовках уже отличия. в первом случае со внешним сервером: Код (Text): POST /oow/index.php HTTP/1.1 User-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1 Host: bff.serpuxov.net Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1 Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 Referer: http://bff.serpuxov.net/oow/index.php Connection: Keep-Alive, TE TE: deflate, gzip, chunked, identity, trailers Content-Length: 31 Content-Type: application/x-www-form-urlencoded name=&pass=&blogin=%C2%F5%EE%E4 HTTP/1.1 302 Found Date: Thu, 15 Jan 2009 13:18:57 GMT Server: Apache/2.2.3 (Fedora) X-Powered-By: PHP/5.1.6 Location: index.php?task=fields Content-Length: 231 Connection: close Content-Type: text/html; charset=windows-1251 <html> <head> <title>oow.at.ua</title> <link type="text/css" rel="StyleSheet" href="http://s24.ucoz.net/src/css/551.css" /> </head> <body style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;"> И все сработало, редирект с параметрами прошел.... скрипт перегрузился и вывел строку с ошибкой. Код (Text): GET /oow/index.php?task=fields HTTP/1.1 User-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1 Host: bff.serpuxov.net Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1 Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 Referer: http://bff.serpuxov.net/oow/index.php Connection: Keep-Alive, TE TE: deflate, gzip, chunked, identity, trailers HTTP/1.1 200 OK Date: Thu, 15 Jan 2009 13:18:57 GMT Server: Apache/2.2.3 (Fedora) X-Powered-By: PHP/5.1.6 Content-Length: 3958 Connection: close Content-Type: text/html; charset=windows-1251 <html> <head> <title>oow.at.ua</title> <link type="text/css" rel="StyleSheet" href="http://s24.ucoz.net/src/css/551.css" /> </head> <body style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;"> Не заполнены все поля<br><br> <!-- Вывод наружу --> <table style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;" align="center" border="0" cellpadding="0" cellspacing="0" width="95%"> <tr><td style="border-left:0px solid #9D9CAD; "> </td><td align="center" height="20">Оптимизация личной работы</td><td style="border-right:0px solid #9D9CAD;"> </td></tr> </table> <table align="center" border="0" cellpadding="0" cellspacing="0" width="98%"> <tr><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/16.gif" border="0"></td><td style="border-top:1px solid #9D9CAD; background:#FFFFFF;"> </td><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/17.gif" border="0"></td></tr> <tr><td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td><td height="560" style="background:#FFFFFF;"> <!-- Тело экрана --> <table align="center" border="0" cellpadding="0" cellspacing="0" width="98%"> <tr><td valign="top" align="left" width="50%" height="240" style="background:#FFFFFF;"> <FONT FACE="Courier New" SIZE="+1" COLOR="#000000">.........еделить их исполнение. </FONT></td><td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td><td valign="bottom" align="right" width="30%" height="240" style="background:#FFFFFF;"> Вход:<br><br> <form action='' method='POST'> Логин : <input type='text' name='name' maxlength='150' value=''><br> Пароль: <input type='text' name='pass' maxlength='150' value=''><br> <input type='Submit' name='blogin' value='Вход'><br> </form> </td><td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td> <TH ROWSPAN=2 width="160" height="480" style="background:#FFFFFF;"> <!-- <script type="text/javascript"><!-- google_ad_client = "pub-6025044686488160"; /* 160x600, BFF главный */ google_ad_slot = "1563170255"; google_ad_width = 160; google_ad_height = 600; //--> <!-- </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> --> </TH></tr> <tr><td align="right" valign="bottom" width="50%" height="240" style="background:#FFFFFF;">Нажимая клавишу ВХОД, я соглашаюсь .........</td><td style="border-left:1px solid #9D9CAD; background:#FFFFFF;"> </td><td align="right" valign="top" width="30%" height="240" style="background:#FFFFFF;"><br><br><a href="http://bff.serpuxov.net/oow/reg.php" title="Регистрация">Регистрация.</a> <a href="mailto:call89155227227@gmail.com" title="В разработке">Восстановить пароль.</a></td><td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td></tr> </table> <!-- /Тело экрана --> </td><td style="border-right:1px solid #9D9CAD; background:#FFFFFF;"> </td></tr> <tr><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/18.gif" border="0"></td><td style="border-bottom:1px solid #9D9CAD; background:#FFFFFF;"> </td><td width="20" height="20"><img src="http://s24.ucoz.net/t/551/19.gif" border="0"></td></tr> </table> <table style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;" align="center" border="0" cellpadding="0" cellspacing="0" width="95%"> <tr><td style="border-left:0px solid #9D9CAD; "> </td><td align="center" height="20">................</td><td style="border-right:0px solid #9D9CAD;"> </td></tr> </table> <!-- /Вывод наружу --> <!-- Регистрация: <form action='' method='POST'> Логин: <input type='text' name='name' maxlength='127' value=''><br> Пароль: <input type='text' name='pass1' maxlength='127' value=''><br> Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br> <input type='Submit' name='breg' value='Вход'> </form> --> </body> </html> В случае с локальным сервером: Код (Text): POST /oow/index.php HTTP/1.1 User-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1 Host: 127.0.0.1 Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1 Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 Referer: http://127.0.0.1/oow/index.php Connection: Keep-Alive, TE TE: deflate, gzip, chunked, identity, trailers Content-Length: 31 Content-Type: application/x-www-form-urlencoded name=&pass=&blogin=%C2%F5%EE%E4 HTTP/1.1 200 OK Date: Thu, 15 Jan 2009 13:19:03 GMT Server: Apache/2.0.55 (Win32) PHP/5.2.0 X-Powered-By: PHP/5.2.0 Content-Length: 488 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html <html> <head> <title>oow.at.ua</title> <link type="text/css" rel="StyleSheet" href="http://s24.ucoz.net/src/css/551.css" /> </head> <body style="background:url('http://s24.ucoz.net/t/551/1.gif') #FFFFFF; margin:0px; padding:0px;"> <br /> <b>Warning</b>: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\oow\index.php:7) in <b>C:\Program Files\Apache Group\Apache2\htdocs\oow\index.php</b> on line <b>40</b><br /> Я вижу отличия, но к сожалению проанализировать не могу. Вижу что там где сработало есть запись Location:......... Но что далее? Получается, что то не так с настойками локального PHP а что?
попробуй javascript PHP: function redirect($link){ echo '<script>document.location.href="'.$link.'"</script>'; }
Благодарствую Приведенный выше способ является полной заменой header() Работает. PHP: function redirect($par) { echo '<script>document.location.href="index.php?task='.$par.'"</script>'; } Спасибо!