【问题标题】:Unable to redirect url with callback in codeigniter无法在 codeigniter 中使用回调重定向 url
【发布时间】:2014-05-06 17:13:07
【问题描述】:

在用户进入他/她的主页部分之后,我只是创建了检查有效用户的登录类。但是现在我需要有条件地更改用户家的目的地,无法 在 url 重定向中附加 switch case。

注意:我认为函数中的变量没有正确传递。请帮助我

我的代码如下:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class VerifyLogin extends CI_Controller {

        function __construct()
        {
            parent::__construct();
            $this->load->model('userp','',TRUE);
        }

        function index($dest) 
        {
            $this->load->view('header');  
            //This method will have the credentials validation
            $this->load->library('form_validation');
            $this->form_validation->set_rules('email', 'Email', '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
                $data['msg'] = "";
                $this->load->view('login',$data);
            }

            $this->load->view('footer');
        }

        function check_database()
        {
            //Field validation succeeded.  Validate against database
            $email = $this->input->post('email');
            //query the database
            $password= $this->input->post('password');
            $result = $this->userp->login($email,$password);

            if($result!==FALSE)
            {
                $sess_array = array();
                foreach($result as $row)
                {
                    $sess_array = array(
                        'id' => $row->id,
                        'username' =>$row->email,
                        'fname' =>$row->first_name,
                        'lname' =>$row->last_name,
                        'pic'=>$row->pic
                    );
                    $this->session->set_userdata('logged_in',$sess_array);
                }

                switch($dest){
                    case 'NULL':{
                        redirect('home','refresh');   
                        break;
                    }
                    case 'part1':{
                        redirect('subhome','refresh');   
                        break;
                    }
                    case 'part2':{
                        redirect('subhome1','refresh');    
                        break;
                    }
                    default :{
                        redirect('mainhome','refresh');  
                        break;
                    }
                }
                return TRUE;
            }
            else
            {
                $data['msg'] =  "Something Wrong Username/Password";
                $this->load->view('login',$data);
                //return false;
            }
        }
    };
?>

【问题讨论】:

  • $dest 在 index($dest) 中声明,但不在 check_database() 中声明,这是您的交换机尝试使用 $dest 的地方。
  • 如何在检查数据库中传入
  • 如果您编辑 config/routes.php 并添加一个路由,例如 $route['check_database/(:any)'] = 'verifylogin/database_check/$1' 并将 check_database() 更改为 check_database( $dest) 无论您在 URL 中输入什么来代替 (:any) 都将作为 $dest 传递给 check_database。

标签: php codeigniter url xss url-redirection


【解决方案1】:

问题是您将$dest 传递给index() 函数,但您试图在check_database() 函数中使用它。所以要么你想把你的开关移到索引函数中,要么你想将$dest 传递给check_database() 喜欢

function check_database($dest)
{
    //You can use $dest in here
}

如果你想给你的回调函数传递一个额外的参数,你需要把它放在括号里,比如

$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database[parameter]');

$this->form_validation->set_rules("password", "Password", "trim|required|xss_clean|callback_check_database[$parameter]");

【讨论】:

  • $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); @Pattle 我是 codeigniter 的新手,我如何通过回调传递 dest
  • @rbstack 我已经更新了答案,解释了如何将额外的参数传递给你的回调函数
猜你喜欢
  • 2017-02-07
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2014-04-01
  • 2016-04-20
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多