CodeIgniter中的登录表单在每次给出错误凭据时调用URL中的控制器


Login form in CodeIgniter calls the controller in URL each time wrong credentials are given

我正在使用CodeIgniter创建一个登录表单。当提供正确的凭据时,登录功能可以正常工作。当给出错误的凭据时,它将显示一条自定义消息。现在的问题是,如果我输入错误的凭据一次,url更改为某一个。虽然这显示了相同的登录表单,但此后即使使用正确的凭据也无法登录。

整个场景是:

  • 点击登录链接,显示登录表单,url为http://mydomain.com/myproject/c_login
  • 如果我输入了错误的凭据,则使用index()内部发送的参数显示一条消息,然后显示相同的登录表单,但这次使用url http://mydomain.com/myproject/c_login/c_fun_login_process
  • 如果我再次输入错误的凭据,它会变成http://mydomain.com/myproject/c_login/c_login/c_fun_login_process
  • 意思是,每次我输入错误的用户名和密码组合,它一次又一次地调用控制器,url被添加到c_login控制器。

如何解决这个问题?

我有这个登录功能的控制器代码

<?php
class C_login extends CI_Controller{
function __construct(){
    parent::__construct();
}
public function index($msg = NULL){
    $data['msg'] = $msg;
    $this->load->view('v_login', $data);
}
public function c_fun_login_process(){
    $this->load->model('m_login_model');
    $result = $this->m_login_model->m_fun_login_validate();
    if(! $result){
        $msg = '<font color=red>Invalid username and/or password.</font><br />';
        $this->index($msg);
    }else{
        redirect('c_view_page/c_fun_dashboard');
    }        
}

这是视图文件(v_login)

中的登录表单
  <form method="post" action="<?php '.base_url().'?>c_login/c_fun_login_process" name="process">
             <?php
            if (!is_null($msg))
                echo $msg;
            ?>

这显然是一个小问题,任何有相当不错的CodeIgniter知识的人都可以解决。

为安全起见,使用本机帮助器构建表单:

<?php echo form_open('c_login/c_fun_login_process');?>

或者使用任何其他url函数(来自url帮助器,请确保事先加载了它):

<form method="post" action="<?php echo site_url('c_login/c_fun_login_process');?>" name="process">

这样你就不必担心建立错误的url和面对这样的问题