@lil_koi
лучший из худших

Почему не работает редирект страницы?

у меня есть файл, который отвечает за регистрацию и вход на страницу(обработчик двух форм) и не работает
header ("Location: lk.php"); 79 строка кода
<?php 
require "db.php";
?>


<?php

$data = $_POST;
if(isset($data['do_signup']) ) {
	$errors = array();
	if( trim($data['name']) == '') {
		$errors[] = 'введите своё Фио!';
	}
	if( trim($data['email']) == '') {
		$errors[] = 'введите почтовый ящик!';
	}
	if( trim($data['phone']) == '') {
		$errors[] = 'введите телефон!';
	}
	if( $data['password'] == '') {
		$errors[] = 'введите пороль!';
	}
	if($data['password2'] != $data['password']) {
		$errors[] = 'пароли не совпадают!';
    }
    
    if( R::count('users', 'name = ?', array(
        $data['name']
    ) ) > 0 )
     {
		$errors[] = 'пользователь с таким именем уже есть';
    }
    if( R::count('users', 'email = ?', array(
        $data['email']
    ) ) > 0 )
     {
		$errors[] = 'пользователь с таким Email уже есть';
    }

    if( R::count('users', 'phone = ?', array(
        $data['phone']
    ) ) > 0 )
     {
		$errors[] = 'пользователь с таким номером уже есть';
    }
    
    

	if(empty($errors)) {
        //good
        $user   = R::dispense('users');
        $user   ->name  =        $data['name'];
        $user   ->phone =        $data['phone'];
        $user   ->email =        $data['email'];
        $user   ->password  =    password_hash($data['password'], PASSWORD_DEFAULT);
        R::store($user);
        echo '<div style="color:green;">'.'спасибо, что занял место в моей бд, а оно не бесконечное'.'</div>';     
	}
	else {
		echo '<div>'.array_shift($errors).'</div>';
	}
}

?>


<?php

$data = $_POST;
if(isset($data['do_login']) ) {
    $errors = array();
    $user = R::findOne('users','email = ?', array($data['email']));
    if ($user)
    {
        if(password_verify($data['password'], $user->password)
        ) {
            //переход в лк
            $_SESSION['logged_user'] = $user;
            header ("Location: lk.php"); 
        } else {
        $errors[] = 'Пароль не верен';
        }
    } else {
        $errors[] = 'Пользователь с таким Email не найден';
    } 

    if(! empty($errors))
     {
        echo '<div>'.array_shift($errors).'</div>';     
	}

}
?>

как мне это пофиксить? ошибка "Warning: Cannot modify header information - headers already sent by (output started at C:\web\server\OSPanel\domains\mainWork\handler.php:4) in C:\web\server\OSPanel\domains\mainWork\handler.php on line 79"
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
@plutoject
Добавьте в самое начало кода ob_start();
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Vitsliputsli
Вот так Google переводит текст ошибки:
"Внимание: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с C:\web\server\OSPanel\domains\mainWork\handler.php: 4) в C:\web\server\OSPanel\domains\mainWork\handler .php на линии 79"

даже нечего добавить...
Ответ написан
Комментировать
@sl0
Хэдеры отправляются до того, как хоть что-нибудь будет выведено на экран.
В данном случае, помимо многочисленных echo, это еще и перевод строк между
?>


<?php

Зачем оно, кстати так сделано?

А если быть кратким, то вместо header ("Location: lk.php");
можно использовать для перехода что-то типа
print <<<HERE
    <html><head><META HTTP-EQUIV='Refresh' content ='0; URL=lk.php'></head>
    </html>
HERE;

Но вообще так лучше не делать, а прописать нормальную валидацию формы.
Ответ написан
Комментировать
@DanKud
Потому что вы пытаетесь отправить заголовки уже после того как вывели какие-либо данные на страницу. Заголовки должны быть отправлены ПЕРЕД выводом любых данных. Добавьте в самое начало кода ob_start(); для буферизации вывода и ошибки не будет.
Ответ написан
Комментировать
irishmann
@irishmann
Научись пользоваться дебаггером
Вот весь ответ
5cad6de1594f8975108583.jpeg
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы