页面刷新后,PHP会话变量空白

时间:2013-02-11 20:05:07

标签: php mysql

我之前写了一篇关于此事的帖子并得到了很好的回答,纠正了我的错误,我认为这个问题解决了。不幸的是它没有,而且我的老帖子很混乱,我将重新发布问题,但有了额外的观点,我已经在另一个好的时候挣扎了。

代码(简化):

<?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. 包含将变量传递到预览页面的表单的页面
  2. 预览页面
  3. 提交的预览页面(意思是页面已刷新)
  4. 一个人拥有自己的页面,其中包含各种文本字段和下拉菜单(第1页)。他们可以更新此页面,当他们填写表单并进行提交时,这些变量将传递到预览页面。如果他们喜欢预览页面,则确认它(提交执行“submitpreview”的表单)。

    这是我的问题:表单填充的所有会话变量(公司ID除外,它们首次登录时存储在会话中)都会立即转储到会话变量中。我已经在预览页面的底部回显了那些会话变量(只是为了确认它们此时不是空的),并且当我到达预览页面时它们的内容被适当地回显。但是,当用户确认更改并设置了submitpreview时,突然这些会话变量为空。也就是说,由表单变量填充的所有会话变量都是空的。除了companyid变量之外,在刷新页面之前回复的会话变量已经消失了。由于companyid会话变量仍然很好,所以我知道(1)我的服务器上的会话必须正常工作,(2)问题在于将表单变量转储到会话中或检索这些变量的代码。关于为什么会出现这种情况的任何理论?

    这让我非常沮丧。感谢您对此问题的耐心,并感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

想出来,以为我会分享。

在诸如此类的实例中,当您的会话变量等于刷新页面上的post变量时,您必须小心。当我的预览页面刷新时,后期变量(因为它们不再存在)变为空,它覆盖了我之前保存的会话变量的信息,并反过来使这些会话变量也为空。我必须相应地调整我的代码来解决这个问题。

答案 1 :(得分:0)

问题,如Pete_1s的回答所述,是由register_globals引起的。这导致不同变量的混合具有相同的名称。 这样:

foreach ($_SESSION AS $name -> $value) {
  unset ($_GLOBALS[$name]);
}
foreach ($_POST AS $name -> $value) {
  unset ($_GLOBALS[$name]);
}
foreach ($_GET AS $name -> $value) {
  unset ($_GLOBALS[$name]);
}
如果你无法停用register_globals,

将解决问题。