thể trùng lặp: Headers already sent by PHPCảnh báo: Không thể sửa đổi thông tin tiêu đề - headers already sent bởi LỖI
Tôi đã đấu tranh với lỗi này trong một thời gian bây giờ.
Để bắt đầu, tôi chỉ nghĩ đó là khoảng trắng, nhưng sau khi nghiên cứu sâu hơn tôi nghĩ rằng nó có thể là một vấn đề tương tự như sau:
Look cho bất kỳ báo cáo có thể gửi kết quả cho người sử dụng trước khi điều này tuyên bố tiêu đề. Nếu bạn tìm thấy một hoặc nhiều, hãy thay đổi mã của bạn để di chuyển câu lệnh tiêu đề trước chúng. Các câu lệnh điều kiện phức tạp có thể làm phức tạp vấn đề, nhưng chúng cũng có thể giúp giải quyết vấn đề. Hãy xem xét một biểu thức có điều kiện ở đầu tập lệnh PHP để xác định giá trị tiêu đề càng sớm càng tốt và đặt nó ở đó.
Tôi đoán tiêu đề bao gồm đang gây ra sự cố cùng với tiêu đề(), nhưng tôi không biết cách sắp xếp lại mã để loại bỏ lỗi này.
Làm cách nào để xóa lỗi?
<?php
$username = $password = $token = $fName = "";
include_once 'header.php';
if (isset($_POST['username']) && isset($_POST['password']))
$username = sanitizeString($_POST['username']);
$password = sanitizeString($_POST['password']); //Set temporary username and password variables
$token = md5("$password"); //Encrypt temporary password
if ($username != 'admin')
{
header("Location:summary.php");
}
elseif($username == 'admin')
{
header("Location:admin.php");
}
elseif($username == '')
{
header("Location:index.php");
}
else
die ("<body><div class='container'><p class='error'>Invalid username or password.</p></div></body>");
if ($username == "" || $token == "")
{
echo "<body><div class='container'><p class='error'>Please enter your username and password</p></div></body>";
}
else
{
$query = "SELECT * FROM members WHERE username='$username'AND password = '$token'"; //Look in table for username entered
$result = mysql_query($query);
if (!$result)
die ("Database access failed: " . mysql_error());
elseif (mysql_num_rows($result) > 0)
{
$row = mysql_fetch_row($result);
$_SESSION['username'] = $username; //Set session variables
$_SESSION['password'] = $token;
$fName = $row[0];
}
}
?>
'header.php' trông như thế nào? – jeroen
Đặt 'include_once 'header.php';' sau chuỗi 'if ($ username ...' if/else để các tiêu đề chuyển hướng không được gọi sau khi đầu trang HTML là đầu ra. –
Giả sử rằng không có dấu cách trước < Trong tập tin bạn liệt kê, có một số đầu ra xuất hiện trong tập tin header.php, dự định hay không.Nếu header.php thực sự phải tạo ra một số đầu ra, thì bạn nên đặt điều kiện đăng nhập trước khi bạn bao gồm header.php, nếu không bạn sẽ chỉ cần đi vào và loại bỏ bất kỳ đầu ra nào được tạo ra trong tệp header.php. Nhiều khả năng là thủ phạm, theo kinh nghiệm của tôi, là khoảng trắng thừa trước thẻ mở tag hoặc sau thẻ đóng?>. Không thấy bất kỳ ký tự nào trước lỗi, bạn đang tìm kiếm khoảng trắng – Jason