Php 使用用户名和/或电子邮件登录

Php 使用用户名和/或电子邮件登录,php,mysql,login,Php,Mysql,Login,我已经为一个问题挣扎了好几天,终于决定寻求帮助。 我想实现一个登录,在一个输入字段中接受用户的电子邮件或用户名。我只有用户名登录才能正常工作,但我尝试过使用电子邮件登录,但根本没有成功 我在mysql中的表字段是“用户名”和“电子邮件”,如果有人能给我一些帮助,那就太棒了!多谢各位 以下是我尝试过的代码: public function find($user = null) { if($user) { $field = (is_numeric($user)) ? 'id' :

我已经为一个问题挣扎了好几天,终于决定寻求帮助。 我想实现一个登录,在一个输入字段中接受用户的电子邮件或用户名。我只有用户名登录才能正常工作,但我尝试过使用电子邮件登录,但根本没有成功

我在mysql中的表字段是“用户名”和“电子邮件”,如果有人能给我一些帮助,那就太棒了!多谢各位

以下是我尝试过的代码:

public function find($user = null) {
    if($user) {
     $field = (is_numeric($user)) ? 'id' : 'username';
     $data = $this->_db->get('users', array($field, '=', $user));

        if($data->count()) {
            $this->_data = $data->first();
            return true;
        }
    }
    else if($user) {
     $field = (is_numeric($user)) ? 'id' : 'email';
     $data = $this->_db->get('users', array($field, '=', $user));

        if($data->count()) {
            $this->_data = $data->first();
            return true;
        }
    }
    return false;
}

public function login($username = null, $useremail = null, $password = null, $remember = false) {

    if(!$username && !$password || !$useremail && !$password && $this->exists()) {
        Session::put($this->_sessionName, $this->data()->id);
    } else {
        $user = $this->find($username);
        $useremail = $this->find($email);
        if($user or $useremail) {
            if($this->data()->password === Hash::make($password, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->id);                   
                if($remember) {
                    $hash = Hash::unique();
                    $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
                    if(!$hashCheck->count()) {
                        $this->_db->insert('users_session', array(
                            'user_id' => $this->data()->id,
                            'hash' => $hash
                        ));
                    } else {
                        $hash = $hashCheck->first()->hash;
                    }   

                    Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
                }

                return true;
            }
        }
    }

    return false;
}

您可以使用此查询从
users
表中获取
row\u id

$sql = "select * from `users` where username = $input OR email = $input";

您可以在
find
方法中执行类似操作:

$field = null;

if (is_numeric($user)) {
    $field = 'id';
}
else if(is_string($user)) {
    if (filter_var($user, FILTER_VALIDATE_EMAIL)) {
        $field = 'email';
    }
    else {
        $field = 'username';
    }
}

if (null == $field) {
    return false;
}

$data = $this->_db->get('users', array($field, '=', $user));

....

您尝试用于用户名和电子邮件的代码如何?你会遇到什么错误?你的实现到底有什么失败的地方?@Christopher Bottoms我尝试的是:
公共函数登录($username=null,$useremail=null,$password=null,$remember=false){if(!$username&&!$password | | |!$useremail&&!$password&&&&$this->exists()){Session::put($this->_sessionName,$this->data()->id);}else{$user=$this->find($username);$useremail=$this->find($email);if($user或$useremail){
,它仍在检查它是否仅是用户名:-/表示我收到错误:“错误的用户名”@Fab我不认为根据数字值检查输入并将其定向到id字段是个好主意。如果我希望我的用户名为1或2,或123456等,该怎么办?@Fab你能编辑你的问题以包含该代码吗?它在注释中的格式不好,而且它看起来被截断了,因为你也达到了字符限制。谢谢。尝试过了,没有正常工作:-/我会休息一下,稍后再试一次。如果我能让它工作,我会告诉你。不过谢谢你的支持