10/10/2018, 11:22

[HELP] lỗi headers already sent by

Tôi đọc và làm đúng như giáo trình nhưng vẫn gặp lỗi : headers already sent by .Dưới đây là 2 file register.php và thankyou.php. Khi người dùng nhấn submit thì lệnh header () sẽ chuyển hướng đến trang thankyou.php.
Mong được giải đáp vì sao vẫn mắc lỗi. Cảm ơn!
register: http://www.mediafire.com/?tyss7ip4sntinoe
thankyou: http://www.mediafire.com/?zidup690cv3m6fc

<?PHP
if (isset($_POST['submit']))
{
$messenger = NULL;
if (strlen($_POST['name']) >0)
{
$name = TRUE;
$name = stripslashes ($name);
$name = ucwords ($name);
} else
{
$name = FALSE;
$messenger.="<p>Ban chua nhap ho ten.</p>";
}
if (strlen($_POST['username']) > 0)
{
$username = TRUE;
} else
{
$username = FALSE;
$messenger .= "<p>Ban chua nhap Username.</p>";
}
if (strlen($_POST['mail']) > 0)
{
$email = TRUE;
} else
{
$email = FALSE;
$messenger .= "<p>Ban chua nhap email</p>";
}
if (strlen($_POST['password1']) > 0)
{
if ($_POST['password1'] == $_POST['password2'])
{
$password = TRUE;
} else
{
$messenger .= "<p>Mat ma xac nhan ko trung khop.</p>";
}
} else
{
$password = FALSE;
$messenger .= "<p>Ban chua nhap mat ma.</p>";
}
if ($name && $username && $email && $password)
{
$body = "Ban da dang ki thanh cong tai <b>My webite</b>.
Username cua ban la: <b>{$_POST['username']}</b>.
Password: <b>{$_POST['password1']}</b> ";
mail ($_POST['email'], 'Chuc mung ban da dang ki thanh cong!', $body, 'From: admin@site.com');
header ('Location: thankyou.php');
exit();
}
}
$page_tittle = "Dang Ki";
include ('./header.inc');
if (isset ($messenger))
{
echo $messenger;
}
?>
<form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset> <legend>Hay nhap thong tin cua ban</legend>
<p><b>Ten:</b> <input type="text" name="name" value="<?PHP echo $_POST['name'];?>" size="40" maxlength="50" /> (*) </p>
<p><b>Username:</b> <input type="text" name="username" value="<?PHP echo $_POST['username'];?>" size="40" maxlength="30" /> (*) </p>
<p><b>Email:</b> <input type="text" name="mail" value="<?PHP echo $_POST['mail'];?>" size="50" maxlength="60" /> (*) </p>
<p><b>Password:</b> <input type="password" name="password1" size="40" maxlength="30" /> (*) </p>
<p><b>Xac nhan:</b> <input type="password" name="password2" size="40" maxlength="30" /> (*) </p>
</fieldset>
<div align="center"> <input type="submit" name="submit" value="submit" /> </div>
</form>
<?PHP
include ('./footer.inc');
?>
bluewayvn viết 13:27 ngày 10/10/2018
Hi,
Mình không down file về xem được. Bạn nên chép code lên đây để dễ nhận được tra lời hơn.
Thank.
bvnguyen viết 13:25 ngày 10/10/2018
Bạn lưu trang register dưới dạng utf-8 without BOM
toanvinh1 viết 13:26 ngày 10/10/2018
Được gửi bởi bluewayvn
Hi,
Mình không down file về xem được. Bạn nên chép code lên đây để dễ nhận được tra lời hơn.
Thank.
Ok để mình chép code lên.
Được gửi bởi bvnguyen
Bạn lưu trang register dưới dạng utf-8 without BOM
Vẫn không được bạn ơi.
bluewayvn viết 13:33 ngày 10/10/2018
Nhìn không thấy lỗi, nhưng mình trả lời thế này:
Lỗi này xuất hiện thế này khi mà bạn xài header hay cookie trong khi trước đó bạn đã echo hoặc dùng 1 cách nào đó in ra một string / output.
Bạn kiểm tra xem trên đầu của file php có phải có một khoảng trắng hay không? Nếu có thì bỏ đi là được.
Ngoài ra lỗi này cũng xuất hiện khi bạn gọi một hàm nào đó bị sai, ví dụ hàm mail không chạy được sẽ xuất ra warning -> không header được.
Để sửa cái này, dễ dàng nhất là bạn xóa khoảng trắng trước cái thẻ <?php và ngay sau đó thêm vào dòng này ob_start(); -> nên hạn chế sử dụng hàm này trước khi hiểu rõ nhé. Cái này chỉ tạm thời sửa lỗi này mà thôi.
Chúc vui.
php_code viết 13:27 ngày 10/10/2018
Đơn giản là thêm dòng ob_start(); ở đầu file có lệnh header(...);
bluewayvn viết 13:30 ngày 10/10/2018
Hàm ob_start nếu xài như thế thì cũng không giải quyết được.
Ví dụ
Code:
<?php
echo 1223;
include("error.php");
?>
Code:
<?php //error.php
ob_start();
header('location: index.php');
?>
Với nữa ob_start() nếu lạm dụng, sẽ ảnh hưởng tới tốc độ của server cho nên hiện tại người ta rất hạn chế cái này.
toanvinh1 viết 13:27 ngày 10/10/2018
Được gửi bởi bluewayvn
Nhìn không thấy lỗi, nhưng mình trả lời thế này:
Lỗi này xuất hiện thế này khi mà bạn xài header hay cookie trong khi trước đó bạn đã echo hoặc dùng 1 cách nào đó in ra một string / output.
Bạn kiểm tra xem trên đầu của file php có phải có một khoảng trắng hay không? Nếu có thì bỏ đi là được.
Ngoài ra lỗi này cũng xuất hiện khi bạn gọi một hàm nào đó bị sai, ví dụ hàm mail không chạy được sẽ xuất ra warning -> không header được.
Để sửa cái này, dễ dàng nhất là bạn xóa khoảng trắng trước cái thẻ <?php và ngay sau đó thêm vào dòng này ob_start(); -> nên hạn chế sử dụng hàm này trước khi hiểu rõ nhé. Cái này chỉ tạm thời sửa lỗi này mà thôi.
Chúc vui.
Mình đã xóa hàm mail vì hàm lỗi nên nó xuất ra warning trước -> không header được.
Chân thành cảm ơn các bạn và bluewayvn!
Bài liên quan
0