0

codeigniterで管理セクションを設定するのに問題があります。

コントローラフォルダにfam_Adminという新しいフォルダを追加しました。

したがって、構造は次のようになります。


-コントローラー--->fam_admin ----
>-login.php

ルート.phpに次のコードを追加しました: $route['fam_admin'] = "fam_admin/login";

<?php
class Login extends CI_Controller {
  public function index() {
    //$login['main_content'] = '/fam_admin/login';
    //$this -> load -> view('fam_admin/includes/template', $login);
    $this -> load -> view('fam_admin/login');
  }
  public function validate_login() {
    $username = $this -> input -> post('username');
    $password = $this -> input -> post('password');
    $this -> load -> library('form_validation');
    $this -> form_validation -> set_rules('username', 'username', 'trim|required');
    $this -> form_validation -> set_rules('password', 'password', 'trim|required|callback_credential_check');
    if ($this -> form_validation -> run() == FALSE) {
      $this -> load -> view('fam_admin/login');
    }
  }
  public function credential_check() {
    //Field validation succeeded.&nbsp; Validate against database
    $username = $this -> input -> post('username');
    $password = $this -> input -> post('password');
    $this -> load -> model('fam_admin/admin');
    //query the database
    $query = $this -> admin -> check_login($username, $password);
    if (!$query) {
      $this -> form_validation -> set_message('login_check', 'Invalid username or password');
      return false;
      $this -> index();
    } else {
      $data = array(
        'username' => $this -> input -> post('username'),
        'is_logged_in' => true
      );
      $this -> session -> set_userdata($data);
      //redirect('fam_admin/main_section');
      redirect('site/logged_in');
    }
  }
}
?>

上記はlogin.phpのコードですが、ログインクレデンシャルが検証されると、GoogleChromeで次のエラーが発生します。誤ったクレデンシャルを入力して試すことができます。エラーが発生し、同じログインフォームが読み込まれるはずです。

http://www.famtripsandinspectionvisits.com/index.php/fam_admin/login/validate_loginの取得中にWebサイトでエラーが発生しました。メンテナンスのためにダウンしているか、正しく構成されていない可能性があります。

4

1 に答える 1

1

一つには、これは問題です:

if ( ! $query) {
    // ...
    return false;
    $this -> index();
}

return何かができたら、それだけです-残りのコードは実行されません-したがって、indexメソッドは呼び出されず、出力はまったくありません。

...しかし、データ検証を処理するだけの関数にビューをロードするべきではありません。

私は物事を少し再配置します、これにあなたのコントローラーを単純化してみてください:

class Login extends CI_Controller {

    public function index()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'username', 'trim|required');
        $this->form_validation->set_rules('password', 'password', 'trim|required');
        if ($this->form_validation->run())
        {
            $this->load->model('fam_admin/admin');
            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $query = $this->admin->check_login($username, $password);
            if ($query)
            {
                $data = array(
                    'username' => $this->input->post('username'),
                    'is_logged_in' => true
                );
                $this->session->set_userdata($data);
                redirect('site/logged_in');
            }
            else
            {
                $this->form_validation->set_message('login_check', 'Invalid username or password');
            }
        }
        $this->load->view('fam_admin/login');
    }

}
于 2012-11-08T12:28:30.820 に答える