【问题标题】:Interrupting $_POST to Preview Input中断 $_POST 以预览输入
【发布时间】:2011-06-29 23:00:13
【问题描述】:

我已经建立了一个数据库,并通过 PHP 中的 $_POST 将表单数据提交给它,我还设置了我的页面并开始工作,它从数据库中提取字段并显示它们。不是我知道的火箭科学。

但是我现在想做的是在提交表单和插入数据库之间放置一个页面,让用户有机会检查他们的条目。

我已经创建了这个页面并使用 $_POST 数据来显示表单中的数据(因为它还没有被输入到数据库中),但是我想知道如果用户批准提交,我会如何将其插入数据库。 (我尝试在按下提交按钮时从 $_POST 数据运行 INSERT 查询,但是因为(我假设)ivew 中断了原始表单提交和 INSERT 查询之间的流程,我得到的只是无法识别的错误列表变量。

所以我有这个过程:

form.php /user 使用 $_POST 输入信息

preview.php /user 使用 $_POST 预览信息并且会话代码开始(如下)

submit.php /MySql 查询运行但返回未定义索引的所有错误

这是我的会话开始代码:

session_start();
if (isset($_POST['preview'])) { 
    $_SESSION['company_name'] = $_POST['company_name'];
    etc etc - remaining form field names
} 

【问题讨论】:

    标签: php mysql webforms


    【解决方案1】:

    POST 数据不会自动传递到其他页面。将提交的数据保存在会话中,并在确认页面之后从那里读取,或者使用<input type="hidden"> 元素将所有数据重新插入页面,以便它们可以作为 POST 重新提交。

    使用会话的过程的一个非常简单的说明:

    form.php

    <form action="confirm.php" ...>
        ...
    </form>
    

    确认.php

    <?php
    session_start();
    $_SESSION['data'] = $_POST;
    ?>
    
    Please confirm:
    
    Name: <?php echo htmlspecialchars($_POST['name']); ?>
    ...
    
    <a href="save.php">Confirm</a>
    

    保存.php

    <?php
    session_start();
    $data = $_SESSION['data'];
    
    // save $data to database
    

    【讨论】:

    • 您好,谢谢。所以我从一个会话开始我的表单提交,并让该会话保持打开状态,直到他们批准条目,但我将如何去“保存”一路上提交的数据?运行会话会自动解决这个问题吗?
    • 会话只是临时存储数据的地方。在初始 POST 提交后,您将数据写入会话并向用户显示“确认页面”。如果用户确认,您从会话中读取数据并将其写入数据库。就是这样。
    • 我刚刚尝试在我的表单页面 session_start() 上启动这样的会话; if (isset($_POST['preview'])) { $_SESSION['company_name'] = $_POST['company_name'];等等所有 $_POST 变量名称,但是当我在预览后提交时,我仍然收到未定义索引错误。我做错了什么?
    【解决方案2】:

    你应该用 3 种模式来做

    • 显示
    • 验证
    • 插入

    快速简单的方法是使用 GET 参数或显示表单最后状态的隐藏字段。第一次显示它时,它设置为DISPLAY。表单提交,您的脚本查看字段,知道DISPLAY 之后是VERIFY,并呈现验证页面。用户提交,脚本查看字段,验证后知道您插入数据库,然后执行相关查询。

    不确定你之前是怎么做的,但我假设你正在重定向或只是让用户点击一个链接,这会丢失所有 $_POST 数据

    【讨论】:

    • 嗨,我尝试做的是,在预览页面上,让用户单击提交按钮,这会启动捕获所有帖子数据并运行 INSERT 查询的原始 php 文件。非常感谢您的回答,不确定我是否理解它,但我感谢您所花的时间。谢谢
    • 可以,但是表格是否显示在预览页面上?没有表单的提交按钮没有多大帮助
    • 哈,不,不是。它包含在表单操作标记中,但不是实际的表单。
    【解决方案3】:

    除非我误解了你在说/在做什么,否则我会做这样的事情:

    当用户单击“保存”(或其他)按钮时,劫持该单击事件并使用表单数据进行预览业务。当他们点击“确认”时,将数据发送到服务器并保存到数据库中。

    同样,我不能 100% 确定这是否可行,但也许这是一个开始的地方。

    祝你好运!

    【讨论】:

    • @inkeddm 嗨,这就是我目前正在做的,但它不起作用,因为我在原始表单提交和 INSERT 查询之间插入了一个页面
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多