【问题标题】:Go back in multiple pages form以多页形式返回
【发布时间】:2012-05-19 20:00:47
【问题描述】:

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

然后我只需在字段中显示值:

如果是文字:&lt;?php echo $location; ?&gt;

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

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

我的问题是,如您所见,如果我返回并更改一个值,则不会考虑它,因为如果存储了相应的值,我将忽略 POSTSESSION

我不知道如何使它正常工作...有什么提示吗?

【问题讨论】:

  • 仅供参考,英文单词“信息”不存在。它始终是“信息”。
  • 没错,我翻译的很快,我错过了这个!

标签: php forms session


【解决方案1】:

不是最好的解决方案,但可以做到:不要使用后退按钮,提供您自己的前进、后退、“步进”按钮。然后用存储的数据填充表单,例如会议。

【讨论】:

  • 我已经在使用这样的按钮了:&lt;input type="submit" value="Next page"/&gt;。后退按钮可能很好,但我怎样才能在不弄乱我的数据的情况下实现它?
  • 好吧,没那么容易。您必须找到自己的方式来处理所有帖子、会话(+validating、+db_data_format)数据。我使用某种 form2session、session2form、session2db + 验证类来处理所有这些。
  • 我明白了,你能给我看一个例子,或者一段可以帮助我入门的代码吗?这个表格有点具体,它不需要任何SQL请求什么的,我只需要收集数据并组装它。
  • 如果表单字段数据和预期数据相同(因此 1=1 而不是 1 = "yes"),您只需设置 $_SESSION = $_POST ... 但如您所见,这没那么容易。所以你需要编写某种表单处理程序,获取和设置你的数据。
  • 谢谢!我想出了一个解决方案(见编辑),但仍然有一个我无法弄清楚的问题。有什么提示吗?
【解决方案2】:

djot 是对的,您需要一个 > 和 > 按钮,您可以在功能上做的是,如果单击后退按钮,则将页面/表单的值作为隐藏输入字段传递并填充使用隐藏中的值的字段..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2020-09-27
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多