1

Тема: Cannot modify header information - headers already sent. Як виправити?

Підкажіть будь ласка. Вибиває помилка:

Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\progress\admin\index.php:15) in D:\OpenServer\domains\progress\admin\index.php on line 17

ось код

<?php
include_once('/db.php');
mysql_select_db('progress',$db);
$result = mysql_query("SELECT * FROM users ORDER BY id",$db);
$myrow = mysql_fetch_array($result);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="style/css" href="/style.css">
<title>Адмін панель</title>
</head>
<body>
<?php
if(!isset($_SESSION['log'])){
    header('Location: /login.php');
}
?>
</body>
</html>

2

Re: Cannot modify header information - headers already sent. Як виправити?

Щоб не писати гори тексту, дам посилання сюди.
http://cannot-modify-header-information.ru

Подякували: mike, leofun012

3

Re: Cannot modify header information - headers already sent. Як виправити?

VTrim написав:

Щоб не писати гори тексту, дам посилання сюди.
http://cannot-modify-header-information.ru

а якщо коротко як має виглядати цей код

4

Re: Cannot modify header information - headers already sent. Як виправити?

olekca01 написав:
VTrim написав:

Щоб не писати гори тексту, дам посилання сюди.
http://cannot-modify-header-information.ru

а якщо коротко як має виглядати цей код

А ви перечитатали ту статтю ?

Подякували: koala1

5

Re: Cannot modify header information - headers already sent. Як виправити?

Як правило, така помилка виникає, коли операції з http-хедерами робляться після того, як почав виводитись текст сторінки. У даному випадку, цей код:

<?php
if(!isset($_SESSION['log'])){
    header('Location: /login.php');
}
?>

слід перенести на початок (безпосередньо перед <!DOCTYPE HTML>)

6

Re: Cannot modify header information - headers already sent. Як виправити?

P.Y. написав:

Як правило, така помилка виникає, коли операції з http-хедерами робляться після того, як почав виводитись текст сторінки. У даному випадку, цей код:

<?php
if(!isset($_SESSION['log'])){
    header('Location: /login.php');
}
?>

слід перенести на початок (безпосередньо перед <!DOCTYPE HTML>)

Це може бути навіть тоді, коли хедери і в самому початку.

Автору

Найпростіший варіант. Відкрийте ваш PHP файлик в Notepad++ та Збережіть як UTF-8 (без BOM)

7

Re: Cannot modify header information - headers already sent. Як виправити?

Ну, так, BOM теж сприймається як текст сторінки. Але в даному випадку, явно видно html перед викликом header()

8

Re: Cannot modify header information - headers already sent. Як виправити?

Так, як вище написав P.Y, перенесіть хедер вище HTML, апотім збережіть як я вам сказав.
А після переадресації прийнято закривати скрипт, щоб програма відразу закрилась.

header('Location: /login.php');
exit;

Якщо ж не хочете робити переадресацію на PHP, то є варіанти на JS/HTML,які не викличуть помилок навіть при такому розміщенні коду.

Подякували: olekca011

9

Re: Cannot modify header information - headers already sent. Як виправити?

можете підсказати як зробити форму на сторінці де з звичайного пароля буде переводитись в md5

10

Re: Cannot modify header information - headers already sent. Як виправити?

olekca01 написав:

можете підсказати як зробити форму на сторінці де з звичайного пароля буде переводитись в md5

<?php

if(isset($_POST['password'])) echo 'MD5: '.md5($_POST['password']);

?>

<form method="POST">
<input type="text" name="password">
<input type="submit" value="MD5">
</form>

11

Re: Cannot modify header information - headers already sent. Як виправити?

Виправив тему на більш зрозумілу.