Здравствуйте, имеется MVC модель сайта, смысл такой если человек авторизован имеет свою сессию, то контроллер возвращает по адресу "/admin" панель администратора. Если нет, то возвращает форму авторизации. Проблема заключается в следующем, что когда я авторизуюсь, то нужно обновить страницу вручную, что бы появилась панель администратора, если использовать header( "Location: /admin" ); то выкидывает ошибку - Warning: Cannot modify header information - headers already sent by
Что делать?
Код контроллера:
class AdminController
{
public function actionPanel()
{
if (isset($_SESSION['users-login'])) {
$client = AdminPanel::getSelectClientList();
include_once ROOT . '/views/layaut/administrator/Panel.php';
}else{
include_once ROOT . '/views/layaut/administrator/Login.php';
}
return true;
}
}
Код авторизации:
<?php
include_once ROOT . '/views/scripts/scripts.html';
include_once ROOT . '/views/views/administrator/Login.html';
$login = $_POST;
$errors = array();
if (isset($login['do_admin'])){
$log = AdminPanel::getEntrance('users', $login['email'], $login['pass']);
if ($log == false){
$errors[] = 'Неверно введено имя пользователя или пароль';
}
if(empty($errors)){
$_SESSION['users-login'] = $log;
header( "Location: /admin" );
}else {
echo '<div style="color: #ff4930;">' .array_shift($errors).'</div>';
}
}
сама форма HTML:
<div class="container" id="authorization">
<div class="col-12 col-md-4">
<form action="\admin" method="post" class="form-signin">
<h2 class="form-signin-heading">Авторизация</h2>
<label for="inputEmail" class="sr-only">Адрес электронной почты</label>
<input name='email' type="email" id="inputEmail" class="form-control" placeholder="Адрес электронной почты" required="" autofocus="">
<label for="inputPassword" class="sr-only">пароль</label>
<input name='pass' type="password" id="inputPassword" class="form-control" placeholder="Пароль" required="">
<div class="checkbox">
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit" name="do_admin">Вход</button>
</form>
</div>
</div>
Не надо ничего выводить на экран до header(), иначе он не будет работать. Надо удалить следующее:
include_once ROOT . '/views/scripts/scripts.html';
include_once ROOT . '/views/views/administrator/Login.html';
Тогда все будет работать.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники