2012-05-11 49 views
2

我目前正在使用$_SESSION构建多页表单,到目前为止,所有内容都工作正常。然而,即使我能够在6页结束检索所有数据,似乎是不可能回去的形式,如果用户犯了一个错误。以多页形式返回

假设他在第5页,他意识到他需要返回第3页来改变某些内容,他将无法做到这一点。火狐给出了这样的错误消息:

文件过期 本文档不再可用。 请求的文档不可用在Firefox的cache.As安全起见,火狐不会自动重新请求敏感documents.Click再次尝试从网站重新请求文档。

这是我的形式是什么样子,这个是形式,1.PHP:

<form action="Form-2.php" method="post"> 
     <fieldset> 
       <legend>Information</legend> 
       <p> 
        <label for="name">Name</label> 
        <input id="name" type="text" name="name" required/> 
       </p> 
       <p> 
        <label for="age">Age</label> 
        <input id="age" type="number" name="age" placeholder="Ex. 1988" required/> 
       </p> 
       <p> 
        <input id="sex-m" type="radio" name="sex" value="Male" required/> 
        <label for="sex-m">Male</label> 
        <input id="sex-f" type="radio" name="sex" value="Female" required/> 
        <label for="sex-f">Female</label> 
       </p> 
     </fieldset> 
     <input type="submit" value="Next page"/> 
</form> 

我使用SESSION检索从以前的表格数据,这个人是来自晶,2.PHP :

session_start(); 

$_SESSION['name'] = $_POST['name']; 
$_SESSION['age'] = $_POST['age']; 
$_SESSION['sex'] = $_POST['sex']; 

等六页。

它工作正常,它检索所有值正确,但填写表单时不可能返回。

我在做什么错?如何确保用户能够返回,如果他犯了一个错误?

感谢您的帮助。

编辑:

我结束了下面的代码,解决我的问题的一半。仍然表单的2.PHP:

session_start(); 

if (isset($_SESSION['location']) && isset($_SESSION['job'])) { 
     $location = $_SESSION['location']; 
     $job = $_SESSION['job']; 
} else { 
     $_SESSION['name'] = $_POST['name']; 
     $_SESSION['age'] = $_POST['age']; 
     $_SESSION['sex'] = $_POST['sex']; 

     $location = ''; 
     $job = ''; 
} 

然后,我只是显示在字段中的值:

如果文本:<?php echo $location; ?>

如果电台:<?php if(isset($job) && $job == "Yes"){echo "checked=\"checked\" ";} ?>

它工作的很好,不同的形式 - 如果价值已经设定 - 预填充就好了。

我的问题是,你可以看到,如果我回去变化的值,它不会因为我忽略POST如果存储在SESSION相应的值考虑在内。

我不知道如何使这个工作正常...任何提示?

+0

Fyi,英文单词“信息”不存在。它始终是“信息”。 – ThiefMaster

+0

的确,我很快翻译了我的表格,并且错过了这个! – morgi

回答

1

不是最好的解决方案,但做的工作:不要使用后退按钮,提供您自己的前进,后退,“步骤”按钮。然后用存储在例如会议。

+0

我已经在使用这样一个按钮:''。后退按钮可以很好,我怎样才能实现它,而不会搞乱我的数据呢? – morgi

+0

好吧,不是那么容易。你必须找到自己的方式来处理所有的帖子,会话(+验证,+ db_data_format)数据。我使用某种form2session,session2form,session2db +验证类来处理所有这些。 – djot

+0

我明白了,你能告诉我一个例子,或者一段能够帮助我开始的代码吗?这种形式有点特别,它不需要任何SQL请求或任何东西,我只需要收集数据并组装它。 – morgi

0

djot是正确的,你需要一个< <回>>和< <前进>>按钮,你可以在功能上做的是如果单击后退按钮通过网页/表单的值作为隐藏的输入字段和填充这些字段使用隐藏的值。..