2009-10-15 132 views
1

我有一个需要几个步骤的注册表单。处理返回按钮

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

下一步,他们看到他们的应用程序的审查。

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

但是:

1)他可能会得到大约形式提交这些浏览器的警告消息的一个

2)如果他不回去,我要的文件上传模块不同的行为(也许显示他上传的图像,允许他更改他想要的图像)

如何在用户点击后退按钮时更好地控制用户看到的内容?

PS。我使用PHP(HTML,JavaScript,无论什么......)。 对于应用程序进程的其他部分,我使用ajax行为来保存他们实时执行的任何操作(检查框等)。所以我做了“继续”按钮只是一个常规链接。 然而,在这里,上传文件会使这个过程更加困难。

回答

0

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

+0

如果他们使用后退按钮,我不认为它会从服务器获取我的网页,它可能只是显示最后认为,浏览器得到的,对? – 2009-10-15 22:31:19

+0

@nute:在实践中,这在很大程度上取决于您使用的缓存控制标头。如果你告诉浏览器不要缓存页面,那么通常不会。 – Shog9 2009-10-15 22:41:38

2

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

如果您有兴趣,您可以看到an example here。在这种形式下,文件上传部分发生在“赞助细节”阶段。这些表单被设计为使用或不使用Javascript。没有任何东西会被发送或保存到最后一个阶段,因此可以随意播放 - 上传一些示例文件,然后退一步看看会发生什么。

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

1

1)他可能会得到大约形式提交这些浏览器的警告消息的一个

参见:Post/Redirect/Get

2)如果他不回去,我要的文件上传模块以表现不同(也许显示他上传的图像,允许他改变他想要的图像)

参见:da5id's answer

+0

+1元回答:) – da5id 2009-10-15 22:48:27

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); 
    }