我有一个登录表单,我正在进行2部分验证:客户端和服务器端。 客户端:检查是否有效的电子邮件,检查密码是否最少6个字符等。如果客户端出现问题我可以在登录表单的同一页面上向用户显示错误消息,因为它的页面从未得到过重新加载,因为如果客户端验证不正确,它将不会向服务器发送帖子。
但是当它成立时,我正在进行服务器端验证 - >检查电子邮件和密码是否匹配,以有效登录网站。但是如果登录凭据不匹配,我需要显示错误消息。这是我被卡住的部分。我在何处以及如何在同一页面(登录表单)上收到消息,因为页面已发布并刷新,因此我丢失了数据。现在,当凭据不正确时,我将用户重定向回登录页面,但没有任何消息。但我正在努力实现这一点,他会看到消息'凭据不正确'。有人可以帮我这个吗?
登录视图
<?php
$loginEmail = array('placeholder' => "Email", 'name' => "loginEmail");
$loginPassword = array('placeholder' => "Wachtwoord", 'name' => "loginPassword");
$loginSubmit = array('name' => "loginSubmit", 'class' => "btn", 'value' => "Inloggen");
echo form_open('login/inloggen', array('class' => 'grid-100 formc'));
echo form_input($loginEmail, set_value('loginEmail'));
echo form_password($loginPassword);
echo form_submit($loginSubmit);
echo form_close();
?>
登录控制器
function index(){
$logged_in = $this->logged_in->is_logged_in();
if($logged_in){
$this->load->view('profile_view');
}
else{
$data['content'] = 'login_view';
$this->load->view('templates/template', $data);
}
}
function inloggen(){
if($this->input->post('loginSubmit')){
if($this->form_validation->run('login_validation_rules') == FALSE){
$this->index();
}
else{
$this->load->model('login_model');
$query = $this->login_model->validate();
if($query){
$data = array(
'username' => $this->input->post('loginEmail'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('profile');
}
else{
$this->index();// If credentials aren't correct, redirect them to login page. But how I set a message here?
}
}
}
}
登录模式
function validate(){
$this->db->where('email', $this->input->post('loginEmail'));
$this->db->where('password', md5($this->input->post('loginPassword')));
$query = $this->db->get('tbl_users');
if($query->num_rows == 1){
return true;
}
else{
return false;
}
}
答案 0 :(得分:1)
我更愿意在一个控制器中做,而且会更清楚。我举一个简单的例子,告诉你我认为好的方式。
function login(){
$data['error_message'] = "";
$data['username'] = $this->input->post('username');
$data['password'] = $this->input->post('password');
if($this->input->post('loginSubmit')){
// Make rules of validation that need to be required
if($this->form_validation->run('login_validation_rules')){ // If true it goes IN
$this->load->model('login_model');
$query = $this->login_model->validate();
if($query){
$data = array(
'username' => $this->input->post('loginEmail'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('profile'); // Go IN profile
} else {
$data['error_message'] = "Something went wrong"; // This error you write on View
}
}
}
$this->load->view('login_view', $data) //Load view of login
}
我没有测试,它需要适应你的数据,但我只是想解释一下。你有任何问题,写评论,我们会一起找到解决方案。
答案 1 :(得分:0)
我已经解决了这个问题:基本上当模型发送错误时。我在其中创建了一个带有消息的var,然后在我的索引中检查是否存在var。 我唯一想知道的是,是否可以在我的控制器中设置一条消息,或者我应该在其他地方做过什么?
function index(){
$logged_in = $this->logged_in->is_logged_in();
if($logged_in){
$this->load->view('profile_view');
}
else{
//Check here if my redirection submitted also a message
if(isset($this->ongeldig)){
$data['ongeldig'] = $this->ongeldig;
}
else{
$data['ongeldig'] = '';
}
$data['content'] = 'login_view';
$this->load->view('templates/template', $data);
}
}
function inloggen(){
if($this->input->post('loginSubmit')){
if($this->form_validation->run('login_validation_rules')){
$this->load->model('login_model');
$query = $this->login_model->validate();
if($query){
$data = array(
'username' => $this->input->post('loginEmail'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('profile');
}
else{// set a error message, when the models function returns false.
$this->ongeldig = "Ongeldig wachtwoord/gebruikersnaam";
$this->index();
}
}
else{
$this->index();
}
}
}