1

我有使用 POST 从一页转到下一页的 codeigniter 表单。每个阶段都使用用户提交数据。我读到:

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

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

我在正在跟踪的会话变量中有很多数据,会话设置为仅在您返回主页或 1 小时后过期,因此后退按钮应该可以使用。这也是存储所有核心数据的地方。(POST 并不是那么相关,因为后台页面可以从会话中全部读回,假设我知道如何使后退按钮缓存这样做)。

当前后退按钮会导致:“此文档不再可用。” 错误页面。

我的视图有一个表单,其中调用了一个名为“/nextquestion”的函数。

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

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

我想要实现的是后退按钮按预期工作:它应该向您显示上一页,它的呈现方式。

任何有关如何使浏览器缓存与 codeigniter 的表单提交工作良好的提示或帮助都将受到欢迎!

谢谢。

4

1 回答 1

1

我通常这样做的方式是将表单提交到同一页面,然后我检查 $_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、填写并提交表格。
  • 表单被 POSTED 到自身,$_POST 数组被保存到会话中
  • 然后用户被重定向到同一页面,/form/page1在该页面上 $_POST 数组为空,并且 POST 标头已从 HTTP 请求中删除。
  • 然后从会话数据中恢复 $_POST 数组,并且表单重定向到/form/page2. 用户不会注意到这一步。
  • 现在,如果用户按下后退按钮。不会有错误,因为前一页在技术上没有发布到/从它发布的数据。
于 2013-03-25T04:44:24.130 回答