Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не могу побороть Warning: Cannot modify header information - headers already sent by
Форумы портала PHP.SU » » Вопросы новичков » Не могу побороть Warning: Cannot modify header information - headers already sent by

Страниц (1): [1]
 

1. DoctorMED - 15 Мая, 2017 - 00:10:06 - перейти к сообщению
Здравствуйте!
В ПХП я еще новичек. Взялся писать сайт просто для себя, чтобы потренироваться. Застрял на Warning: Cannot modify header information - headers already sent by.... при авторизации
CODE (php):
скопировать код в буфер обмена
  1. <?php
  2.                                                  if(session_id() == '') {
  3.     session_start();
  4. }
  5. ?>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  7. <html>
  8. <head>
  9.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  10.   <title>Мій сайт</title>
  11.   <link href="css/style.css" type="text/css" rel="stylesheet" />
  12.   <link href="https://fonts.googleapis.com/css?family=Gabriela" rel="stylesheet">
  13.         <link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700|Lato:400,100,300,700,900' rel='stylesheet' type='text/css'>
  14.  
  15.         <link rel="stylesheet" href="css/animate.css">
  16.        
  17.        
  18. </head>
  19. <body>
  20.  
  21.   <div id="wrapper">
  22.        
  23.     <div id="header">
  24.       <div id="logo">Мій сайт</div>
  25.          <div id="language">
  26.          <ul>
  27.          <li><a href="#">ua</a></li>
  28.          <li><a href="#">en</a></li>
  29.          </ul>
  30.          </div>
  31.     </div>
  32.       <div id="menubar">
  33.        <div id=menu>
  34.          <ul>
  35.          <li><a href="#">Новини</a></li>
  36.          <li><a href="#">Адмінпанель</a></li>
  37.          <li><a href="#">Гостьова книга</a></li>
  38.                                                                          <li><a href="#">Контакти</a></li>
  39.          </ul>
  40.        </div>
  41.        <div id="avtorization">
  42.          <ul>
  43. <?php
  44. //          if(session_id() == '') {
  45. //    session_start();
  46. //}
  47.                                                                         unset($_SESSION['result']);
  48.               if (isset($_GET["exit"])) {
  49.   unset($_SESSION['login']);
  50.                 setcookie("id", '', time()-3600);
  51.     setcookie("hash", '', time()-3600);
  52.   header ('Location: index.php');
  53.         exit;
  54.   }
  55.        if (isset($_SESSION['login'])) {
  56.        $logged=true; }
  57.        else {
  58.        $logged=false;
  59.        }
  60.        
  61.          if (!$logged){
  62.          echo ("<li><a href=\"index.php?auth\">Увійти</a></li>                                         
  63.         <li> / </li>
  64.                                                                         <li><a href=\"registr.php\">Реєстрація</a></li>
  65.         ");
  66.          }
  67.          else{
  68.          echo ("<li><a href=\"index.php?exit=1\"> Вийти </a></li>
  69.                                                                                                                         <li><a href=\"#\">Ви зайшли як <span class=\"userhead\">".$_SESSION['login']."</span></a></li>");
  70.          }
  71. ?>
  72.          </ul>
  73.        </div>
  74.       </div>
  75.      
  76. <div id="content">
  77. <?php
  78. if (isset($_GET['auth'])&&(!isset($_SESSION['login']))){
  79. require_once("loginbox.php");
  80. }
  81. ?>
  82.  
  83. <div id="news">
  84.  Каждый веб-разработчик знает, что такое текст-«рыба». Текст этот, несмотря на название, не имеет никакого отношения к обитателям водоемов. Используется он веб-дизайнерами для вставки на интернет-страницы и демонстрации внешнего вида контента, просмотра шрифтов, абзацев, отступов и т.д. Так как цель применения такого текста исключительно демонстрационная, то и смысловую нагрузку ему нести совсем необязательно. Более того, нечитабельность текста сыграет на руку при оценке качества восприятия макета.
  85. Самым известным «рыбным» текстом является знаменитый Lorem ipsum. Считается, что впервые его применили в книгопечатании еще в XVI веке. Своим появлением Lorem ipsum обязан древнеримскому философу Цицерону, ведь именно из его трактата «О пределах добра и зла» средневековый книгопечатник вырвал отдельные фразы и слова, получив текст-«рыбу», широко используемый и по сей день. Конечно, возникают некоторые вопросы, связанные с использованием Lorem ipsum на сайтах и проектах, ориентированных на кириллический контент – написание символов на латыни и на кириллице значительно различается.
  86. И даже с языками, использующими латинский алфавит, могут возникнуть небольшие проблемы: в различных языках те или иные буквы встречаются с разной частотой, имеется разница в длине наиболее распространенных слов. Отсюда напрашивается вывод, что все же лучше использовать в качестве «рыбы» текст на том языке, который планируется использовать при запуске проекта. Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные генераторы, создающие собственные варианты текста на основе оригинального трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.
  87.  
  88.                                                 </div>
  89.                                                
  90. <!--<div class="container">-->
  91.                
  92.                 <!--<div class="top">-->
  93.                 <!--    <!--<h1 id="title" class="hidden"><span id="logo"> Авторизація</span></h1>-->
  94.                 <!--</div>-->
  95.                
  96.                
  97.         <!--</div>-->
  98.         </div>
  99.         <div id="footer">  -= 2017 =- </div>
  100.       </div>
  101. <?php
  102. //session_start();
  103.         if (isset($_POST['username'])&&isset($_POST['password'])) {
  104.                 $login=$_POST['username'];
  105.                 $password=$_POST['password'];
  106.                 login($login, $password);
  107.         }
  108.         else {
  109.         exit;
  110.         }
  111.  
  112.  
  113.  
  114.         // AUTORIZATION PDO
  115.         function login($login, $password){
  116.         $db_server="localhost";
  117.         $db_name="BAZA";
  118.         $db_user="root";
  119.         $db_password="777";
  120.         $dsn = "mysql:host=$db_server;dbname=$db_name;charset=utf8";
  121.                 $opt = array(
  122.     PDO::ATTR_ERRMODE  => PDO::ERRMODE_EXCEPTION,
  123.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
  124.                 try { $pdo = new PDO($dsn, $db_user, $db_password, $opt);
  125. }
  126. catch (PDOException $e) {
  127.         die('Подключение не удалось: ' . $e->getMessage());
  128. }
  129.         $login = $pdo->quote($login);
  130.         $password = md5($password);
  131.         //print $mail.' '.$password;
  132.         $sql = "SELECT id, password FROM users WHERE login=$login";
  133.         if(!$stmt = $pdo->query($sql)){
  134.                 return false;
  135.             } else {
  136.                 $row = $stmt->fetch(PDO::FETCH_ASSOC);
  137.                 if(!$row){
  138.                                         $result="Невірний логін або пароль !";
  139.                                         echo $result;
  140. //                       if(session_id() == '') {
  141. //    session_start();
  142. //}
  143.                                                 $_SESSION['result'] = $result;
  144.                                                
  145.                     return false; // якщо нема такого логіна в базі
  146.                                 } else {
  147.                     $db_password = $row['password'];
  148.                     $db_id = $row['id'];
  149.                     //echo md5($password)."<br/>".$db_password."<br/>".$password."<br/>";
  150.                     if($password == $db_password){
  151.                         $hash = md5(rand(0, 6400000));
  152.                         $sql_update = "UPDATE users SET hash='$hash' WHERE id='$db_id'";
  153.                         if($pdo->exec($sql_update)){
  154.                             setcookie("id", $db_id, time() + 3600);
  155.                           setcookie("hash", $hash, time() + 3600);
  156. //                                                       if(session_id() == '') {
  157. //    session_start();
  158. //}
  159.                                                         $_SESSION['login']=$_POST['username'];
  160.                                                         header ('Location: index.php');
  161.                             return true;
  162.                         }else{
  163.                             print 'Exception';
  164.                         }
  165.                     }
  166.  
  167.                                         $result="Невірний логін або пароль !";
  168.                                         echo $result;
  169.                                         $_SESSION['result'] = $result;
  170.                                        
  171.                     return false;
  172.                 }
  173.             }
  174.     }
  175. ?>
  176. </body>
  177. </html>
  178.  


CODE (html):
скопировать код в буфер обмена
  1.  
  2. <!--<meta http-equiv="Content-Type" content="text/html; charset=utf-8">-->
  3. <html>
  4. <link rel="stylesheet" href="css/avtoriz.css">
  5.  
  6. <div class="login-box animated fadeInUp">
  7.                         <div class="box-header">
  8.                                 <h2>Авторизуйтесь</h2>
  9.                         </div>
  10.                                 <form method="post">
  11.                         <label for="username">Логін</label>
  12.                         <br/>
  13.                         <input type="text" name="username" id="username">
  14.                         <br/>
  15.                         <label for="password">Пароль</label>
  16.                         <br/>
  17.                         <input type="password" name="password" id="password">
  18.                         <br/>
  19.                         <button type="submit">Увійти</button>
  20.                         <br/>
  21.                         <a href="#"><p class="small">Забули пароль?</p></a>
  22.                         <br/>
  23.                         <hr>
  24.                         <span class="result" style="color:#ff0000">
  25. <?php
  26. //            if(session_id() == '') {
  27. //    session_start();
  28. //}
  29.                         //session_start();
  30.                         if (isset($_SESSION['result'])) {
  31.                         echo ($_SESSION['result']);
  32.                         }
  33.                         unset($_SESSION['result']);
  34.                         session_destroy();
  35. ?>
  36.                         </span>
  37.                         <br/>
  38.                         <a href="registr.php"><p class="small">Зареєструватись</p></a>
  39.                         <br/>
  40.                         <hr>
  41.                         <br/>
  42.                         <a href='index.php'>Повернутися на головну сторінку</a>
  43.                                 </form>
  44.                 </div>
  45. </html>
  46.  






Подскажите люди добрые, что я не так начудил
(сайт во вложении)

PS/ еще у меня криво hover над меню работает (как то не по центру) тоже не могу добиться толку.
2. Vladimir Kheifets - 15 Мая, 2017 - 08:29:38 - перейти к сообщению
В начале скрипт не должно быть никаких символов (в том числе и пробелов) перед "<?php".
3. DoctorMED - 15 Мая, 2017 - 08:50:34 - перейти к сообщению
Эту причину я смотрел. Нет там ничего ни до, ни перед.
4. 3d_killer - 15 Мая, 2017 - 09:17:41 - перейти к сообщению
проверь в свойствах страницы, скорее всего стоит галочка подпись BOM ее нужно убрать
5. DoctorMED - 15 Мая, 2017 - 20:37:21 - перейти к сообщению
Да нет, не стоит галочка. Все в порядке.
6. Строитель - 15 Мая, 2017 - 21:07:41 - перейти к сообщению
DoctorMED, вероятно потому, что в loginbox.php вы закомментировали старт сессии, но при этом продолжаете с ней работать. Кстати, именно в этом файле у вас старт сессии был прописан после вывода в браузер, а надо - до какого либо вывода. Попробуйте так
Спойлер (Отобразить)
7. DoctorMED - 15 Мая, 2017 - 22:20:40 - перейти к сообщению
Попробовал, никаких изменений.
По прежнему ругается
Warning: Cannot modify header information - headers already sent by (output started at /var/www/logos.loc/index.php:98) in /var/www/logos.loc/index.php on line 150

вот на эти строки:
setcookie("id", $db_id, time() + 3600);
setcookie("hash", $hash, time() + 3600);
header ('Location: index.php');
8. Строитель - 15 Мая, 2017 - 22:34:25 - перейти к сообщению
DoctorMED, ну а у меня ошибок нет )
(Добавление)
А, это у вас в другом файле -- пропишите весь php-код над html-кодом.
9. DoctorMED - 15 Мая, 2017 - 23:07:31 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(session_id() == '') {
  3. }
  4. ?>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  6. "http://www.w3.org/TR/html4/strict.dtd">
  7. <html>
  8. <head>
  9.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  10.  
  11.     <title>Мій сайт</title>
  12.     <link href="css/style.css" type="text/css" rel="stylesheet">
  13.     <link href="https://fonts.googleapis.com/css?family=Gabriela" rel="stylesheet" type="text/css">
  14.     <link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700|Lato:400,100,300,700,900' rel='stylesheet' type='text/css'>
  15.     <link rel="stylesheet" href="css/animate.css" type="text/css">
  16. </head>
  17.  
  18. <body>
  19.     <div id="wrapper">
  20.         <div id="header">
  21.             <div id="logo">
  22.                 Мій сайт
  23.             </div>
  24.  
  25.             <div id="language">
  26.                 <ul>
  27.                     <li><a href="#">ua</a></li>
  28.  
  29.                     <li><a href="#">en</a></li>
  30.                 </ul>
  31.             </div>
  32.         </div>
  33.  
  34.         <div id="menubar">
  35.             <div id="menu">
  36.                 <ul>
  37.                     <li><a href="#">Новини</a></li>
  38.  
  39.                     <li><a href="#">Адмінпанель</a></li>
  40.  
  41.                     <li><a href="#">Гостьова книга</a></li>
  42.  
  43.                     <li><a href="#">Контакти</a></li>
  44.                 </ul>
  45.             </div>
  46.  
  47.             <div id="avtorization">
  48.                 <ul>
  49. <?PHP
  50.                     unset($_SESSION['result']);
  51.                     if (isset($_GET["exit"])) {
  52.                     unset($_SESSION['login']);
  53.                     session_destroy();
  54.                     setcookie("id", '', time()-3600);
  55.                     setcookie("hash", '', time()-3600);
  56.                     header ('Location: index.php');
  57.                     exit;
  58.                     }
  59.                     if (isset($_SESSION['login'])) {
  60.                     $logged=true; }
  61.                     else {
  62.                     $logged=false;
  63.                     }
  64.                     if (!$logged){
  65.                     echo ("<li><a href=\"index.php?auth\">Увійти</a></li>                                          
  66.                    <li> / </li>
  67.                    <li><a href=\"registr.php\">Реєстрація</a></li>
  68.                    ");
  69.                     }
  70.                     else{
  71.                     echo ("<li><a href=\"index.php?exit=1\"> Вийти </a></li>
  72.                                                            <li><a href=\"#\">Ви зайшли як <span class=\"userhead\">".$_SESSION['login']."</span></a></li>");
  73.                     }
  74.                     ?>
  75.                 </ul>
  76.             </div>
  77.         </div>
  78.         <div id="content">
  79.             <?PHP     if (isset($_GET['auth'])&&(!isset($_SESSION['login']))){
  80.             require_once("loginbox.php");
  81.             }
  82.             ?>
  83.             <div    id="news">
  84.                 Каждый веб-разработчик знает, что такое текст-«рыба». Текст этот, несмотря на название, не имеет никакого отношения к обитателям водоемов. Используется он веб-дизайнерами для вставки на интернет-страницы и демонстрации внешнего вида контента, просмотра шрифтов, абзацев, отступов и т.д. Так как цель применения такого текста исключительно демонстрационная, то и смысловую нагрузку ему нести совсем необязательно. Более того, нечитабельность текста сыграет на руку при оценке качества восприятия макета. Самым известным «рыбным» текстом является знаменитый Lorem ipsum. Считается, что впервые его применили в книгопечатании еще в XVI веке. Своим появлением Lorem ipsum обязан древнеримскому философу Цицерону, ведь именно из его трактата «О пределах добра и зла» средневековый книгопечатник вырвал отдельные фразы и слова, получив текст-«рыбу», широко используемый и по сей день. Конечно, возникают некоторые вопросы, связанные с использованием Lorem ipsum на сайтах и проектах,
  85.                 ориентированных на кириллический контент – написание символов на латыни и на кириллице значительно различается. И даже с языками, использующими латинский алфавит, могут возникнуть небольшие проблемы: в различных языках те или иные буквы встречаются с разной частотой, имеется разница в длине наиболее распространенных слов. Отсюда напрашивается вывод, что все же лучше использовать в качестве «рыбы» текст на том языке, который планируется использовать при запуске проекта. Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные генераторы, создающие собственные варианты текста на основе оригинального трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.
  86.             </div><!--<div class="container">-->
  87.             <!--<div class="top">-->
  88.             <!--    <!==<h1 id="title" class="hidden"><span id="logo"> Авторизація</span></h1>-->
  89.             <!--</div>-->
  90.             <!--</div>-->
  91.         </div>
  92.  
  93.         <div id="footer">
  94.             (c) B.T.Stochanskyy -= 2017 =-
  95.         </div>
  96.     </div>
  97. <?PHP
  98.     if (isset($_POST['username'])&&isset($_POST['password'])) {
  99.     $login=$_POST['username'];
  100.     $password=$_POST['password'];
  101.     login($login, $password);
  102.     }
  103.     else {
  104.     exit;
  105.     }
  106.     // AUTORIZATION PDO
  107.     function login($login, $password){
  108.     $db_server="localhost";
  109.     $db_name="BAZA";
  110.     $db_user="root";
  111.     $db_password="777";
  112.     $dsn = "mysql:host=$db_server;dbname=$db_name;charset=utf8";
  113.     $opt = array(
  114.     PDO::ATTR_ERRMODE  => PDO::ERRMODE_EXCEPTION,
  115.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
  116.     try { $pdo = new PDO($dsn, $db_user, $db_password, $opt);
  117.     }
  118.     catch (PDOException $e) {
  119.     die('Подключение не удалось: ' . $e->getMessage());
  120.     }
  121.     $login = $pdo->quote($login);
  122.     $password = md5($password);
  123.     //print $mail.' '.$password;
  124.     $sql = "SELECT id, password FROM users WHERE login=$login";
  125.     if(!$stmt = $pdo->query($sql)){
  126.     return false;
  127.     } else {
  128.     $row = $stmt->fetch(PDO::FETCH_ASSOC);
  129.     if(!$row){
  130.     $result="Невірний логін або пароль !";
  131.     //echo $result;
  132.     $_SESSION['result'] = $result;
  133.  
  134.     return false; // якщо нема такого логіна в базі
  135.     } else {
  136.     $db_password = $row['password'];
  137.     $db_id = $row['id'];
  138.     //echo md5($password)."<br/>".$db_password."<br/>".$password."<br/>";
  139.     if($password == $db_password){
  140.     $hash = md5(rand(0, 6400000));
  141.     $sql_update = "UPDATE users SET hash='$hash' WHERE id='$db_id'";
  142.     if($pdo->exec($sql_update)){
  143.     setcookie("id", $db_id, time() + 3600);
  144.     setcookie("hash", $hash, time() + 3600);
  145.     //                                                       if(session_id() == '') {
  146.     //    session_start();
  147.     //}
  148.     $_SESSION['login']=$_POST['username'];
  149.     header ('Location: index.php');
  150.     return true;
  151.     }else{
  152.     print 'Exception';
  153.     }
  154.     }
  155.     $result="Невірний логін або пароль !";
  156.     //echo $result;
  157.     $_SESSION['result'] = $result;
  158.     return false;
  159.     }
  160.     }
  161.     }
  162. ?>
  163. </body>
  164. </html>

PHP:
скопировать код в буфер обмена
  1. <?PHP session_id() ?: session_start(); ?>
  2. <html>
  3. <head>
  4.     <link rel="stylesheet" href="css/avtoriz.css" type="text/css">
  5.     <title></title>
  6. </head>
  7.  
  8. <body>
  9.     <div class="login-box animated fadeInUp">
  10.         <div class="box-header">
  11.             <h2>Авторизуйтесь</h2>
  12.         </div>
  13.  
  14.         <form method="post">
  15.             <label for="username">Логін</label><br>
  16.             <input type="text" name="username" id="username"><br>
  17.             <label for="password">Пароль</label><br>
  18.             <input type="password" name="password" id="password"><br>
  19.             <button type="submit">Увійти</button><br>
  20.             <a href="#"></a>
  21.  
  22.             <p class="small">Забули пароль?</p><br>
  23.             <hr>
  24.             <span class="result" style="color:#ff0000"><?PHP
  25.             //            if(session_id() == '') {
  26.             //    session_start();
  27.             //}
  28.             //session_start();
  29.             if (isset($_SESSION['result'])) {
  30.             echo ($_SESSION['result']);
  31.             }
  32.             unset($_SESSION['result']);
  33.             session_destroy();
  34.             ?></span>
  35.             <a href="registr.php"></a>
  36.             <p class="small">Зареєструватись</p><br>
  37.             <hr>
  38.             <a href='index.php'>Повернутися на головну сторінку</a>
  39.         </form>
  40.     </div>
  41. </body>
  42. </html>
  43.  

(Добавление)
( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/logos.loc/index.php:98) in /var/www/logos.loc/index.php on line 144

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/logos.loc/index.php:98) in /var/www/logos.loc/index.php on line 145

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/logos.loc/index.php:98) in /var/www/logos.loc/index.php on line 150
(Добавление)
Ошибка появляется при успешной авторизации
10. Строитель - 15 Мая, 2017 - 23:31:19 - перейти к сообщению
Цитата:
Цитата:
Спойлер (Отобразить)
А вывод пропишете в теле html-страницы.
11. 3d_killer - 15 Мая, 2017 - 23:33:51 - перейти к сообщению
вот это
нельзя выдавать после начала вывода на страницу
12. DoctorMED - 15 Мая, 2017 - 23:45:56 - перейти к сообщению
Если php переношу в начало, страница не выводится вообще
13. Строитель - 15 Мая, 2017 - 23:55:25 - перейти к сообщению
DoctorMED пишет:
Если php переношу в начало, страница не выводится вообще
Потому что вывод в браузер надо оставить в теле html-страницы, а все вычисления поднять наверх. К примеру, если вы проверяете сессию, и если в ней есть значение, которое надо сперва вывести в браузер, а после - сразу же удалить, то сохраняйте значение из сессии в переменную, далее - удаляйте значение в массиве $_SESSION, и после - выводите в браузер значение из той переменной, в которую вы его сохранили.
PS: Ещё раз повторю - вывод в браузер оставьте в теле html-страницы, а все вычисления подымите над html-кодом.
14. 3d_killer - 15 Мая, 2017 - 23:55:46 - перейти к сообщению
я написал где ошибка
15. DoctorMED - 16 Мая, 2017 - 00:34:48 - перейти к сообщению
Спасибо!!! Мне дошло Улыбка
А то целую неделю потратил Улыбка))

 

Powered by ExBB FM 1.0 RC1