我正在使用Post-Redirect-Get模式来避免在POST提交后刷新页面时出现问题。重定向会清除所有已发送的POST数据,这意味着我无法再使用set_value()
及相关函数填充字段。
为了更清楚,这是它的工作原理。
帮助pleeeease? :)
答案 0 :(得分:6)
将发布数据设置为flashdata(会话类的一部分):
$this->session->set_flashdata('post', $this->input->post());
然后得到它:
$this->session->flashdata('post');
您也可以延长数据的持续时间:
$this->session->keep_flashdata('post');
更多信息:http://codeigniter.com/user_guide/libraries/sessions.html
答案 1 :(得分:0)
一种方法是在重定向之前将POST数据存储在会话中,例如如果您的表单是“注册”,那么您可以这样做:
session_start();
$_SESSION['register_form_data'] = array();
foreach($_POST as $key=>$value)
{
$_SESSION['register_form_data'][$key] = $value;
}
现在表单数据将在表单页面上提供。您还可以创建set_value_from_session()
辅助函数来重新填充字段。
答案 2 :(得分:0)
您可以扩展CI_Form_validation并添加(或将其添加到CI_Form_validation构造中)
$CI =& get_instance();
$CI->load->library('session');
if (count($_POST) > 0 OR count($_FILES) > 0)
{
$CI->session->set_flashdata('prg', array(
'date' => time()+ini_get('max_execution_time'),
'post' => $_POST,
'files' => $_FILES
));
redirect(current_url(), 'location', 302);
}
else{
$prg = $CI->session->flashdata('prg');
if($prg==TRUE){
if($prg['date']>time()){
$_POST = $prg['post'];
$_FILES = $prg['files'];
}
}
}
到构造。 这将解决您的问题 但是,如果在系统中提交表单后有任何redirect()函数,那么将从上面的重定向覆盖这些重定向。所以请注意。 (解决方法 - 您可以在不存在redirect()的每个函数中调用它)