2017-05-17 7 views
0

Codeigniterを習得しようとしています。次のコードがあります。「ページが正しくリダイレ​​クトされていません...」というエラーが表示されます。ページが正しくリダイレ​​クトされていないCodeigniterエラー

public function user_login_process() { 

    $this->form_validation->set_rules('username', 'Username', 'trim|required'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required'); 
    $classes['class'] = $this->show_classes(); 
    $this->load->view('header'); 
    if ($this->form_validation->run() == FALSE) { 
     if (isset($this->session->userdata['logged_in'])) { 
      $this->load->view('admin_page', $classes); 
     } else { 
      $this->load->view('login_form'); 
     } 
    } else { 
     $data = array(
      'username' => $this->input->post('username'), 
      'password' => $this->input->post('password') 
     ); 
     $result = $this->login_database->login($data); 
     if ($result == TRUE) { 
      $username = $this->input->post('username'); 
      $result = $this->login_database->read_user_information($username); 
      if ($result != false) { 
       $session_data = array(
        'username' => $result[0]->user_name, 
        'email' => $result[0]->user_email, 
       ); 
       $this->session->set_userdata('logged_in', $session_data); 
       $this->load->view('admin_page', $classes); 
      } 
     } else { 
      $data = array(
       'error_message' => 'Invalid Username or Password' 
      ); 
      $this->load->view('login_form', $data); 
     } 
    } 
} 

私は、ヘッダーなしで、適​​切にページがロードに

$this->load->view('header'); 

この行をコメントアウトした場合。しかし、私はヘッダーを読み込もうとするたびに失敗します。問題は、他のページに正しく読み込まれていると私は信じているヘッダーではありません。

一部のコンテキスト:管理パネルを作成しようとしていますが、ログインページと登録ページと管理ページがあります。このコードセグメントは、ログインに成功した後の管理ページの読み込みを処理します。ログインページと登録ページの両方で、ヘッダーファイルが適切に読み込まれます。

私はいくつかの関連する質問を見ましたが、実際の問題が何であるかわからないので、この問題に対する正しい解決策を見つけることができませんでした。 何か助けていただければ幸いです。

+0

各ページがリダイレクトされてリダイレクトループが発生する可能性はありますか? – Tom

+0

私は一歩一歩試してみましょう: '$ this-> session-> userdata ['logged_in']'プロセスフォームで利用可能なセッションセットを持つユーザは必要ありません。 'login_form'でそれをチェックし、ユーザセッションが設定されている場合はそれに応じてリダイレクトします。ログインしているユーザー(セッションが既に設定されているI.E.ユーザー)がログインページへのアクセスを許可しないでください。 – Tpojka

答えて

0

コードでは、リダイレクトとビューファイルの読み込みがロードされていません。以下では、必要に応じて私のコメントとともに正しいコードを書いています。

if (isset($this->session->userdata['logged_in'])) { 
     redirect(base_url('YOUR_AUTHORIZED_CONTROLLER_OR_FUNCTION')); 
    } 

    $this->form_validation->set_rules('username', 'Username', 'trim|required'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required'); 
    $classes['class'] = $this->show_classes(); 

    $this->load->view('header'); 
    if ($this->form_validation->run() == FALSE) { 
     // $this->session->userdata['logged_in'] this should not be used here. Instead you should validate your controller or methods for authorized area for logged in users 
     $this->load->view('login_form'); 
    } else { 
     $data = array(
      'username' => $this->input->post('username'), 
      'password' => $this->input->post('password') 
     ); 
     $result = $this->login_database->login($data); 
     if ($result == TRUE) { 
      $username = $this->input->post('username'); 
      $result = $this->login_database->read_user_information($username); 
      if ($result != false) { 
       $session_data = array(
        'username' => $result[0]->user_name, 
        'email' => $result[0]->user_email, 
       ); 
       $this->session->set_userdata('logged_in', $session_data); 

       // Commenting below line as you should redirect to your default authorised URL 
       //$this->load->view('admin_page', $classes); 
       $this->session->set_flashdata('success', 'Great! You have successfully logged in.'); 
       redirect(base_url('YOUR_AUTHORIZED_DEFAULT_CONTROLLER_OR_FUNCTION')); 
      } 
     } else { 
      $this->session->set_flashdata('error', 'Invalid Username or Password'); 

      // Redirect to login method and controller 
      redirect(base_url('LOGIN_ACTION')); 
     } 
    } 

ビュー:エラー/成功のメッセージを表示する行の下ビューの使用では

<?php echo $this->session->flashdata('error'); ?> 
<?php echo $this->session->flashdata('success'); ?> 

は、あなたが任意の明確化が必要な場合は、私に教えてください:ヘッダビューがロードされた直後に、このビューをその中のすべてのメッセージを表示するための新しいビューファイルを作成し、ロードするために良いだろう。

+0

ありがとう、これは私の問題を解決しました、私は今これの背後にある概念を正しく理解しようとします。コメントしてくれた皆さん、ありがとうございました。 –

+0

あなたの答えがあればあなたの質問に答えを記入する必要があります –

関連する問題