登录时没有响应

时间:2017-08-04 18:28:02

标签: function codeigniter login controller

我是CodeIgniter的新手,我正在尝试使用PHPMyAdmin数据库在注册表单中使用用户名和密码注册后编写代码来登录。我尝试登录时没有得到任何内容,也没有显示错误或任何消息。

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

    if($this->form_validation->run() == TRUE){

        //check user in database
        $this->db->select('username' , 'password');
        $this->db->from('user_register');
        $this->db->where(array('username' => $username, 'password' => $password));

        $query = $this->db->get();

        $user = $query->row();

        if($user->email){

            $this->session->set_flashdata("Successful login");

            $_SESSION['user_logged'] = TRUE;
            $_SESSION['username'] = $user->username;

        } else {

            $this->session->set_flashdata("Error No such record found");

        }
    }

    // load view and showing login form
    $this->load->view('login');
}

2 个答案:

答案 0 :(得分:1)

首先,你应该阅读文档,看起来你跳过那部分,但它非常重要!

让我们编写一些代码并修复错误!

用户数据

嗯,用户将输入他们的数据,我们将检查,如果evertyhing正确,我们可以将用户重定向到受保护的页面。你需要变量(参见查询:),但我没有看到你的代码。你应该在查询工作之前这样说。

$username = $this->input->post("username");
$password = $this->input->post("password");

现在,您将能够使用where来获取用户数据。 =)

<强>查询:

如果阅读有关使用PHP的OOP,您知道当您将参数传递给方法时,每个参数都有自己的&#34; action&#34;。对于select方法,您应该在同一个引号上保留要选择的数据,因为您的方式就像将多个参数传递给方法一样。

 $this->db->select('username, password'); 
 $this->db->from('user_register');
 $this->db->where(array('username' => $username, 'password' => $password));

首先,为了确定记录是否存在,我更喜欢这种方式:

if($query->num_rows() > 0) {
      $user_data = $query->row();

      // We should verify if the user entered the password that correspond to the account. 
      // If not, we tell them that the password is incorrect.
      if($password != $user_data->password) {
           $this->session->set_flashdata("error", "Wrong password!");
           return redirect(site_url());
       }

       // You can use the CI built in methods to work with sessions
       $this->session->set_userdata(array(
              'username' => $user_data->username,
       ));

       $this->session->set_flashdata("success", "You are logged in!");
       return redirect(site_url());

} else {
    $this->session->set_flashdata("Error: No such record found");
    redirect(site_url());
}

Flash数据

是的,我们使用flashdata为用户显示消息。但是,您应该传递此项目的itemvalue。像那样:

$this->session->set_flashdata('success', 'Successfully logged in!");

而且,要检索视图中的数据,您可以这样做......

<?php 

$success = $this->session->flashdata("success");
$error = $this->session->flashdata("error");

if(!empty($success)) {
      echo $success;
}

if(!empty($success)) {
      echo $error;
}

?>

<强>推荐

另外,我建议您在YouTube上花点时间了解CodeIgniter。

如果我忘记了什么,请告诉我! =)

答案 1 :(得分:0)

webmasterdro's答案提出了很好的建议。

我想稍微扩展一下。

查看您的代码,看起来您已将查询添加到控制器。 作为建议,如果您使用的是MVC框架,那么请尝试遵循一些基本的MVC流程。因为如果你不遵循那个,那么使用框架将毫无用处。

  • 用户控制器处理发布数据和验证。
  • 使用模型进行数据库查询。
  • 使用B加载通用模型。
  • 请勿使用md5或其他加密技术保存平面密码。
  • 将用户详细信息存储到会话中,您可以在登录后进一步使用该会话。
  • Codeigniter有一个很棒的用户指南。试着遵循这一点。

所以,你的代码应该如下所示。

控制器:

__construct

型号:

public function __construct() {
parent::__construct();

// Load model
$this->load->model('login_database');

}

public function your_controller_function_name() { 

    // Check validation for user input in SignUp form
    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');

    if ($this->form_validation->run() == FALSE) {
        $this->load->view('login_form_view');
    } else {

        $username = $this->input->post("username");
        $password = $this->input->post("password");

        $result = $this->login_database->registration_insert($username, $password);
        //You can do this also if($result != FALSE) 
        if (!empty($result)) {

        // You can set other data to the session also form here 
        $session_data = array(
        'username' => $result['user_name']          
        );

        // Add user data in session
        $this->session->set_userdata('logged_in', $session_data);

        // You can set flash data here

        $this->load->view('your_view'); 

    }  else {

        $data = array(
        'error_message' => 'Invalid Username or Password'
        );      
        $this->load->view('your_login_form_view', $data);
    }   

}

}

我没有添加与闪存数据相关的详细信息,因为之前的答案已经正确解释了它。