如果其他方法不起作用

时间:2014-03-01 18:59:34

标签: php codeigniter if-statement

模特:

function validate()
    {   
        $this->db->where('username',$this->input->post('username'));
        $this->db->where('password',md5($this->input->post('password')));
        $query = $this->db->get('memberships');
        if($query->num_rows() == 1)
        {
            return TRUE;
        }
    }
    function validate_admin()
    {   
        $this->db->where('adminname',$this->input->post('username'));
        $this->db->where('password',md5($this->input->post('password')));
        $query = $this->db->get('admin');
        if($query->num_rows() == 1)
        {
            return TRUE;
        }   
    }

控制器

function validate_credentials()
    {
    $this->load->model('membership_model');

        if($this->membership_model->validate())
        {
        $this->db->where('username',$this->input->post('username'));
        $get_profile_info = $this->db->get('memberships');
        if($get_profile_info->num_rows() > 0){
            foreach ($get_profile_info->result() as $row)
        {
            $info = array('firstname' => $row->firstname,
                            'lastname' => $row->lastname,
                            'email_address' => $row->email_address
                            );
        }
            $data = array(  
                'username' => $this->input->post('username'),
                'password' => $this->input->post('password'),
                'firstname' => $info['firstname'],
                'lastname' => $info['lastname'],
                'email_address' => $info['email_address'],
                'is_logged_in' => true
                );  
            $this->session->set_userdata($data);
            redirect('/site/main_menu');
        }}
        else if($this->membership_model->validate_admin())
        {
            echo "admin";
        }
        else
        {
            redirect('login');
        }
    }

if else if语句无法正常工作。程序测试第一个条件,如果返回false,则跳过第二个条件,即使该条件为TRUE并执行else语句。我不确定这里有什么问题。

1 个答案:

答案 0 :(得分:0)

  • 将您的一个控制器方法重构为不同的方法 - 一个用于成员,一个用于管理员启动。而且因为您调用单独的数据库表会建议为每个表分别设置一个模型。
  • 因为您正在与数据库表进行交互,所以获取配置文件信息应该在模型(而不是控制器)中进行。
  • 这是个人偏好,但我也会在模型中设置会话数据。此外,您的foreach可能存在问题,然后获得值$ info ['first name']。
  • 在发送到数据库之前首先验证表单数据。它更安全,对您的用户更好 - 如果他们忘记输入密码,您希望再次使用有用的信息向他们显示表单。 http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

并且在有疑问时记得 - 回应它。