다음과 같은 컨트롤러가 있는데, 양식 유효성 검사와 오류 표시 측면에서 잘 작동합니다.CodeIgniter 폼 유효성 검사 오류 리디렉션
사용자가에서 로그인을 시도 :이 오류 (예상대로) 제대로 로그인보기를로드하고 표시, 사용자가 잘못된 자격 증명을 입력 할 때, 그러나 http://mydomain.com/index.php/login
제대로 "잘못된 로그인"하지만, URI 브라우저 창에 다음과 같이 표시됩니다.
http://mydomain.com/index.php/verify_login (위와 반대).
어떻게 실패한 유효성 검사 후 리디렉션하려면 그냥 ".../index.php에/로그인"여기
문제의 코드입니다 :<?
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;
}
}
}
UPDATE : Cyrode의 솔루션 수정 그 문제는 이제 view를로드 할 때 check_database() 함수에서 "Invalid Login"오류 메시지 (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;
}
}
}
안녕하세요, Cryode,이 문제가 해결되었지만보기를로드 할 때 check_database() 함수에서 '잘못된 로그인'오류 메시지가 표시되지 않습니다. 어떤 아이디어? – Dodinas
왜 그 기능이 멈추었을지 모르겠다.이 모든 것은 두 가지를 사용하는 대신 같은 코드를 하나의 방법으로 통합하는 것이다. 질문에 현재 코드를 추가 할 수 있습니다. –
xss 및 해시에 대한 의견을 보내 주셔서 감사합니다. 그렇게 할거야. – Dodinas