繁体   English   中英

codeigniter form_open()不适用于登录页面

[英]codeigniter form_open() not working for login page

我对我的代码有疑问和麻烦,我正在通过codeigniter框架进行登录,但是登录时遇到问题,当我以登录形式输入user \\ password时,它再次返回同一登录页面,而不是移至Home1类。 我的猜测是这个问题是由于登录页面表单中的form_open('index.php / welcome / login')导致的,我不确定登录的方式如何,

下面两个是我的控制器课程,


   public function login() //this used for login
        {
            $this->load->view('login');
            $this->m_user->user_login();

        }

    public function home1()//this will be redirecting class
    {
        $this->load->view('home1');
    }

这是模特

public function index()
        {
            if(($this->session->userdata('email')!=""))
            {
                $this->welcome();
            }
            else
            {
                $data['title']='Home';
                $this->load->view('login',$data);
            }
        }

function user_login()
     {
            $user_email=$this->input->post('user_email');
            $user_password=md5($this->input->post('user_password'));


          $this->db->where('user_email',$user_email);
          $this->db->where('user_password',$user_password);
          $query=$this->db->get('ca_user');

      if($query->num_rows()>0)
      {
       foreach($query->result() as $rows)
       {
        //add all data to session
        $_userdata = array(
          'user_id'  => $rows->user_id,
          'user_firstname'  => $rows->user_firstname,
          'user_lastname' => $rows->user_lastname,
          'user_email'    => $rows->user_email,
          'logged_in'  => TRUE,
        );

       }
       $this->session->set_userdata($_userdata);
       redirect('home1','refresh');
       return true;
      }
      return false;
      redirect('signup','refresh');
     } 

这是登录页面

<?php echo validation_errors('<p class="error">'); ?>
          <?php echo form_open('index.php/welcome/login'); ?>
                <input type="text" placeholder="Username" class="input-field form-control user" name="username" value="<?php echo set_value('user_email');?>" />
                <input type="password" placeholder="Password" class="input-field form-control password" name="password" value="<?php echo set_value('user_password');?>" />

                <button type="submit" class="btn btn-login ladda-button" data-style="expand-left" name="submit"><span class="ladda-label">login</span></button>
          <?php echo form_close(); ?>

首先,您无法从模型中加载视图。 通常,模型是您的逻辑所在。 到目前为止,我将为您提供使用MVC在CI中进行登录的基本示例。

您的模型:

class Login extends CI_Model
    {
        // validation setting
        public function LoginRules()
        {
            # code...
            $login_user = [
                [
                    'field' => 'email',
                    'label' => 'Email Adress',
                    'rules' => 'required'
                ],
                [
                    'field' => 'password',
                    'label' => 'Password',
                    'rules' => 'required'
                ]
            ];

            return $this->form_validation->set_rules($login_user);
        }

        // validation method
        public function validate()
        {
            if ($this->LoginRules())
            {
                if ($this->form_validation->run())
                {
                    # code...
                    return TRUE;
                }
                else
                {
                    return FALSE;
                }
            }
        }

        //Check the user data in database    
        public function CheckUser()
        {

            $query = $this->db->where('email', $this->input->post('email'))
                ->where('password', $this->input->post('password'))
                ->limit(1)
                ->get('your table name');

            foreach ($query->result() as $result) ;

            if ($query->num_rows() == 1)
            {
                $userData = [
                    'email'    => $pengguna->email,
                    'username' => $pengguna->username,
                    'login'    => TRUE
                ];

                $this->session->set_userdata($userData);

                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

        //logout function
        public function destroy()
        {
            $this->session->unset_userdata(
                [
                    'username' => '',
                    'email'    => '',
                    'login'    => FALSE,
                ]
            );

            $this->session->sess_destroy();
        }
    }

然后您的控制器:

public function UserLogSuccess()
    {

        if ($this->session->userdata('login') == FALSE)
        {
            //flash msg data for login failure
            $data = [
                'msg' => 'Must login'
            ];

            $this->session->set_flashdata('msg', $data);

            //redirect user back to login form
            redirect('login');
        }
        else
        {
            // give access
            $data = [
                'uname' => $this->session->userdata('username'),
                'email' => $this->session->userdata('email')
            ];

            $this->load->view('user/index', $data);
        }
    }

最小登录形式:

<div>
    <?php
        if (!empty($this->session->flashdata('msg')))
        {
            // you may ignore this
            foreach ($this->session->flashdata('msg') as $key => $message)
            {
                echo $message['access_tanpa_login'];
            }
        }

        echo form_open('login', ['class' => 'form', 'method' => 'POST']);
    ?>
    <fieldset>
        <label>Username</label>
        <input type="text" name="email" class="form-control">
        <?php echo form_error('email', '<span class="error">', '</span>'); ?>
    </fieldset>
    <fieldset>
        <label>Password</label>
        <input type="password" name="password" class="form-control">
        <?php echo form_error('password', '<span class="error">', '</span>'); ?>
    </fieldset>
    <fieldset>
        <input type="submit" value="Login" class="form-button">
    </fieldset>
    </form>
</div>

加法:在控制器上验证用户的样本

public function MyLoginProceed()
    {
        if ($this->login->validate())
            {
                //load the validation model 
                if ($this->login->CheckUser())
                {
                    // if TRUE, then redirect
                    redirect('any/where/you/like');
                }
                else
                {
                    // Login Fail, set flash msg here
                    $data = ['msg' => 'Fail'];
                    $this->session->set_flashdata('msg', $data);
                    // Redirect back to login
                    redirect('login');
                }
            }
    }

编辑直到适合您的需要。 这只是示例的基本方法,不是干净的或防弹的。 学习目的。

form_open('index.php / welcome / login')的实际作用是为您生成一个html表单打开标记。

例如:form_open('index.php / welcome / login'); 会生成> /index.php/welcome/login“>,如果CSRF设置为true,则会生成一个包含CSRF cookie代码的隐藏输入。

因此,在页面加载时,右键单击页面并查看源,查看是否生成了表单html标记。 如果已生成,则表示form_open正在工作。

我这边的一个建议-查看您的代码,看来您没有正确遵循模型视图控制器框架。 尝试只访问model中的数据库,然后在controller中进行重定向。 获取控制器中变量的输入,并将其作为参数发送给模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM