Php 从URL Codeigniter验证表单隐藏控制器

Php 从URL Codeigniter验证表单隐藏控制器,php,codeigniter,Php,Codeigniter,我在尝试创建一个简单的登录系统时遇到了一个问题。这就是它的工作原理,说明了我的问题所在 登录页面包含一个简单的表单,并向控制器“验证登录”打开一个表单。此验证登录控制器执行一些基本表单验证,然后查询数据库以检查用户输入的凭据是否正确。提交此表单时,它会自动将用户定向到website.com/verify_login,而我希望它保持为website.com/login。我无法使用routes文件解决此问题,因为这会导致两个页面都重定向到同一页面。有人能解决这个问题吗?我正在使用Codeignite

我在尝试创建一个简单的登录系统时遇到了一个问题。这就是它的工作原理,说明了我的问题所在

登录页面包含一个简单的表单,并向控制器“验证登录”打开一个表单。此验证登录控制器执行一些基本表单验证,然后查询数据库以检查用户输入的凭据是否正确。提交此表单时,它会自动将用户定向到website.com/verify_login,而我希望它保持为website.com/login。我无法使用routes文件解决此问题,因为这会导致两个页面都重定向到同一页面。有人能解决这个问题吗?我正在使用Codeigniter框架

login.php

<div class="content-block">
<h1>Login</h1>
<div class="content-inner-block">
    <?php echo validation_errors(); ?>
    <?php echo form_open('Verify_login'); ?>
        <div class="login wrap">
            <input type="text" name="username" id="user" placeholder="Username">
            <input type="password" name="password" id="pass" placeholder="**********">
            <input type="submit" value="Log in">
        </div>
    <?php echo form_close("\n")?>
</div>
<?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Verify_login extends CI_Controller{

        public function index(){

            $this->load->model('User_model');

            $this->form_validation->set_rules('username', 'Username', 'required');
            $this->form_validation->set_rules('password', 'Password', 'required');

            if ($this->form_validation->run() == FALSE){
                $this->load->view('pages/login');
                 return false;
            }

            $result = $this->User_model->login($this->input->post('username'), $this->input->post('password'));
            if($result){
                echo 'loggedin';
            } else {
                echo 'wrong';
            }   

        }

    }
?>

登录

验证\u login.php

<div class="content-block">
<h1>Login</h1>
<div class="content-inner-block">
    <?php echo validation_errors(); ?>
    <?php echo form_open('Verify_login'); ?>
        <div class="login wrap">
            <input type="text" name="username" id="user" placeholder="Username">
            <input type="password" name="password" id="pass" placeholder="**********">
            <input type="submit" value="Log in">
        </div>
    <?php echo form_close("\n")?>
</div>
<?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Verify_login extends CI_Controller{

        public function index(){

            $this->load->model('User_model');

            $this->form_validation->set_rules('username', 'Username', 'required');
            $this->form_validation->set_rules('password', 'Password', 'required');

            if ($this->form_validation->run() == FALSE){
                $this->load->view('pages/login');
                 return false;
            }

            $result = $this->User_model->login($this->input->post('username'), $this->input->post('password'));
            if($result){
                echo 'loggedin';
            } else {
                echo 'wrong';
            }   

        }

    }
?>


为什么不使用
$.ajax
提交表单?或者让
login
控制器调用私有方法进行验证?@Kisaragi因此,如果我将verify\u login public函数更改为private,它将解决问题?不,这不会解决您的问题。您的表单正在发布到
验证\u登录
。要么更改它(post to
login
并从login调用私有方法进行验证),要么使用ajax post to
verify\u login
@Kisaragi,那么您是说我应该将表单发布到它自己,并从该视图文件调用私有方法?我认为这是违反MVC原则的。不。您是否有
login.php
控制器?为什么不使用
$.ajax
提交表单?或者让
login
控制器调用私有方法进行验证?@Kisaragi因此,如果我将verify\u login public函数更改为private,它将解决问题?不,这不会解决您的问题。您的表单正在发布到
验证\u登录
。要么更改它(post to
login
并从login调用私有方法进行验证),要么使用ajax post to
verify\u login
@Kisaragi,那么您是说我应该将表单发布到它自己,并从该视图文件调用私有方法?我认为这是违反MVC原则的。不。你有
login.php
控制器吗?