【问题标题】:having trouble in codeigniter passing result or method from model to controller?在代码点火器将结果或方法从模型传递到控制器时遇到问题?
【发布时间】:2013-10-01 12:59:32
【问题描述】:

我正在尝试创建一个基本登录,没有错误检查或其他任何东西,以适应 codeigniter。下面是我的控制器类方法,我试图将模型方法的结果传回以验证用户名和密码。

public function login()
{
    if (isset($_POST['email'])) {
        $this->cdata['email'] = $_POST['email'] ;
    } else {
        $this->cdata['email'] = "";
    }

    if (isset($_POST['password'])) {
        $this->cdata['password'] = $_POST['password'];
    } else {
        $this->cdata['password'] = "";
    }

    $this->load->model("dbaccess");    
    $this->loggedin = $this->dbaccess->check_input($this->cdata['email'], $this->cdata['password']);

    if($this->loggedin == TRUE) {
        $this->load->view('carerview', $this->cdata);
    } else {
        $this->cdata['warning'] = "Check failed ! Please try again";
        $this->load->view('mainview', $this->cdata);
    }
}

在我看来,帖子似乎运行良好。帖子被发送回主登录/索引,下面的方法登录(如上所示)显示了我的模型类,该模型类在控制器中的登录方法中调用,到目前为止它只有一种方法。 check_input()

class Dbaccess extends CI_Model
{
    function __construct()
    {
       parent::__construct();
    }

    function check_input($email, $password)
    {
        $this->db->select('email');
        $this->db->from('tablename');
        $this->db->where('email', $email);
        $this->db->where('password', $password);
        $query = $this->db->get();

        if ($query->num_rows() > 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }
}

当我在我的索引页面上点击提交时,无论如何我都会收到警告,我无法弄清楚问题出在哪里。

【问题讨论】:

    标签: php codeigniter login


    【解决方案1】:

    试试看是否可行:

    function login()
        {
        if( $this->input->post( null ) ){  #check if the post array is not blank
            $this->load->model("dbaccess");    
            $this->loggedin = $this->dbaccess->check_input($this->input->post('email'),$this->input->post('password'));
        }else{
            $this->loggedin = false;
        }
    
        if($this->loggedin == TRUE)
        {$this->load->view('carerview',$this->cdata);}
        else
        {$this->cdata['warning']="Check failed ! Please try again";
        $this->load->view('mainview',$this->cdata);
        }
    }
    

    【讨论】:

    • 那没用。如果 post 为空,请尝试使用空变量访问数据库?什么?
    • loggedin 在我的控制器的类变量中也被初始化为 false
    【解决方案2】:

    你的表实际上叫表名吗?只是为了尝试调试它,在你的 check_input 函数中尝试这个并发布结果(如果需要更改用户名/密码):

    function check_input($email,$password)
    {
    
     var_dump($email);
     var_dump($password);
    
     $this->db->select('email');
     $this->db->from('tablename');
     $this->db->where('email', $email);
     $this->db->where('password', $password);
     $query = $this->db->get();
    
     echo $this->db->last_query();
    
     if (!$query) {
       // if query returns null
       $msg = $this->db->_error_message();
       exit("Error: ".$msg);
     } 
    
     if($query->num_rows() > 0)
     {
         return  TRUE;
     }
     else
     {
         return  FALSE;
     }
    }
    

    【讨论】:

    • 是的,我已经尝试过该命令并且查询看起来很完美。可能是连接问题。可能会尝试一个只返回所有内容的查询。看看是否有效
    • 顺便说一句,我的表也不叫tablename。
    • 如果我只是创建一个查询 $query = $this->db->get('tablename');并检查 false 仍然返回的行数??
    • 你能把查询放在这里,因为它是由“last_query()”函数打印出来的吗?为什么不直接使用我在上面放置的整个函数粘贴输出?
    • 这是我的数据库配置的问题。之前会意识到这是我没有在我的数据库配置文件中将 ['debug'] 设置为 FALSE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2012-12-25
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多