【问题标题】:PHP Multipage form session data being lost after 2 navigationsPHP 多页表单会话数据在 2 次导航后丢失
【发布时间】:2012-07-04 22:01:47
【问题描述】:

我正在构建一个多页表单网站。

我正在使用

$_SESSION['X']=$_POST['X'] 

将表单中的变量存储到结果发布到的页面上的会话中。

表单是动态生成的,因此字段会填充会话变量

$X=$_SESSION['X']

(value="$X")

这样,当用户单击返回(带有页面 URL 的按钮,而不是历史记录 -1)时,页面将使用他们之前输入的值进行重组。

我的问题是这适用于一页(即他们可以返回一页并查看值),但是 2 页所有值都是空白的。

一旦值存储在 SESSION 中,它们不应该在浏览器会话期间保留吗?它们没有被覆盖。我误解了会话吗?任何帮助表示赞赏。

代码示例:

第 1 页:

session_start();

//populates fields if session value set for this variable 
$sv_01=$_SESSION['sv_01'];

<<<EOT
<form action="page 2 URL" method="post">
<label> q1 <input value=$sv_01 title="title" type="text" name="sv_01">

<input type="submit" value="Continue" />
</form>
EOT;

第 2 页:

session_start();
//stores POST data from page 1 in the session
$_SESSION['sv_01']=$_POST['sv_01']

//populates fields if session value set for this variable 
$sv_02=$_SESSION['sv_02'];

<<<EOT
<form action="page 3 URL" method="post">
<label> q2 <input value=$sv_02 title="title" type="text" name="sv_02">

<input onclick="page 1 URL';" type="button" value="Back" /> <input type="submit" value="Continue" />    
</form>
EOT;

第 3 页:

session_start();
//stores POST data from page 2 in the session
$_SESSION['sv_02']=$_POST['sv_02']

//populates fields if session value set for this variable 
$sv_03=$_SESSION['sv_03'];

<<<EOT
<form action="page 4 URL" method="post">
<label> q3 <input value=$sv_03 title="title" type="text" name="sv_03">

<input onclick="page 2 URL';" type="button" value="Back" /> <input type="submit" value="Continue" />    
</form>
EOT;

从第 3 页移到第 2 页可以,从第 2 页移到第 1 页也可以,但是从第 3 页移到第 1 页会导致第 1 页为空白。

有什么想法吗?非常感谢

【问题讨论】:

  • 回到第一页时所有的变量都是空白的?
  • 我看不出您在上面向我们展示的示例中有任何原因,为什么会发生这种情况,但是您应该在使用之前检查是否设置了会话,另外,如何清空?都是空的吗?你能做一个 $_SESSION 的 print_r,你确定你从第 3 页跳到第 1 页吗?因为您可以将会话 1 设置为空,因为您的第二页上的 session1=post1,您无法验证是否有帖子等。
  • @MarcioSimao 是的,当我返回第一页时,所有变量都是空白的
  • @AndréCatita 请注意,我不会直接从第 3 页跳转到第 1 页,而是通过第 2 页返回 - 但是第 2 页上没有任何内容可以将变量的值重新提交给会话所以应该没问题吧?不确定我是否理解将其设置为空,但也许它与下面的答案有关……会尝试一下,还有一个 print_r

标签: php html forms multipage


【解决方案1】:

可能您正在用来自$_POSTNULL 值覆盖$_SESSION var,因为如果您使用链接从Page3.php 跳转到Page2.php,则$_POST 内容不存在.

因此,您可以在将其值分配给$_SESSION 之前验证$_POST 值是否存在。像这样的代码:

第 2.php 页

if( isset($_POST['sv_01'])
    $_SESSION['sv_01']=$_POST['sv_01'];

第 3.php 页

if( isset($_POST['sv_02']) )
    $_SESSION['sv_02']=$_POST['sv_02'];

【讨论】:

  • 太棒了——就是这样。我会选择你的答案,因为它比下面的@user1404632 更清楚地说明了它为什么会破坏它。不过还是谢谢你们!
【解决方案2】:

也许可以尝试检查是否首先设置了 $_POST 成员。

代替:

$_SESSION['sv_01']=$_POST['sv_01']

试试

if (isset($_POST['sv_01'])) {
  $_SESSION['sv_01']=$_POST['sv_01']
}

【讨论】:

    猜你喜欢
    • 2018-11-24
    • 2012-06-04
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2021-12-15
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多