将视图值从视图传递到控制器到模型,然后返回到代码点火器中的控制器

时间:2011-02-09 21:16:50

标签: php database model-view-controller codeigniter

我正在使用Codeigniter创建一个登录表单,我有一个控制器从表单中收集输入,然后我想检查以确保用户输入的是在数据库中,所以我正在收集这些值在帖子中并希望将它们发送到数据库连接的模型。然后,如果结果在数据库中,我想用yes或no将某些内容发送回控制器,然后我可以从那里开始。我有点卡住了,但到目前为止我就是这样:

控制器:

function do_login()
{
    $login = $this->input->post('Login');
    $pwd = md5($this->input->post('Passwd'));


}

模特:

function check_login()
{

    $sql = $this->db->query("SELECT * FROM members WHERE loin = '?' AND password = '?'", array(//POST stuff goes in here));
    return $sql->result();

}

我不确定如何将数据传递给模型,然后再传回控制器。

任何帮助都会很棒! 谢谢!

3 个答案:

答案 0 :(得分:1)

在任何MVC表单中POST都发送到控制器(在表单中的操作属性中)和控制器(如名称所示)控制将要发生的事情,在您的情况下应该通过模型要求数据库进行验证,获得响应,决定要做什么执行,并使用视图显示结果......

所以在你的控制器中:

function do_login() {
 $login = $this->input->post('Login');     
 $pwd = md5($this->input->post('Passwd')); 
 $results = $this->...your_model_name...->chek_login( parameters as login and password would help )
 // base on results: has records or has not - do something
 // maybe display view

} 

答案 1 :(得分:1)

+1来@bensiu(我试着提出答案,但还没能)

另外:不要忘记您需要明确加载模型。

阅读this part of the user guide应该回答您的大部分问题。

答案 2 :(得分:0)

我会向check_login添加2个参数并使其成为布尔值:

function check_login($user, $password)
{

    $sql = $this->db->query("SELECT * FROM members WHERE loin = '?' AND password = '?'", array($user, $password));
    if (...) 
        return TRUE;
    else
        return FALSE;
}

使它布尔允许在控制器内进行完整的登录检查,这样如果还有更多的测试要做,那么使用该模型的开发人员不必了解它们,因此可以避免错误。

例如,如果要检查数据库中是否只有一行,还是要知道是否允许登录的内部变量(仅作为示例)。 是否所有开发人员都会在验证登录之前阅读有关必须检查的变量的文档?该文件是否会被写入?