2012-05-19 221 views
0

您能幫我嗎?我的網站沒有設置以下簡單的cookie。雖然其他一些登錄腳本可以,但這個不起作用。由於Cookie未設置

test.php的

... 

<form action="test2.php" method="post"> 
     Email: <br /> 
     <input type="email" name="email" value=""/> <br /> 
     <input type="submit" name="submit" value="Next"/> 
</form> 

... 

test2.php

<?php ob_start(); ?> 

<?php 
// call the header of the page 
require('header.html'); 

// connect to database 
require "connect.php"; 
?> 

<?php 
    $email = $_POST['email']; 

    // set cookie 
    $one_hour = time() + 3600; 
    $set = setcookie(user_email, $email, $one_hour); 

    if($set == TRUE) { 
     print '<p> Cookie set</p>'; 
    } else { 
     print '<p> Cookie not set</p>'; 
    } 

// call footer of the page 
require('footer.html'); 
?> 

<?php ob_flush(); ?> 

運行上面的腳本後,我得到這個錯誤:

警告:不能更改頭信息 - 頭已在第16行的/websites/public_html/test2.php中發送(輸出開始於/websites/public_html/test2.php:1)

的Cookie沒有設置

  • PS:我的劇本16行是 「$組=的setcookie(email_noaccount,$電子郵件,$小時);」
+0

你必須單獨的PHP代碼標籤?標籤上的新線條意味着'echo';''在'setcookie'之前,使錯誤 –

+1

可能重複[已經由PHP發送的標頭](http://stackoverflow.com/questions/8028957/headers-already-sent -by-php) – mario

+0

正如警告所說,你的問題是在第1行,而不是在第16行。 – mario

回答

2

只是改變上面的代碼如下方式和嘗試,後把ob_start()要求()

<?php 
require "connect.php"; 
require('header.html'); 
?> 
<?php ob_start(); ?> 
+0

沒有區別。:( –

+0

編輯了答案,嘗試 – mack

0

需要之前你發送內容到輸出緩衝區:

<?php ob_start(); ?> 
    <--- right here 
<?php 
// call the header of the page 
require('header.html'); 

// connect to database 
require "connect.php"; 
?> 
    <--- and right here 
<?php 
    $email = $_POST['email']; 

你應該在輸出擺脫不必要的空白,所以你可以進行你的服務器端處理(包括頭修改),然後再建立輸出。

理想情況下,你不想混合兩者。服務器端處理應該在輸出生成之前進行,然後輸出將使用處理結果構建併發送到客戶端。

+0

仍然,同樣的錯誤:( –