Получаю ошибку при переадресации, после успешной авторизации

78
29 января 2022, 21:30

Cannot modify header information - headers already sent by Ошибка при переадресации, после успешной авторизации

<?php
include "header.html";
require "db.php";
    $data=$_POST;
    if(isset($data['do_login']))
    {
        $errors = array();
        $user = R::findOne('users', 'login = ?', array($data['login']));
        if( $user)
        {
            if(password_verify($data['password'], $user->password))
            {
                // $_SESSION['logged_user'] = $user;
                header('Refresh: 5; Location: mainwindow.html');
                echo '<div style = "color: green;">Вы Авторизованы! <br/> Можете перейти на <a href="http://localhost/mainwindow.php">главную</a> страницу!</div><hr>';
                // exit;
            } else {
                $errors[] = 'Пароль неправильно введен';
            }
        } else
        {
            $errors[] = 'Пользователь не найден!';
        }
        if (!empty($errors)) {
            echo'<div style="color:red;">'.array_shift($errors).'</div><hr>';
        } 
    }
?>
    <head>
    <link href = "autorizstyle.css" rel="stylesheet">
</head>
    <body>
<div class="box">
    <div>
        <p class="titleaut">Авторизация</p>
    <form action="login.php" method="POST">
    <div class="win_log">    
    <p>
            <p><strong>Логин:</strong></p>  
            <input type="text" name="login" value = "<?php echo @$data['login'];?>">
        </p>
</div>
<div class="win_log">
        <p>
            <p><strong>Пароль:</strong></p> 
            <input type="password" name="password" value = "<?php echo @$data['password'];?>">
        </p>
</div>
        <p>
            <button class="buton" type="submit" name = "do_login">Войти</button>
        </p>
    </form>
    </div>
</div>
</body>
<?php
 include "footer.html";
?>

Как звучит ошибка:

 Cannot modify header information - headers already sent by (output started at C:\OpenServerPanel\OSPanel\domains\localhost\header.html:1) in C:\OpenServerPanel\OSPanel\domains\localhost\login.php on line 14

Код header.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href = "stylemain.css" rel="stylesheet">
</head>
<body>
        <div class="header">
            <div class="mainers__div">
            <a href="/mainwindow.php" class="mainers">Главная</a>
            </div>
            <div class="autlog">
            <a href="/login.php">Авторизация</a>
            <a href="/signup.php">Регистрация</a>
            </div>
        </div>
</body>
</html>
Answer 1

Помните, что функцию header() можно вызывать только если клиенту еще не передавались данные. То есть она должна идти первой в выводе, перед ее вызовом не должно быть никаких HTML-тегов, пустых строк и т.п.

см. https://www.php.net/manual/ru/function.header.php

--> Вы вызываете при работе header('Refresh: 5; Location: mainwindow.html');, а перед тем выводите содержимое header.html

Тут решение такое может быть - помещайте нужное в переменные, заместо echo и потом выводите, где нужно, в соответствии с очередностью.

Тогда Вам не нужно вставлять содержимое файла перед кодом php - пишите обычным порядком html, а php вставляете выше <!DOCTYPE html>

И разберитесь с кодом - что у Вас дублируются <head> и <body>? - Уберите лишние, сделайте нормальную валидную страницу html, а код php выше, как уже описано.

READ ALSO
Почему bind_param() не работает?

Почему bind_param() не работает?

Ошибка: Fatal error: Uncaught Error: Call to a member function bind_param() on bool Что я сделал не так?

146
Требуется конкретный совет где изучать

Требуется конкретный совет где изучать

Я начинающий PHP разработчик,меня очень интересует данный язык, хочу заниматься в ближайшее время написанием скриптов и логики для сайтовНо...

195
Не загружается фотография на бд

Не загружается фотография на бд

Код PHP/HTML, не грузит фото на бд(базу данных)

334
Как распознать русские буквы

Как распознать русские буквы

Имеется такой код:

140