มันขึ้นแบบนี้ครับ
Cannot modify header information - headers already sent by (output started at C:\AppServ\www\setcookie.php:1) in C:\AppServ\www\setcookie.php on line 14
นี่โค๊ด
<?php
if(isset($_POST["send"])){
process();
}
else
{
htmlblock();
}
function process(){
$id=$_POST["username"];
if($_COOKIE["username"]=="")
{
setcookie("username",$id,time()+3600);
echo "ขอต้อนรับสู่ระบบคุณ $id <br>";
echo "ตอนนี้คุณยังไม่มี cookie";
}
else
{
echo "ขอต้อนรับสู่ระบบคุณ $user <br>";
echo "คุณมี cookie แล้วคือ".$_COOKIE["username"];
}
}
function htmlblock(){
$id="";
if(isset($_COOKIE["username"])){
$id=$_COOKIE["username"];
}
echo <<<HTML
<form action="{$_SERVER['PHP_SELF']}" method="POST">
<input type="text" name="username" value="{$id}"><br>
<input type="submit" name="send">
</form>
HTML;
}
?>
:wanwan017:
ได้ Include ไฟล์นี้ไปใช้หน้าอื่นหรือเปล่าครับ? ถ้า Include ไปแสดงก็ Show ไฟล์นั้นด้วย
ถ้าเฉพาะ Code ที่แสดง ผมว่ามันจะไป Error ตรงบรรทัด 20 มากกว่า เพราะไม่ได้มีการกำหนดค่าตัวแปล $user จู่ๆ ก็สั่ง Echo มันออกมา
ob_start(); ไว้บนสุด บรรทัดแรกเลยนะ
ทำตามทั้งสองท่านแล้วก็ยังขึ้น
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\setcookie.php:1) in C:\AppServ\www\setcookie.php on line 15
:wanwan031:
ถ้า cookie ยังทำงานแต่มี error ให้ใส่ @ หน้า function หรือบรรทัดไหนที่ไม่ต้องการให้มันขึ้น error ครับ เช่น @setcookie
ใส่ ob_start() ไว้บรรทัดแรกสุด ของไฟล์แรกสุดที่มีการ run เช่น www.myweb.com/mypage.php (http://www.myweb.com/mypage.php)
ก็ให้ใส่ ob_start() ไว้ที่บรรทัดแรกสุดของ mypage.php ไม่ใช่ใส่ไว้บรรทัดแรกของ setcookie.php
ลักษณะการทำงานของ cookie คือส่ง cookie ไปพร้อม header ถ้าส่งไม่ได้ ก็ทำงานไม่ผ่านครับ client ไม่ได้รับ cookie
ใส่ @ ไว้ข้างหน้า setcookie ไม่ช่วยไร แค่ไม่ให้โชว์ error/warning ให้เกะกะลูกตา
ส่วน ob_start() คือ อะไร คือคำสั่งที่ทำให้ php ไปส่งส่วนอื่นไปนอกจาก header ถึงแม้จะมีการ echo ก็จะไปเก็บไว้ใน buffer แทนที่จะส่งไปครับ
เมื่อ obstart ไว้บรรทัดแรกสุด จะใส่ session start/set cookie/set header ไว้ตรงส่วนไหนก็ได้ แต่ต้องก่อนการ flush buffer
ผมลองทำตามที่หลายๆท่านบอกละครับยังคง error
ใครก็ได้ลองเอาโค๊ดผมไปแล้วทำไม่ให้มันเกิด error หน่อยครับ :wanwan017:
เอาไฟล์มาครับไม่ก็ copy code มาวางในบอร์ดก็ได้
โค๊ดเดิมแหละครับเพราะผมให้มันประมวลผลในหน้าเพจเดิมใช้ $_SERVER['PHP_SELF']
ผมลองใส่ ob_start(); ไว้ที่บรรดทัดแรกก็ยัง error ครับ คือผมกำลังฝึกใช้ cookie ครับ :P
ถ้าใช้ dream เขียนโค้ดลองเข้าไปดูที่ Modify > Page Properties > Title/Encoding > เอาติ๊กถูกหน้าประโยค Include Unicode Signature (BOM) ออก
ลองดูน่ะครับเผื่อเป็นแบบที่ผมเคยเป็น :P
น่าจะเป็นที่ Dream ครับ ลองทำตามด้านบนเลยครับ เพราะผมเอาลง notepad++ ดูได้ปกตินะ
ถ้าไม่หายใช้ editplus แก้ encode เป็น UTF-8 ก็ได้ครับ
อ้างถึงจาก: sbaydee ใน 18 พฤษภาคม 2013, 00:56:42
ถ้าไม่หายใช้ editplus แก้ encode เป็น UTF-8 ก็ได้ครับ
ตามนี้ครับ น่าจะเกิดจากปัญหา encode
ได้ละครับขอบคุณครับ สงสัย notepad++ ผมมีปัญหาตอนแรกก็เข้ารหัสแบบ UTF-8
เลยเปลี่ยนเป็น ansi และก็กลับมาเป้น UTF-8 ก็ใช้ได้เลย
ขอบคุณทุกท่านครับ :wanwan017: