【问题标题】:Multiple step form submission, get rid of 'Form resubmission' dialogue of the browser多步表单提交,摆脱浏览器的“表单重新提交”对话框
【发布时间】:2017-08-21 01:13:12
【问题描述】:

假设我有 2 个表格,将逐步提交。在第一页,我有

第 1 页:

<form action='page2.php' method='post'>
    <input type='email' name='email'>
    <input type='submit' name='submit' value='Submit'>
</form>

Page2 :在此页面中,我将检查电子邮件是否在我的网站中可用。如果可用,则会显示电子邮件并要求用户提供他/她的电话号码。

if(isset($_POST['submit'])){

    echo $_POST['email'];
    ?>

<form action='page3.php' method='post'>
    <input type='number' name='number'>
    <input type='submit' name='submit' value='Submit'>
</form>

    <?php

}

Page3 : 当给出电话号码时,将在此处验证并将用户重定向到“somepage.html”。

现在,我的问题是,我会处理重新提交表单的问题。但我不希望用户每次刷新 Page2 时都在浏览器中看到“重新提交表单”对话框。这个过程必须分两步完成。在 Page2 中,必须在 Page1 中显示已发布的电子邮件。这整个过程如何完成?如果代码从头到尾(从第1页到第3页)编写,对我会有帮助。

【问题讨论】:

  • 我从来没有手动做过,通常框架会帮你做。如果我没记错的话,您提交的数据会保存在会话中而不是 $_POST (刷新页面不会要求您以这种方式重新提交)stackoverflow.com/questions/14465464/…
  • 如果我给出错误的指示,请纠正我,这可能存在安全漏洞
  • 如果您的唯一目标是在客户给您他的电子邮件地址的条件下询问电话号码,那么不需要两个表格或两个页面。
  • 为什么不用ajax?

标签: php html


【解决方案1】:

试试这个:

Page1.php

<?php
    session_start();
    if(isset($_POST['submit'])){
        $_SESSION['email'] = $_POST['email'];
        header('Location:page2.php');
        exit;
    }
?>

<form action='' method='post'>
    <input type='email' name='email'>
    <input type='submit' name='submit' value='Submit'>
</form>

这应该删除“第 2 页”中的“Form Resubmission”,同时保留电子邮件

【讨论】:

  • 并在查询中检查电子邮件是否存在使用$_SESSION['email'] 而不是$_POST['email']
  • @JapanGuy 我没有检查任何东西,我只是解决了“重新提交表单”问题
  • 哦,是的,我在评论中指的是 OP。但是我能问你如何让它更安全吗?想亲自了解。在转义特殊字符、htmlentities、引号和其他内容之后,在您完成所有检查之后,只是分配 $_SESSION["var"]=$_POST["var"] 足够安全吗?
  • @JapanGuy 哦,对不起,我以为你指的是我。为了会话的安全,请检查here。并尽量不要将重要数据存储到会话中
猜你喜欢
  • 1970-01-01
  • 2018-01-20
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2015-07-01
  • 2014-11-09
相关资源
最近更新 更多