我有使用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
。用户不会注意到这一步。 - 现在,如果用户按下后退键。不会有错误,因为前一页在技术上没有数据发布到/从它。