2012-09-28 53 views
1

用戶填寫第1頁的表單。表單使用POST提交到第2頁。第2頁使數據庫插入,但需要插入存儲在會話變量中的用戶標識,因此我需要執行會話啓動以獲取該會話變量,但是這阻止了我在最後使用標題重定向來停止重新啓動會話,意見書。我不想將用戶ID設置爲第1頁上的隱藏輸入,因爲這很容易被欺騙。我顯然在做一些不符合最佳實踐的事情,我該怎麼做?使用帶標題重定向的session_start

<?php 
@session_start(); 
require_once '../Classes/Communication.php'; 
require_once '../Classes/Communication_db.php'; 
$noteDate=$_POST["noteDate"]; 
$noteContact = $_POST["noteContact"]; 
$note= $_POST["note"]; 
$custID = $_POST["custID"]; 

$comm = new Communication(); 
$comm->setCustomerID($custID); 
$comm->setCommunicationDate(date("Y-m-d", strtotime($noteDate))); 
$comm->setCustomerContactID($noteContact); 
$comm->setNotes($note); 
$comm->setUserID($_SESSION["userID"]); 

Communication_db::saveCommunication($comm); 

header("Location: ./index.php?action=newCustomer",303); 

?> 
+0

你得到了什麼錯誤? – Nelson

+0

我在這裏看不到問題。你可以使用session_start,這不會禁止你使用更多的標題位置。 –

回答

6

擺脫<?php標記之前的空白。該空白符被髮送出去,然後您不能再撥打header()

此外,你可以在早些時候調用session_start(或者一個庫正在這樣做)。你只能調用一次。試試這個:

if (!isset($_SESSION)) { 
    session_start(); 
} 
+0

很好的捕獲,甚至沒有注意到空間:),幹得好! – xception

+0

+1這是正確的答案 – AlexP

+0

在那裏沒有任何空白處,我只是將它錯誤地粘貼到表單中,相信我,我之前一直在使用空白問題。我會先嚐試檢查會話狀態。這真的很奇怪,如果我評論會話開始工作正常,但如果我取消它的評論,我得到'頭已發送'錯誤 – Casey

1

在session_start不會阻止你設置任何標題,但是吐出任何輸出頭聲明之前會,即使這只是一個PHP的警告或通知。擺脫@Ray注意到的空間,並修復可能在標題行之前生成任何類型輸出的其他任何內容。