24

こんにちは私はCodeIgniterでサイトを開発しています。

私のページの1つで、検索フォームの後にCodeIgniterのページネーションを使用しています。

この場合、渡された検索値をセッションに保存し$_POSTます。次のページをクリックしてさらに結果が得られた場合、検索は検索値をケッペするためです。

しかし、たとえばページを変更すると、インデックスに戻り、検索フォームページに戻った後、セッションはすでに作成されており、セッションの値を使用してクエリを実行します。ページを変更したときにセッションの値を破棄または設定解除するにはどうすればよいですか?これは可能ですか?

モデル関数に、セッション値が0とは異なり、存在するかどうかを確認します。trueの場合は、セッション値を使用してクエリを実行します。

これは私のコントローラーです(国はセッションに保存する値です)

public function region_list(){
        $this->load->model('backend/Nation_model');
        $this->load->library("pagination");

        if($_POST)
        {
            if (isset($_POST['ricerca'])){

                $nation = $this->input->post('nation');
                if(strlen($nation) > 0){
                   $this->session->set_userdata('nation',$nation);
                }

                $config = array();
                $config["base_url"] = base_url() . "index.php/backend/region/region_list";
                $config["total_rows"] = $this->Region_model->countRegionSearch();
                $config["per_page"] = 10;
                $config["uri_segment"] = 4;

                $this->pagination->initialize($config);

                $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
                $data["regionlist"] = $this->Region_model->regionSearch($config["per_page"], $page);
                $data["links"] = $this->pagination->create_links();
                $data["nationlist"] = $this->Nation_model->nationList();

                $this->load->view('backend/region_list_view',$data);
            }
        }
        else
        {
            $config = array();
            $config["base_url"] = base_url() . "index.php/backend/region/region_list";
            $config["total_rows"] = $this->Region_model->countRegion();
            $config["per_page"] = 10;
            $config["uri_segment"] = 4;

            $this->pagination->initialize($config);

            $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
            $data["links"] = $this->pagination->create_links();
            $data["regionlist"] = $this->Region_model->regionList($config["per_page"], $page);
            $data["nationlist"] = $this->Nation_model->nationList();

            $this->load->view('backend/region_list_view',$data);
        }
    }

これが私の検索モデルです。

function regionList($limit=null, $start=null) {
        $nation_id = $this->session->userdata('nation');
        if ($this->session->userdata('language')=="it")
            $this->db->select('region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name');
        if ($this->session->userdata('language')=="en")
            $this->db->select('region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name');
        $this->db->from('region');
        $this->db->join('nation', 'region.nation_id = nation.id','left');
        if((isset($nation_id))&&($nation_id!=0))
            $this->db->where('region.nation_id', $nation_id);
        $this->db->order_by("name", "asc");
        $this->db->limit($limit, $start);
        $query = $this->db->get();
        $region = array();
        foreach ($query->result() as $row)
            array_push($region, $row);

        return $region;     
    }

    function countRegion() {
        $nation_id = $this->session->userdata('nation');
        if ($this->session->userdata('language')=="it")
            $this->db->select('region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name');
        if ($this->session->userdata('language')=="en")
            $this->db->select('region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name');
        $this->db->from('region');
        $this->db->join('nation', 'region.nation_id = nation.id','left');
        if((isset($nation_id))&&($nation_id!=0))
            $this->db->where('region.nation_id', $nation_id);
        $this->db->order_by("name", "asc");
        $query = $this->db->get();
        return $query->num_rows();  
    }

    public function regionSearch($limit=null, $start=null){
        $nation_id = $this->session->userdata('nation');
        if ($this->session->userdata('language')=="it"){
            $this->db->select('*,region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name');
            if($this->input->post('name')!="")
                $this->db->where('region.name_it LIKE "%'.$this->input->post('name').'%"');
        }

        if ($this->session->userdata('language')=="en"){
            $this->db->select('*,region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name');
            if($this->input->post('name')!="")
                $this->db->where('region.name_en LIKE "%'.$this->input->post('name').'%"');
        }
        $this->db->from('region');
        $this->db->join('nation', 'region.nation_id = nation.id','left');
        if((isset($nation_id))&&($nation_id!=0))
            $this->db->where('region.nation_id', $nation_id);
        $this->db->order_by("name", "asc");
        $this->db->limit($limit, $start);
        $query = $this->db->get();
        $region = array();
        foreach ($query->result() as $row)
            array_push($region, $row);

        return $region; 
     }

     public function countRegionSearch(){
        $nation_id = $this->session->userdata('nation');
        if ($this->session->userdata('language')=="it"){
            $this->db->select('*,region.id, region.name_it as name,nation.id as nation_id, nation.name_it as nation_name');
            if($this->input->post('name')!="")
                $this->db->where('region.name_it LIKE "%'.$this->input->post('name').'%"');
        }

        if ($this->session->userdata('language')=="en"){
            $this->db->select('*,region.id, region.name_en as name,nation.id as nation_id, nation.name_en as nation_name');
            if($this->input->post('name')!="")
                $this->db->where('region.name_en LIKE "%'.$this->input->post('name').'%"');
        }
        $this->db->from('region');
        $this->db->join('nation', 'region.nation_id = nation.id','left');
        if((isset($nation_id))&&($nation_id!=0))
            $this->db->where('region.nation_id', $nation_id);
        $this->db->order_by("name", "asc");

        $query = $this->db->get();
        return $query->num_rows();      
     }
4

6 に答える 6

67

あなたの質問に答える:

セッションの値を破棄または設定解除するにはどうすればよいですか?

私はこれであなたを助けることができます:

$this->session->unset_userdata('some_name');

複数のデータの場合、次のことができます。

$array_items = array('username' => '', 'email' => '');

$this->session->unset_userdata($array_items);

セッションを破棄するには:

$this->session->sess_destroy();

次に、ページの変更部分 について(私の頭の中で)

ページネーターの構成「anchor_class」を、必要なクラス名に等しく設定できます。

その後、ユーザーセッションの設定を解除するコントローラー関数にヘッドアップを送信するそのクラスのjquery onclickで確認してください。

于 2013-01-11T03:17:32.647 に答える
7

set_userdata を使用する代わりに、set_flashdata を使用する必要があります。

CIユーザーガイドによると:

CodeIgniter は、「flashdata」、つまり次のサーバー リクエストでのみ利用可能で、その後自動的にクリアされるセッション データをサポートします。これらは非常に便利で、通常は情報メッセージまたはステータス メッセージに使用されます (たとえば、「レコード 2 が削除されました」)。

http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

于 2013-01-11T01:42:36.217 に答える
4
$session_data = array('username' =>"shashikant");
$this->session->set_userdata('logged_in', $session_data);

$this->session->unset_userdata('logged_in');
于 2016-07-19T11:39:02.383 に答える
2
$this->session->unset_userdata('session_value');
于 2017-10-18T12:06:01.180 に答える