За последние 24 часа нас посетили 62992 программиста и 1744 робота. Сейчас ищут 899 программистов ...

помогите пожалуйста...headers already send

Тема в разделе "Вопросы от блондинок", создана пользователем kuzmas, 17 авг 2009.

  1. kuzmas

    kuzmas Активный пользователь

    С нами с:
    1 янв 2009
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Москва
    Здравствуйте, поиск юзал. Таких тем много. Чител и тут, и на других форумах, и на забугорных форумах. Не могу найти причину ошибки. Помогите, уважаемые пхп-гуру.
    Ошибка следующая:
    Код (Text):
    1. Warning: Cannot modify header information - headers already sent by (output started at T:\home\myphp.ru\www\main.php:11) in T:\home\myphp.ru\www\login.php on line 27
    2.  
    3. Warning: Cannot modify header information - headers already sent by (output started at T:\home\myphp.ru\www\main.php:11) in T:\home\myphp.ru\www\login.php on line 28
    Вот мой index.php :
    PHP:
    1. <?php
    2. include("config.php");
    3. include("main.php");
    4. include("footer.php");
    5. ?>
    Это код main.php :
    PHP:
    1. <?php
    2. include("config.php");
    3. print <<<HERE
    4. <html><head>
    5. <link rel="stylesheet" type="text/css" href="style/style.css">
    6. </head>
    7. <body>
    8. <div id="main">
    9. <div id="login"><font class="login">
    10. HERE;
    11. if(empty($_SESSION['login']) || empty($_SESSION['password'])) {
    12. print <<<HERE
    13. <form action="login.php" method="POST"><a href="/index.php"><font color="red">На главную</font></a> <a href="/install.php">Install</a>&nbsp;Вы вошли на сайт как Гость |  Логин <input type="text" name="login" maxlength="15" class="loginfield" />&nbsp;Пароль <input type="text" name="password" maxlength="15" class="loginfield"  /> <input type="checkbox" name="save" value="1" />&nbsp;Запомнить<input type="submit" value="Войти" name="submit" class="submit" />&nbsp;<a href="registration.php">Регистрация</a></font></form>
    14. HERE;
    15. }
    16. if(!empty($_SESSION['login']) && !empty($_SESSION['password']))
    17.     {
    18.     $login = $_SESSION['login'];
    19.     $password = $_SESSION['password'];
    20.     $return = mysql_query("SELECT id FROM users WHERE login = '$login' && password = '$password'");
    21.     $row = mysql_fetch_array($return);
    22. print <<<HERE
    23. <form action="login.php" method="POST"><a href="/index.php"><font color="red">На главную</font></a>
    24. <a href="/install.php">Install</a>&nbsp;Вы вошли на сайт как Гость |  Логин <input type="text" name="login" maxlength="15" class="loginfield"
    25. HERE;
    26. if(isset($_COOKIE['login'])) {
    27. echo ' value="'.$_COOKIE['login'].'"/>';}
    28. print <<<HERE
    29. &nbsp;Пароль&nbsp;<input type="text" name="password" class="loginfield"
    30. HERE;
    31. if(isset($_COOKIE['password'])) {
    32. echo ' value="'.$_COOKIE['password'].'"/>';}
    33. print <<<HERE
    34. <input type="checkbox" name="save" value="1" />&nbsp;Запомнить&nbsp;<input type="submit" value="Войти" name="submit" class="submit" />&nbsp;<a href="registration.php">Регистрация</a></font></form>
    35. HERE;
    36. }
    37. else {
    38. print <<<HERE
    39. &nbsp;Здравствуйте,<b>$_SESSION[login]</b>.(<a href='exit.php'>Выйти</a>)</font>
    40. HERE;
    41. }
    42. print <<<HERE
    43. </form></div>
    44. <div id="header">Моя страничка:)</div>
    45. <div id="nav">Навигация</div>
    46. <div id="content"><font class="some">
    47. HERE;
    48. ?>
    И файл login.php :
    PHP:
    1. <?php
    2. include("main.php");
    3. if(isset($_POST['login'])) {
    4.     $login = $_POST['login'];
    5.     if($login == "") {unset($login);}
    6.     }
    7. if(isset($_POST['password'])) {
    8.     $password = $_POST['password'];
    9.     if($password == "") {unset($password);}
    10.     }
    11. if(empty($login) or empty($password)) {
    12.     exit ("Вы ввели неверный пароль");
    13.     }
    14. $login = trim(stripslashes(htmlspecialchars($login)));
    15. $password = md5(trim(stripslashes(htmlspecialchars($password))));
    16. $return = mysql_query("SELECT * FROM users WHERE login = '$login' && password = '$password'");
    17. $row = mysql_fetch_array($return);
    18. if(empty($row['id'])) {
    19.     exit("Введенные вами логин или пароль не верны! Попробуйте еще раз.");
    20.     }
    21. else {
    22.     $_SESSION['login'] = $row['login'];
    23.     $_SESSION['password'] = $row['password'];
    24.     $_SESSION['id'] = $row['id'];
    25.     if($_POST['save'] == 1) {
    26.         setcookie("login",$_POST['login'],time()+999999);
    27.         setcookie("password",$_POST['password'],time()+999999);
    28.     }
    29. }
    30. include("footer.php");
    31. ?>
    Помогите, уже все испробовал, notepad++ норм показал все. Ошибка не пропадает.
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    кстати, код дырявый
    гуглить про Sql Injection
     
  4. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    kuzmas, сначала хотел сказать, как исправить, но ошибка настолько банальная, что лучше сам найди способ. внимательно изучи ту ссылку, которую тебе дал Mr.M.I.T. — там найдешь ответ на свой вопрос.
     
  5. kuzmas

    kuzmas Активный пользователь

    С нами с:
    1 янв 2009
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Москва
    TheShock, прочитал. я вижу, что у меня в начале каждого файла идет main.php, который содержит в себе html-символы. а setcookie у меня стоит почти в самом низу. как исправить, что переделать, подскажие, я второй день сижу с этой проблемой, продолжить не могу.....тупой, получается.
     
  6. kostyl

    kostyl Guest

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

    kuzmas Активный пользователь

    С нами с:
    1 янв 2009
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Москва
    Она у меня стартует же до вывода. я везде проверил.
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    kuzmas
    Смените аватару. Разрешены только личные фотографии.
    А по поводу сабжа — нужно постараться вывести все заголовки в начало файла, тем самым перестроив логику приложения. Если не получается, можно попробовать заюзать такую вещь как http://php.net/ob_start
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    kuzmas
    Какая кодировка у вашего файла? UTF-8? Точно без BOM?
     
  10. kuzmas

    kuzmas Активный пользователь

    С нами с:
    1 янв 2009
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Москва
    Elkaz, Спасибо за подсказку. Может кому будет интересно, как я сделал, чтобы проблема пропала.
    Ниже - файл login.php. Скрипт вынес отдельно в файл /modules/login.php.
    PHP:
    1. <?php
    2. require("modules/login.php");
    3. include("main.php");
    4. include("footer.php");
    5. ?>
    И о чудо, ошибка пропала! Спасибо вам огромное! Чудесное утро :)
    ---------------------------------------------------------------------------------------------------------------------
    У меня возникла еще проблема небольшая. Логин и пароль при присутствии оных в куки (я пока не очень разбираюсь в этом, если что, поправьте неуча) заполняются в поля для логина и пароля соответственно (поле value). Также есть чекбокс "save" - Запомнить меня. Я ставлю галочку, нажимаю Войти, но логин-форма у меня не изменяется. Код для нее я выложил...
    Подскажите пожалуйста, что и где подправить?...
     
  11. kostyl

    kostyl Guest

    Спешу тебя огорчить, что ошибка не пропала. Она "типа игнорируется", так что не радуйся сильно. Но все будет работать.
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Скорее всего, где-то нотайс генерируется.
     
  13. kostyl

    kostyl Guest

    Блин, что тут не понятного, сесии стартуют по пятьдесят раз. Естественно нотис будет.
     
  14. kuzmas

    kuzmas Активный пользователь

    С нами с:
    1 янв 2009
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Москва
    Сесси оставил только в main.php. В main.php добавил строчку
    Код (Text):
    1. error_reporting(E_ALL & ~E_NOTICE);;
    Вывело 4 ошибки о том, что уже давно к базе подключились, исправил их, теперь не выдает.
    Что еще можно сделать?....