CI - 告诉我出了什么问题 [英] CI - show me what went wrong

查看:94
本文介绍了CI - 告诉我出了什么问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发了一个简单的登录系统,它可以正常工作但失败,我需要知道为什么。



问题:如何显示导致失败的原因?



这里是数据库函数:

  $ password)
{
$ this-> db-> where(email,$ email);
$ this-> db-> where(password,$ password);

$ query = $ this-> db-> get(users);
if($ query-> num_rows()> 0)
{
foreach($ query-> result()as $ rows)
{
//将所有数据添加到会话
$ newdata = array(
'user_id'=> $ rows-> id,
'user_name'=> $ rows-&
'user_email'=> $ rows->电子邮件,
'logged_in'=> TRUE,
);
}
$ this-> session-> set_userdata($ newdata);
return true;
}
return false;
}

这里是逻辑:

  public function login()
{
$ this-> load-> library('form_validation');
//字段名称,错误消息,验证规则
$ this-> form_validation-> set_rules('email','Your Email','trim | required | valid_email');
$ this-> form_validation-> set_rules('password','Password','trim | required | min_length [4] | max_length [32]');

if($ this-> form_validation-> run()== FALSE)
{
$ this-> signin
}
else
{
$ email = $ this-> input-> post('email');
$ password = md5($ this-> input-> post('pass'));
$ result = $ this-> user_model-> login($ email,$ password);
if($ result)
{
$ this-> dash();
}
else
{
$ data ['title'] ='登录错误';
$ this-> load-> view('nav / header',$ data);
$ this-> load-> view('login',$ data);
$ this-> load-> view('nav / footer',$ data);
}
}
}

我知道错误正在发生因为我重定向回到登录页面,如果它失败,并更改标题文本显示我(只在测试模式下现在)。



这是检查数据库函数:

  function login($ email,$ password)
{
$ this-> db-> where(email,$ email)
$ this-> db-> where(password,$ password);

$ query = $ this-> db-> get(users);
if($ query-> num_rows()> 0)
{
foreach($ query-> result()as $ rows)
{
//将所有数据添加到会话
$ newdata = array(
'user_id'=> $ rows-> id,
'user_name'=> $ rows-&
'user_email'=> $ rows->电子邮件,
'logged_in'=> TRUE,
);
}
$ this-> session-> set_userdata($ newdata);
return true;
}
return false;
}


解决方案

/ p>

在模型中使用低于逻辑

  $ qry = $ this- > db-> get_where('users',array('username'=> $ this-> _username)); 
if($ qry-> num_rows()== 1){
$ user = $ qry-> row_array();
$ submitted_pa​​ss = md5($ this-> _password);
$ db_pass = $ user ['password'];
if($ submitted_pa​​ss === $ db_pass){
return $ user;
} else {
//错误的用户名/密码
$ this-> session-> set_flashdata('error',$ this-> errorList [10]);
return FALSE;
}
} else {
//没有这样的用户名存在
$ this-> session-> set_flashdata('error',$ this-> errorList [15] );
return FALSE;
}


I've developed a simple login system which works OK but fails, and I need to know why.

QUESTION: How to show what is causing the fail?

Here's the database function:

function login($email,$password)
{
    $this->db->where("email",$email);
    $this->db->where("password",$password);

    $query=$this->db->get("users");
    if($query->num_rows()>0)
    {
        foreach($query->result() as $rows)
        {
            //add all data to session
            $newdata = array(
                'user_id'  => $rows->id,
                'user_name'  => $rows->username,
                'user_email'    => $rows->email,
                'logged_in'  => TRUE,
            );
        }
        $this->session->set_userdata($newdata);
        return true;
    }
    return false;
}

And here's the logic:

public function login()
{
    $this->load->library('form_validation');
    // field name, error message, validation rules
    $this->form_validation->set_rules('email', 'Your Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');

    if($this->form_validation->run() == FALSE)
    {
        $this->signin();
    }
    else
    {
        $email=$this->input->post('email');
        $password=md5($this->input->post('pass'));
        $result=$this->user_model->login($email,$password);
        if($result)
        {
            $this->dash();
        }
        else
        {
            $data['title']= 'Login Error';
            $this->load->view('nav/header', $data);
            $this->load->view('login', $data);
            $this->load->view('nav/footer', $data);
        }
    }
}

I know the error is happening as I redirect back to the login page if it fails and change the title text to show me (only in testing mode for right now). But how can I find out what is going wrong?

This is the check database function:

function login($email,$password)
{
    $this->db->where("email",$email);
    $this->db->where("password",$password);

    $query=$this->db->get("users");
    if($query->num_rows()>0)
    {
        foreach($query->result() as $rows)
        {
            //add all data to session
            $newdata = array(
                'user_id'  => $rows->id,
                'user_name'  => $rows->username,
                'user_email'    => $rows->email,
                'logged_in'  => TRUE,
            );
        }
        $this->session->set_userdata($newdata);
        return true;
    }
    return false;
}

解决方案

For your changed answer:

use below logic in your model

 $qry = $this->db->get_where('users', array('username' => $this->_username ));
 if ($qry->num_rows() == 1) {           
    $user = $qry->row_array();
    $submitted_pass = md5($this->_password);
    $db_pass = $user['password'];
    if ($submitted_pass === $db_pass) {
        return $user;
    } else {
        // wrong username/password
        $this->session->set_flashdata('error', $this->errorList[10]);
        return FALSE;
    }
} else {
    // no such username exist     
    $this->session->set_flashdata('error', $this->errorList[15]);
    return FALSE;
}

这篇关于CI - 告诉我出了什么问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆