2010-12-15 50 views
0

我試圖通過使用會話在窗體上存儲信息以防止驗證返回false,那麼用戶不必填寫表單。這我如何做這個:PHP會話變量不存儲...可能的php.ini問題?

PAGE答:

<? 
session_start(); 

$Fname = $_SESSION['FirstName']; 
?> 
<html> 
<input type="text" id="First" value="<? if($Fname){echo $Fname;}?>"> 
</html> 

PAGE B:

<? 
$Fname = $_POST['First']; 

session_start(); 

$_SESSION['FirstName'] = $Fname; 

//validation is not good then 
header('Location: PageA.php'); 
?> 

的問題是,發回網頁A時,沒有什麼是顯示在輸入了,但隨機會出現,或者我會刷新並顯示。對於大多數情況下,它只是不工作,我不明白它是一種剛剛開始發生的事情,當我修改刪除其中一個會話變量並由於其他原因用cookie替換它時,卻決定不去那條路徑。儘管如此,我仍然沒有看到我可以做什麼來開始引發這個問題。有任何想法嗎?我正在考慮它的php.ini文件,因爲我有一個單獨的表單,具有相同的設置,我從來沒有觸及它,現在它不工作時,這是我最後一次檢查。

UPDATE

我只是嘗試的形式,我提交了它錯誤地故意觸發驗證,正如我已經提到它送我回空白輸入。我點擊了另一個頁面,然後回到表格並輸入了輸入內容。它似乎好像它的存儲,但沒有立即被讀取?不知道這是否有幫助。

+2

側面說明:使用 DampeS8N 2010-12-15 15:32:46

回答

0

你不需要SESSION在所有...

PAGE答:

<? 
    $Fname = isset($_POST['First']) ? $_POST['FirstName'] : ''; 
?> 
<html> 
    <form method='post' action='PageB.php'> 
    <input type="text" id="First" value="<? if($Fname){echo $Fname;}?>"/> 
    </form> 
</html> 

PAGE B:

<? 
//validation is not good then 
include 'PageA.php'; 
exit; 
?> 
+0

這實際上是一種更好的解決方案。它幾乎可以保證輸入信息不會丟失。沒有想到這個,謝謝! – SReca 2010-12-15 16:32:25

0

不知道這是一個錯字,但在你輸入的標籤,當你去到頁面B.

+0

對不起,這是一個錯字。我只是寫了這個真正的快速顯示設置,但在我的窗體上它有id和name屬性。 – SReca 2010-12-15 15:38:59

2

在頁面上,你沒有指定「name」屬性,這將意味着一個空$ _POST數組B session_start()應該是頁面上的第一個命令。我總是把這個頂部只是要確定

+1

這就是答案。如果沒有爲該頁面設置會話,則不會將$ _SESSION與正確的會話相關聯。 http://php.net/manual/en/function.session-start.php – Incognito 2010-12-15 15:47:33

+0

所以我會在pageB上命名會話正確嗎?因爲pageA只是檢索發送給pageB – SReca 2010-12-15 16:10:38

0

這是困難的(至少對我來說),以幫助您沒有進一步的細節,但這裏是我的想法:

  1. 從PHP手冊:「會話ID不與即使session.use_trans_sid指定啓用位置的頭部被傳送,必須由人工用SID常量通過「
  2. 一個解決方案在其他論壇實測值:調用session_write_close()頭重定向前:external link

顯然, header()有時可以在寫入會話cookie之前進行重定向。這可以解釋爲什麼有時會起作用,而其他時間則不起作用。但是,正如我所說的,不確定這是否適用於您的代碼。

+0

的變量謝謝,我實現了這個,它仍然不能正常工作,但它的好做法是這樣做。 – SReca 2010-12-15 16:07:23

0

我得到了它在填充工作在你的例子中你遺漏的東西;對你起作用嗎?

PageA。的<form action="PageB.php" method="POST"> PHP

注意到除了和name="First"id="First"變化

<? 
session_start(); 

$Fname = $_SESSION['FirstName']; 
?> 
<html> 
<form action="PageB.php" method="POST"> 
<input type="text" name="First" value="<? if($Fname){echo $Fname;}?>"> 
</form> 
</html> 

PageB.php

(不變)

<? 
$Fname = $_POST['First']; 

session_start(); 

$_SESSION['FirstName'] = $Fname; 

//validation is not good then 
header('Location: PageA.php'); 
?>