以多页形式返回

时间:2012-05-11 08:06:01

标签: php forms session

我目前正在使用$_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

我无法弄清楚如何使这项工作正常...任何提示?

2 个答案:

答案 0 :(得分:1)

不是最好的解决方案,但可以完成工作:不要使用后退按钮,提供自己的前进,后退,“步进”按钮。然后用表中存储的数据填充表单。会议。

答案 1 :(得分:0)

djot是对的,你需要一个&lt;&lt;返回&gt;&gt;和&lt;&lt;转发&gt;&gt;按钮,您可以在功能上执行的操作是,如果单击后退按钮,则将页面/表单的值作为隐藏输入字段传递,并使用隐藏的值填充字段。