Function 登录时没有响应

Function 登录时没有响应,function,codeigniter,login,controller,Function,Codeigniter,Login,Controller,我是CodeIgniter的新手,在使用PHPMyAdmin数据库在注册表中使用用户名和密码注册后,我正在尝试编写代码以登录。当我尝试登录时,我没有得到任何信息,并且它不会显示错误或任何消息 public function login() { $this->form_validation->set_rules('username','Username','required'); $this->form_validation->set_rules('p

我是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');
}

首先,您应该阅读文档,看起来您跳过了这一部分,但这非常重要

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

用户数据

好的,用户将输入他们的数据,我们将检查,如果所有内容都正确,我们可以将用户重定向到受保护的页面。您调用变量(请参阅Query:),但我在代码中没有看到您。在查询作业之前,您应该这样做

$username = $this->input->post("username");
$password = $this->input->post("password");
现在,您将能够使用
where
获取用户数据。=)

查询:

如果阅读了关于PHP的OOP,您就会知道,当您将参数传递给一个方法时,每个参数都有自己的“动作”。在使用
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());
}
闪存数据

是的,我们使用flashdata为用户显示消息。但是,您应该传递一个
和该项的
。就像这样:

$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

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

通过回答提出了很好的建议

我想把它延长一点

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

  • 用于处理post数据和验证的用户控制器
  • 使用模型进行数据库查询
  • 使用
    \u construct
    加载通用模型或库
  • 不要使用md5或其他加密技术保存平面密码
  • 将用户详细信息存储到会话中,您可以在登录后在中进一步使用
  • Codeigniter有一个很好的用户指南。试着去做
因此,您的代码应该是您的,如下所示

控制器: 型号:
我没有添加与flash数据相关的详细信息,因为前面的答案已经对其进行了正确的解释。

当您说“使用PHPMyAdmin数据库”时,您的意思是您直接在PHPMyAdmin中的用户记录中输入了用户名和密码吗?是,在使用注册表时,我添加了用户名和密码。因此,我只是从数据库中的注册表中取出用户名和密码…并使用这两个字段尝试登录..在保存密码时,CodeIngniter是否对密码进行哈希处理?不,它没有对密码进行哈希处理,,只显示原始密码,很好的建议@站长请帮我摆脱url。我不知道如何调用以及需要调用控制器的方法。就像我创建了两个函数登录并忘记了…如何调用url来显示这两个函数。当然,但是首先用这个新的控制器函数更新你的问题
忘记
@FerozKhan
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);
    }   

}

}
// Read data using username and password
public function login($username, $password) {

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

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

        $user_data = $query->row_array();

        if ($query->num_rows() == 1) {
            return user_data;
        } else {
            return false;
        }
}