2

次のコントローラーがあります。これは、フォームの検証とエラーの表示に関しては正常に機能します。

ユーザーはhttp://mydomain.com/index.php/loginからログインを試みます。

ただし、ユーザーが間違った資格情報を入力すると、ログイン ビューが適切に読み込まれ (本来あるべき)、エラー "Invalid Login" が適切に表示されますが、ブラウザー ウィンドウの URI には次のように表示されます。

http://mydomain.com/index.php/verify_login (上記のものとは対照的に)。

検証が失敗した後に「.../index.php/login」にリダイレクトするにはどうすればよいですか

問題のコードは次のとおりです。

<?
   class Login extends CI_Controller {

public function index()
{
    $this->load->helper(array('form'));
    $this->load->helper('url');
    $this->load->view('login_page');
}

function verify_login() 
{

$this->load->model('login_model','',TRUE);
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<label class="error">', '</label>');
$this->form_validation->set_rules('username', 'Login', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

if($this->form_validation->run() == FALSE)
{
 //Field validation failed. User redirected to login page
 $this->index();
}
else
{
 //Go to private area
 redirect('private_area', 'refresh');
 }

}

function check_database($password)
 {
  //Field validation succeeded. Validate against database
  $username = $this->input->post('username');

  //query the database
  $result = $this->login_model->login($username, $password);

  if($result)
   {
   $sess_array = array();
   foreach($result as $row)
   {
     $sess_array = array(
     'id' => $row->id,
     'username' => $row->username
   );
   $this->session->set_userdata('logged_in', $sess_array);
 }
 return TRUE;
}
 else
 {
 $this->form_validation->set_message('check_database', '<div class="alert alert-error">Invalid username or password</div>');
 return false;
 }
 }
}

更新: Cyrode のソリューションはその問題を修正しましたが、ビューの読み込み時に check_database() 関数から「無効なログイン」エラー メッセージ (set_message) が表示されなくなりました。ここで私が間違っていることはありますか?

更新 2: どうぞ:

  class Login extends CI_Controller {

public function index()
{
    $this->load->helper(array('form'));
    $this->load->helper('url');
    $this->load->view('login_page');

    $this->load->model('login_model','',TRUE);
    $this->load->library('form_validation');
    $this->form_validation->set_error_delimiters('<label class="error">', '</label>');
    $this->form_validation->set_rules('username', 'Login', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

 if($this->form_validation->run() == FALSE)
  {
   $this->load->view('login_page');
  }
 else
 {
 //Go to private area
 redirect('private_area', 'refresh');
 }
}

 function check_database($password)
  {
   //Field validation succeeded. Validate against database
   $username = $this->input->post('username');

    //query the database
    $result = $this->login_model->login($username, $password);

   if($result)
   {
    $sess_array = array();
     foreach($result as $row)
    {
     $sess_array = array(
     'id' => $row->id,
     'username' => $row->username
    );
    $this->session->set_userdata('logged_in', $sess_array);
  }
  return TRUE;
 }
else
{
  $this->form_validation->set_message('check_database', '<div class="alert alert-error">Invalid username or password</div>');
 return false;
   }
 }
}
4

1 に答える 1