我目前正在使用$_SESSION
构建多页表单,到目前为止一切正常。然而,即使我能够在6页的末尾检索所有数据,但如果用户犯了错误,似乎无法返回表单中。
让我们说他在第5页,他意识到他需要回到第3页来改变一些东西,他将无法这样做。 Firefox提供此错误消息:
文件已过期 该文档不再可用。 Firefox的缓存中不提供所请求的文档。作为安全预防措施,Firefox不会自动重新请求敏感文档。单击“重试”以从网站重新请求文档。
这就是我的表单,这个是Form-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
从上一个表单中检索数据,这个数据来自Form-2.php:
session_start();
$_SESSION['name'] = $_POST['name'];
$_SESSION['age'] = $_POST['age'];
$_SESSION['sex'] = $_POST['sex'];
等等六页。
它运行正常,它可以正确检索所有值,但填写表单时无法返回。
我做错了什么?如果他犯了错误,我怎样才能确保用户能够回去?
感谢您的帮助。
编辑:
我最终得到了以下代码,解决了我的一半问题。仍然来自Form-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 :(得分:1)
不是最好的解决方案,但可以完成工作:不要使用后退按钮,提供自己的前进,后退,“步进”按钮。然后用表中存储的数据填充表单。会议。
答案 1 :(得分:0)
djot是对的,你需要一个&lt;&lt;返回&gt;&gt;和&lt;&lt;转发&gt;&gt;按钮,您可以在功能上执行的操作是,如果单击后退按钮,则将页面/表单的值作为隐藏输入字段传递,并使用隐藏的值填充字段。