0

一般来说,我是 MVC 模式和 OOP 的新手。

我在 CodeIgniter 中有一个应用程序,基本部分有效。有一个表格要求输入用户名和密码。如果它们与数据库匹配,则用户登录,创建会话并将它们重定向到站点的另一部分。这一切都很好。

我现在想再添加两个功能,一个updateloggedonuser是在用户登录时更新数据库,将一个位字段设置为 1 并设置一个时间戳。

另一个是getusersname。我想从数据库中获取登录用户的名字、姓氏和 ID 并将它们返回,以便我可以将它们存储在会话变量中。

我得到一个Fatal error: Call to undefined function getusersname().

控制器:

class Login_c extends CI_Controller {

    function index (){
        $view['main_content'] = 'loginform_view';
        $this->load->view('includes/template', $view);
    }

    function validate_credentials() {
        $this->load->model('login_m');
        $query = $this->login_m->validate();
        if($query) // if the users credentials valid
        {
            $data = array(
                'username' => $this->input->post('username'),
                'is_logged_in' => true
                );

            $this->session->set_userdata($data);
            redirect('site_c/main_area');
        }
        else
        {
            $this->index();
        }
    }

    function logout(){
        $this->index();
        $this->session->sess_destroy();
    }

}

模型:

class Login_m extends CI_Model {

    function validate(){
        $this->db->where('UserName', $this->input->post('username'));
        $this->db->where('UserPassword', md5($this->input->post('password')));
        $query = $this->db->get('User');
        $userN = $this->input->post('username');
        if($query->num_rows == 1) 
        {
            getusersname($UserN);
            updateloggedonuser($UserN);
            return true;    
        }
    }


    function updateloggedonuser($UserN){
        // with username set isActive to 1 and Updatedate to update 'datetime'
        $date = new DateTime();
        $data = array('isActive' =>1,
                    'UpdateDate' => $date);
        $this->db->where('UserName', $UserN);
        $this->db->update('User',$data);    
    }

    function getusersname($UserN){
        // with username get FirstName , LastName and UserID from Database 
        $sql = "SELECT UserID, FirstName, LastName FROM User WHERE UserName =?";
        $q= $this->db->query($sql,$UserN);
        if($q->num_rows() ==1){
            foreach ($q->result() as $row) {
                $userdata[] = $row;
            }
            return $userdata;
        }
    }

}

我想你可以看到我正在尝试做的事情,但显然我没有以正确的方式做这件事。

4

3 回答 3

1

像这样试试

$this->my_function_name();

所以他们会

if($query->num_rows == 1) 
{
    $this->getusersname($UserN);
    $this->updateloggedonuser($UserN);
    return true;    
}

$this实际上代表单例 Codeigniter 实例,它实际上是控制器对象。

于 2013-06-01T12:50:26.263 回答
1

在第二个modal示例中,您需要更改getusername()$this->getusername();

function validate(){

    $this->db->where('UserName', $this->input->post('username'));
    $this->db->where('UserPassword', md5($this->input->post('password')));
    $query = $this->db->get('User'); 

    $userN = $this->input->post('username');
    if($query->num_rows == 1) 
    {
    $this->getusersname($UserN);
    $this->updateloggedonuser($UserN);
    return true;    

    }

}
于 2013-06-01T12:50:59.360 回答
1

您要调用该方法,因此您需要添加$this->到方法调用中:

$this->getusersname($UserN);

在相当多的编程语言中,类方法中的函数调用被解释为方法调用。在 PHP 中,您必须始终指定要调用的方法,$this->否则他将查看全局函数名称空间。

于 2013-06-01T12:52:55.133 回答