0

リストに検索を追加しようとしています。リストには codeigniter とページネーションを使用しています。検索は、サンプル id としてのデータベース検索です。検索は、ページネーションの最初のページで完璧に機能します。しかし、他のページになると機能しません。

これは私のコントローラーのコードです。

  $this->clear_sample_id_catche();
  $out=$this->Mgeneral->listData();
  $per_page = 10;
  $total = $this->Mgeneral->countData();
  $data = $this->Mgeneral->listData($per_page, $this->uri->segment(3));

   $base_url = site_url('general/listData');

   $config['base_url'] = $base_url;
   $config['total_rows'] = $total;
   $config['per_page'] = $per_page;
   $config['uri_segment'] = '3';

  $this->pagination->initialize($config); 
  $data=array('body'=>'list','out'=>$data);

  $this->load->view('template',$data);

ビューで検索するフォームを追加しました。誰でも問題が何であるかを提案できますか?? 前もって感謝します。

4

1 に答える 1

4

ページネーションの検索クエリを渡すのを忘れている必要があります。ページ番号がクエリ文字列の3番目のセグメントであることがわかると、検索フォームはPOSTユーザーによって送信されたときにアクションを実行すると思います。ユーザーがフォームを送信した後は、もちろん機能します。彼らはリクエストを行ったばかりであり、または同様のものを使用してPOSTから検索クエリをフェッチするためです。しかし、ページ番号のリンク(リクエスト)をクリックして別のページに移動しようとすると、スーパーグローバル配列が空であるため、検索は失敗します。$_POST$this->input->post('user_input')GET$_POST

この問題を解決する解決策は、からの検索クエリを使用する代わりに、ユーザー入力に基づいてセッション値を設定し(CodeIgniterのセッションクラスを使用することをお勧めします)、代わり$_POSTにセッションに保存されているものを使用することです。

これを行う別の方法は、検索結果用に別のページを作成することです(現在、フォームと同じページにある、つまり同じコントローラー関数にあると仮定します)。次に、検索フォームGETに独自のコントローラー関数への要求を実行させます。この関数は、検索クエリをでエンコードし、エンコードされた文字列の(等号)を。base64に置き換えます。その後、URLクエリ文字列の3番目のセグメントとしてエンコードされた検索クエリを渡している間にユーザーを検索結果ページにリダイレクトします(ページ番号は4番目になります)。そして、その関数で、に戻って検索クエリを取得し、それを検索結果を生成する関数に渡すために使用します。=..=base64_decode()

もちろん、同じ結果を達成する方法は他にもたくさんあります。ただググってください。

于 2012-04-16T07:33:48.367 に答える