从函数内调用函数

时间:2013-06-01 12:49:09

标签: php codeigniter

我是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;
        }
    }

}

我认为你可以看到我正在尝试做什么,但显然我没有以正确的方式做到这一点。

3 个答案:

答案 0 :(得分:1)

试试这个

$this->my_function_name();

所以他们会

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

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

答案 1 :(得分: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;    

    }

}

答案 2 :(得分:1)

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

$this->getusersname($UserN);

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