处理后退按钮

时间:2009-10-15 22:24:15

标签: php javascript forms

我有一个注册表单需要几个步骤。

在其中一个步骤中,他们填写了一些信息,并选择了一些要上传的图片。

下一步,他们会看到对其申请的审核。

接下来可能发生的是,如果用户看到他不喜欢的内容,他会点击后退按钮来更改表单上的内容。

然而:

1)他可能会收到有关表单提交的浏览器警告消息之一

2)如果他回去了,我希望文件上传模块的行为不同(可能会显示他上传的图片,允许他更改他想要的图片)

如果他点击后退按钮,我怎样才能更好地控制用户看到的内容?

PS。我正在使用PHP(html,javascript,等等......)。 对于应用程序进程的其他部分,我使用ajax行为来实时保存它们所做的任何事情(复选框等等)。所以我把“继续”按钮作为常规链接。 但是,上传文件会使这个过程变得更加困难。

4 个答案:

答案 0 :(得分:2)

你几乎已经回答了自己的问题,因为你认识到你需要对表单的每个阶段进行编码,以便它知道“状态”。我做了一些非常相似的声音形式,其中我跟踪会话变量中的每个阶段,只在“确认您的详细信息”阶段之后提交数据(如在db中)。

如果您有兴趣,可以查看an example here。在此表单中,文件上传部分发生在“赞助详细信息”阶段。这些表单旨在使用或不使用Javascript。在最后阶段之前没有任何东西被发送或保存,所以随意玩 - 上传一些示例文件,然后退一步看看会发生什么。

P.S。使用会话变量跟踪每个阶段的一个优点(我发现)它使得保存和重新构建表单变得非常简单,因为您需要做的就是序列化$ _SESSION数组并将其保存到数据库字段。

答案 1 :(得分:1)

  

1)他可能会收到有关表单提交的浏览器警告消息之一

请参阅:Post/Redirect/Get

  

2)如果他回去了,我希望文件上传模块的行为不同(可能会显示他上传的图片,允许他更改他想要的图片)

请参阅:da5id's answer

答案 2 :(得分:1)

关于第1点):使用Post/Redirect/Get模式。这种模式很简单,但却很有效。在用户POST表单后,使用GET请求将它们重定向到下一页。

像这样(未经测试):

<?php

    // let's say you determine the current step in the wizard with a GET parameter
    $step = isset( $_GET[ 'step' ] ) ? intval( $_GET[ 'step' ] ) : 1;

    if( 'post' == strtolower( $_SERVER[ 'REQUEST_METHOD' ] ) )
    {
        // we have a POSTed form submission

        /*
            handle form submission
        */

        if( $success )
        {
            // successful form submission, so increment step
            $step += 1;
        }
        else
        {
            // NON-successful form submission
            /*
                maybe save some error messages in a SESSION
            */
        }

        /*
            complete the POST/REDIRECT/GET pattern

            redirect to the desired step in the wizard process with a GET request,
            this prevents re-submission by browser refreshes and backbuttons
        */
        header( 'Location: http://example.com/yourformwizard?step=' . $step );
    }

答案 3 :(得分:0)

我不确定如果页面已发布到浏览器警告,您可以做很多事情。我会为处理状态的用户提供单独的后退按钮(向导样式)。如果他们确实使用了浏览器的后退按钮并忽略了浏览器警告,那么您可能会使用会话变量或cookie等跟踪用户的上次已知状态。

相关问题