2010-07-06 4 views
0

Можно создать дубликат:
Headers already sent by PHPПредупреждение: Не удается изменить информацию в заголовке - заголовки уже отправлены

Я получаю ошибки о «заголовки уже отправлены», когда я успешно войти на страницу.

Вот мой код, который имеет дело с логином:

<?php 
include("config.php"); 
$eUsername = $_POST['username']; 
$ePassword = $_POST['password']; 

$con = mysql_connect("localhost","MY_USERNAME","MY_PASSWORD"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("forum", $con); 
$result = mysql_query("SELECT * FROM members WHERE username = '$eUsername'"); 

while($row = mysql_fetch_array($result)) 
    { 
    if ($ePassword==$row['password']) { 
     echo "Correct"; 
     setcookie("loggedIn", "true", time()+1000000000); 
     setcookie("logUsername", "$eUsername", time()+100000000); 
     setcookie("logPassword", "$ePassword", time()+100000000); 
    } 
    else { 
     echo "Incorrect username/password. Please try again."; 
    } 
    } 
mysql_close($con); 
if ($_COOKIE['loggedIn']=="true") { 
$curURL=basename($_SERVER['SCRIPT_NAME']); 
echo "You are already logged in. <a href='$curURL?lo=true'>Log out?</a>"; 
} 
echo "<br /><br />"; 
print_r($_COOKIE); 
?> 

Поэтому в основном то, что это делает, если войти с правильной информацией, он будет установить три печенья, имя пользователя, пароль и один, чтобы проверить для два других.

Но когда я успешно войти, я получаю эти ошибки:

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в /home/scott/web/forum/index.php : 18) в /home/scott/web/forum/index.php в строке 19

Предупреждение: не удается изменить информацию заголовка - уже отправлены заголовки (вывод начат в /home/scott/web/forum/index.php : 18) в /home/scott/web/forum/index.php в строке 20

Предупреждение: не удается изменить информацию заголовка - уже есть заголовки нт путем (выход начался в /home/scott/web/forum/index.php:18) в /home/scott/web/forum/index.php на линии 21

Что я делаю не так?

+4

Во-первых, надеюсь, вам понравится SQL-инъекция, потому что у вас это есть в пиках. Во-вторых, вы должны хэшировать свои пароли. – Kalium

+0

Удалены теги, связанные с SQL, потому что заголовки являются только HTTP. –

+1

Не говоря уже о сохранении фактического пароля в базе данных и их файлах cookie. Наихудшая безопасность. – animuson

ответ

4

У вас есть эхо, которое может произойти до вашего звонка setcookie.

header или setcookie или что-либо еще, отправляющее HTTP-заголовки, должно выполняться перед любым другим выходом или вы получите это предупреждение/ошибку.

Кроме того, вы должны проверить config.php, чтобы убедиться, что после закрывающего пробела нет закрывающего ?> php-тега. Помните ... все, что не включено в <?php ... ?>, считается выводом парсера php и выйдет «echo'd».

+0

Спасибо, мужик! Оно работает! – Scott

0

Похоже, проблема возникает при настройке сеансовых файлов cookie. Возможно, вы хотите проверить, существуют ли они до того, как вы их установили, и если они существуют, предпримите другие действия.

1

ОК, это может быть глупо - я даже не углубился в ваш код - но это пробел перед открытием <?php? Кроме того, я бы проверил config.php, чтобы убедиться, что между открывающими и закрывающими тегами нет пробелов.

0

Вы пишете «Исправить» в выходной поток перед установкой файлов cookie. Когда вы начинаете писать на страницу, сначала записываются заголовки HTML. Когда файлы cookie попадают в заголовок, вы должны установить их перед началом записи на страницу.

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

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