我之前寫過一篇關於此內容的文章,並得到了很好的回覆,糾正了我有的一個錯誤,我認爲這個錯誤解決了問題。不幸的是,它並沒有,我的舊帖子已經很混亂,我要重新發布這個問題,但是從另外一個角度來看,我已經爲此獲得了另一個好機會。PHP會話變量在頁面刷新後空白
代碼(簡化):
<?php
session_start();
if (!$_SESSION["companyid"]) {
header("location: http://www.somepage.com");
}
mysql_connect("localhost", "name", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
$companyid = $_SESSION["companyid"];
$_SESSION["youtubeurl"] = mysql_real_escape_string($_POST["youtubeurl"]);
$_SESSION["logourl"] = mysql_real_escape_string($_POST["logourl"]);
$_SESSION["plan1head"] = mysql_real_escape_string($_POST["plan1head"]);
$_SESSION["plan1description"] = mysql_real_escape_string($_POST["plan1description"]);
$_SESSION["plan1headline1"] = mysql_real_escape_string($_POST["plan1headline1"]);
$_SESSION["plan1price1"] = mysql_real_escape_string($_POST["plan1price1"]);
$_SESSION["plan1headline2"] = mysql_real_escape_string($_POST["plan1headline2"]);
$_SESSION["plan1price2"] = mysql_real_escape_string($_POST["plan1price2"]);
$_SESSION["plan1price1type"] = mysql_real_escape_string($_POST["plan1price1type"]);
$_SESSION["plan1price2type"] = mysql_real_escape_string($_POST["plan1price2type"]);
if(isset($_POST["submitpreview"])) {
$companyid = $_SESSION["companyid"];
$youtubeurl = $_SESSION["youtubeurl"];
$logourl = $_SESSION["logourl"];
$plan1head = $_SESSION["plan1head"];
$plan1description = $_SESSION["plan1description"];
$plan1headline1 = $_SESSION["plan1headline1"];
$plan1price1 = $_SESSION["plan1price1"];
$plan1headline2 = $_SESSION["plan1headline2"];
$plan1price2 = $_SESSION["plan1price2"];
$plan1price1type = $_SESSION["plan1price1type"];
$plan1price2type = $_SESSION["plan1price2type"];
}
?>
現在,有參與這三頁/實例:
- 頁與傳遞變量的預覽頁面
- 預覽頁面 形式
- 已提交預覽頁面(意思是刷新頁面)
一個人有自己的頁面,裏面填充了各種文本字段和下拉菜單(第1頁)。他們可以更新這個頁面,當他們填寫表單來完成並提交時,這些變量會被傳遞到預覽頁面上。如果他們喜歡預覽頁面,則確認它(提交執行「submitpreview」的表單)。
這是我的問題:所有由窗體填充的會話變量(除了公司ID,它們在第一次登錄時存儲在會話中)都會立即轉儲到會話變量中。我在預覽頁面的底部回顯了那些會話變量(只是爲了確認它們在此時不是空的),當我進入預覽頁面時,它們的內容會被適當地回顯。但是,當用戶確認更改並設置了submitpreview時,突然那些會話變量爲空。也就是說,由表單變量填充的所有會話變量都是空的。在頁面刷新前恢復出來的會話變量除了companyid變量外都沒有了。因爲companyid會話變量仍然很好,所以我知道(1)我的服務器上的會話必須正常工作,(2)問題在於將表單變量轉儲到會話中或檢索這些變量的代碼。任何有關爲什麼會發生這種情況的理論?
這讓我非常沮喪。感謝您在這個問題上對我的耐心,並感謝您給予的任何幫助。
歡迎來到Stack Overflow!請不要使用'mysql_ *'函數來編寫新的代碼。他們不再被維護,社區已經開始[棄用流程](http://news.php.net/php.internals/53799)。看到[紅色框](http://uk.php.net/manual/en/function.mysql-connect.php)?相反,你應該瞭解[準備好的陳述](http://en.wikipedia。org/wiki/Prepared_statement)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。如果你選擇PDO [這裏是一個很好的教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 – War10ck 2013-02-11 20:07:53
是session_start();存在於所有頁面上?當會話消失時,您是否嘗試過print_r($ _ SESSION)? – 2013-02-11 20:08:08
當我這樣做時,它給了我這個:(我預先設置了預覽提交後打印了這個)。 Array([youtubeurl] => [logourl] => [plan1head] => [plan1description] => [plan1headline1] => [plan1price1] => [plan1headline2] => [plan1price2] => [companyid] => 7.是的,session_start()在我所有頁面的開頭。 – 2013-02-11 20:12:57