【发布时间】:2013-02-11 20:05:07
【问题描述】:
我早些时候写了一篇关于这个的帖子,并得到了很好的回复,纠正了我的一个错误,我认为这解决了问题。不幸的是,它没有,而且我的旧帖子太混乱了,我将重新发布这个问题,但是有了额外的视角,我又在这个问题上挣扎了好一阵子。
代码(简化):
<?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 之外的所有内容,当他们第一次登录时存储在会话中)会立即转储到会话变量中。我已经在预览页面底部回显了这些会话变量(只是为了确认它们此时不是空的),当我到达预览页面时,它们的内容会被适当地回显。但是,当用户确认更改并设置了提交预览时,突然这些会话变量为空。也就是说,表单变量填充的所有会话变量都是空的。除了 companyid 变量之外,在页面刷新之前很好地回显的会话变量都消失了。由于 companyid 会话变量仍然很好,所以我知道(1)我的服务器上的会话必须正常工作,(2)问题在于将表单变量转储到会话中或检索这些变量的代码。关于为什么会发生这种情况的任何理论?
这让我很沮丧。感谢您在此问题上对我的耐心等待,并感谢您提供的任何帮助。
【问题讨论】:
-
欢迎来到 Stack Overflow!请不要使用
mysql_*函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你选择 PDO here is a good tutorial. -
是 session_start();存在于所有页面上?当会话消失时,您尝试 print_r($_SESSION) 吗?
-
当我这样做时,它给了我这个:(我在设置 previewsubmit 后打印了这个)。数组( [youtubeurl] => [logourl] => [plan1head] => [plan1description] => [plan1headline1] => [plan1price1] => [plan1headline2] => [plan1price2] => [companyid] => 7. 和是的,session_start() 在我所有页面的开头。