Php 使用用户名和/或电子邮件登录
我已经为一个问题挣扎了好几天,终于决定寻求帮助。 我想实现一个登录,在一个输入字段中接受用户的电子邮件或用户名。我只有用户名登录才能正常工作,但我尝试过使用电子邮件登录,但根本没有成功 我在mysql中的表字段是“用户名”和“电子邮件”,如果有人能给我一些帮助,那就太棒了!多谢各位 以下是我尝试过的代码:Php 使用用户名和/或电子邮件登录,php,mysql,login,Php,Mysql,Login,我已经为一个问题挣扎了好几天,终于决定寻求帮助。 我想实现一个登录,在一个输入字段中接受用户的电子邮件或用户名。我只有用户名登录才能正常工作,但我尝试过使用电子邮件登录,但根本没有成功 我在mysql中的表字段是“用户名”和“电子邮件”,如果有人能给我一些帮助,那就太棒了!多谢各位 以下是我尝试过的代码: public function find($user = null) { if($user) { $field = (is_numeric($user)) ? 'id' :
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你能编辑你的问题以包含该代码吗?它在注释中的格式不好,而且它看起来被截断了,因为你也达到了字符限制。谢谢。尝试过了,没有正常工作:-/我会休息一下,稍后再试一次。如果我能让它工作,我会告诉你。不过谢谢你的支持