使用POST编码多级表单并使后退按钮工作


codeigniter multistage forms using POST and making the backbutton work

我有使用POST从一个页面到下一个页面的编码器表单。每个阶段使用用户提交数据。I read in:

https://stackoverflow.com/a/13559805/1021360

我需要使用get-post-get方法(GPG)来允许后退按钮工作。

我有很多数据在会话变量被跟踪,会话被设置为过期只有当你回到主页或1小时后,所以后退按钮应该工作。这也是存储所有核心数据的地方。(POST并不是所有相关的,因为返回页面可以从会话中读取所有的内容,假设我知道如何使返回按钮缓存这样做)。

当前backbutton导致"此文档不再可用"错误页。

我的视图有一个窗体,里面有一个调用名为"/nextquestion"的函数。

此函数进行表单验证,将表单值存储到CI_session,然后在表单通过验证检查时呈现下一页。

我不确定如何将其传递给第三个"文件"(因为codeigniter使用函数调用,而不是php文件),然后从中读取它…?

所有我想实现的是后退按钮工作,因为它是预期的:它应该显示你的前一个页面,它是呈现的方式。

任何提示或帮助如何让浏览器缓存工作良好的codeigniter的表单提交将是最受欢迎的!

谢谢。

我通常的做法是将表单提交到同一页面,然后检查$_POST数组是否存在。如果它不存在,那么我假设页面还没有提交,并检查会话中可能存在的任何数据。

它的代码看起来像这样:

// Check if we have any post data (form was submitted or not)
if(count($_POST) > 0) {
    // Save post array to the session
    $this->session->set_userdata('post_data', $_POST );
    // Redirect to the same page (REMOVES POST FROM HTTP HEADERS)
    redirect('/form/page1','location');
} else {
    // There is no $_POST array, but we have the POST data in session 
    // I.E. RETURNING TO FORM VIA BACK BUTTON
    if($this->session->userdata('post_data')) {
        // Set POST array from session data
        $_POST = $this->session->userdata('post_data');
        // Clear the session
        $this->session->unset_userdata('post_data');
    }
}

// Your other code, validation rules, etc, etc
// VALIDATION FAILS - Validation fails
if ($this->form_validation->run() == FALSE) {
    // Load view
}
// VALIDATION SUCCEEDS - Proceed to confirmation  
else {
    redirect('/form/page2', 'location', 303);
}

假设提交的数据通过了您的验证规则,上面的一般流程将是:

  • 用户浏览/form/page1,填写并提交表单。
  • 表单被发送到自身,$_POST数组被保存到会话
  • 用户随后被重定向到相同的页面/form/page1,此时$_POST数组为空,并且POST头已从HTTP请求中删除。
  • $_POST数组从会话数据中恢复,表单重定向到/form/page2。用户不会注意到这一步。
  • 现在,如果用户按下后退键。不会有错误,因为前一页在技术上没有数据发布到/从它。