2016-06-16 51 views
0

我有這個codeigniter項目正在處理中。我正在顯示一些問題,我想使用分頁來批量顯示問題。當第一次加載(我的意思是在第一頁)時,一切工作正常,但當我導航到下一頁時,它無法工作。所以我意識到表單輸入值不會保留在後續頁面上,所以我決定使用會話來保存這些表單值,但它仍未被保留。我的控制器:未在會話中保留的表格輸入值

public function displayQuestions() 
{ 
    $sessData = [ 
     'classLevel' => $this->input->post('class_level'), 
     'subject' => $this->input->post('subject') 
    ]; 

    $this->session->set_userdata($sessData); 

    $config = array(); 

    $page = (($this->uri->segment(3)) ? $this->uri->segment(3) : 0); 

    $config["base_url"]  = base_url().'questions/displayQuestions'; 
    $config["total_rows"] = 20; 
    $config["per_page"]  = 5; 
    $config["uri_segment"] = 3; 

    $this->pagination->initialize($config); 
    $data["links"] = $this->pagination->create_links(); 

    // print_r($this->session->classLevel); exit; 

    $data['questions'] = $this->questions_model->selectQuestions($this->session->classLevel, $this->session->subject, $config["per_page"], $page); 

    // $this->load->view('layouts/header'); 
    $this->load->view('users/questions', $data); 
    // $this->load->view('layouts/sidebar'); 
    // $this->load->view('layouts/footer'); 
} 

注意:我使用表單輸入值來查詢數據庫以顯示問題。我的模型:

public function selectQuestions($classLevel, $subject, $limit, $start) 
{ 
    $questions = $this->db->where('class_level', $classLevel) 
        ->where('subj_code', $subject) 
        // ->order_by('id', 'RANDOM') 
        ->limit($limit, $start) 
        ->get('questions'); 
    // $questions = $this->db->limit($limit, $start) 
    //    ->get('questions'); 

    if ($questions->num_rows() > 0) { 
     return $questions->result_array(); 
     // print_r($questions->result_array()); 
    } 

    return false; 
} 
+0

我猜你每次調用displayQuestions方法時都會重置會話數據。如果發佈數據爲空,會話會再次歸零? – jtheman

+0

沒有我不重置會話數據。會話仍然保存一些以前的數據傳遞給它。 – ammezie

+0

但''classLevel'=> $ this-> input-> post('class_level'),'將關鍵'classLevel'的會話數據設置爲發佈數據,但是如果發佈數據爲空,您將重置會話? – jtheman

回答

1

我猜你是清除您的會話數據的全部或部分,當你瀏覽到下一個頁面(不包含任何POST數據)。嘗試改變部分

$sessData = [ 
    'classLevel' => $this->input->post('class_level'), 
    'subject' => $this->input->post('subject') 
]; 
$this->session->set_userdata($sessData); 

要:

if ($this->input->post('class_level') && $this->input->post('subject')): 
    $sessData = [ 
     'classLevel' => $this->input->post('class_level'), 
     'subject' => $this->input->post('subject') 
    ]; 
    $this->session->set_userdata($sessData); 
endif; 

也就是說你只有在數據以前發佈的設置會話。

+0

謝謝,這解決了它。 – ammezie