我是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');
}
答案 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为用户显示消息。但是,您应该传递此项目的item
和value
。像那样:
$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
加载通用模型。所以,你的代码应该如下所示。
__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);
}
}
}
我没有添加与闪存数据相关的详细信息,因为之前的答案已经正确解释了它。