【问题标题】:Calling functions from within a function [duplicate]从函数内调用函数[重复]
【发布时间】:2013-05-28 04:41:36
【问题描述】:

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

}

我想你可以看到我想要做什么,但显然我的做法不对。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    这样试试

    $this->my_function_name();
    

    所以他们会是

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

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

    【讨论】:

      【解决方案2】:

      你要调用方法,所以需要在方法调用中添加$this->

      $this->getusersname($UserN);
      

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

      【讨论】:

        【解决方案3】:

        在第二个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;    
        
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          • 2017-08-07
          • 1970-01-01
          • 2016-10-07
          • 1970-01-01
          相关资源
          最近更新 更多