2010-07-29 6 views
-1

мой code-Предупреждение: Не удается изменить информацию в заголовке - заголовки уже отправленные

<?php 

$username = $_POST['username']; 
$password = $_POST['password']; 

require 'database.php'; 

$q = "SELECT id FROM users WHERE user_name = '$username' AND password = '$password'"; 

$result = $mysqli->query($q) or die(mysqli_error()); 

if (mysqli_num_rows($result) == 1) { 
setcookie('authorized', 1, 0); 
header("Location: index.php"); 
} else { 
header("Location: login.php"); 
} 

?> 

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в C: \ XAMPP \ HTDOCS \ фото \ базы данных .php: 1) в C: \ XAMPP \ HTDOCS \ фото \ confirm_login_credentials.php на линии 13

there is no white space and BOM is also ASCI

+4

Что находится в 'database.php'? – hsz

+2

В качестве примечания: этот скрипт уязвим для SQL-инъекции. Посмотрите этот термин и используйте $ mysqli-> real_escape_string(), чтобы избежать переменных, исходящих от $ _POST в частности и внешнего мира в целом. – Mchl

ответ

0

проверить спецификацию вашего database.php файла. он должен быть ANCI

+0

это правильно! проблема заключается в том, что файл сценария должен быть ascii или utf8 без спецификации – Luciano

2

output started at C:\xampp\htdocs\pics\database.php:1

Вот где вы должны искать все, что получает эхо. (1 означает линию 1)

+1

Возможно, вы захотите удалить тег закрытия?> Снизу базы данных.php, чтобы гарантировать отсутствие пробелов после кода. –

2

Ваш файл database.php выводит что-то в строке 1. Вероятно, некоторый пробельный символ или спецификация.

1

Аманда, хотя эта ошибка находится в строке 1. теги окончания?> В скрипте PHP являются необязательными.

Это хорошая практика, чтобы никогда не ставить их так, чтобы вы не получили пробелы в END своего времени, а затем не можете использовать header() и получить эту классическую ошибку «Headers already sent».

Вы можете предотвратить это, используя функцию headers_sent(), которая более надежна, чем просто вызовы header().

if(headers_sent() === false) { 
    header("Location: myfile.php"); 
} else { 
    die('I cant redirect because headers have already been sent'); 
} 

Что касается вашей проблемы, проверьте пробела перед <?php тегом во всех ваших соответствующих файлах, скорее всего database.php.

+1

На самом деле я так не думаю. Вы все равно остаетесь в состоянии ошибки. Лучше написать свой код, чтобы этого не произошло в первую очередь. –

+0

Согласился, что это была демонстрация, как найти, были ли отправлены заголовки или нет, а не решение проблемы. Единственное разрешение - удалить пробел или что-то, что выводит заголовки. –

Смежные вопросы

 Смежные вопросы