[英]Login with username or email
我正在尝试使我的用户能够使用电子邮件或用户名登录。 目前只接受用户名。 我的工作 SQL 如下所示:
$sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'";
信息:
$username
的值为$_POST['username']
$password
的值为md5($_POST['password'])
现在我想将其扩展到客户可以在其个人资料中输入的电子邮件地址。 我的 SQL 看起来像这样:
$sql = "SELECT * FROM customers WHERE (login = '".$username."' OR email = '".$username."') AND password = '".$password."'";
我将使用以下命令检查此 SQL:
$result = mysql_query($sql);
mysql_num_rows($result)
但目前它不起作用。 如果我在 SQL 中使用OR
,则mysql_num_rows
返回0
。 可能是什么问题呢? 还是有另一种更好的方法来实现这一目标?
试试这个:用户名可能有用户名或电子邮件 ID,对吗? 所以首先检查用户名字符串中是否有“@”符号。
那是
if(stripos($username,'@') !== FALSE){
$sql = "SELECT * FROM customers WHERE email = '".$username."' AND password = '".$password."'";
}else{
$sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'";
}
因此,如果条件成功,则电子邮件将被验证。 否则登录名将被验证
试试这个,我相信它会起作用:
$sql = "SELECT * FROM customers WHERE login = '".$username."' | email = '".$username."' AND password = '".$password."'";
并确定密码何时错误,或者只是登录凭据:
添加这个:
if (mysql_num_rows($result)==0) {echo '错误的用户名或密码!';}
也许问题出在字符的情况下?
SELECT * FROM `customers` WHERE (LOWER(`login`)='" . strtolower($username) . "' OR
LOWER(`email`)='" . strtolower($username) . "') AND `password`='" . $password . "'"
$sql = "SELECT * FROM customers
WHERE EXISTS(select 1 from customers where login = '".$username."'
OR email = '".$username."')
AND password = '".$password."'";
试试这个,我希望你的问题会得到解决。
您可以简单地使用 2 个查询和条件中的or
$query=mysql_query("select * from customers where user='$username' and password='$password'");
$query1=mysql_query("select * from customers where email='$username' and password='$password'");
if(mysql_num_rows($query)==1 || mysql_num_rows($query1)==1)
{
//YOUR CODE
}
else
{
//YOUR CODE
}
我知道这个问题很老,但由于它没有适合 OP 需求的答案,这里有一个对我有用的解决方案:
我将filter_var()函数与FILTER_VALIDATE_EMAIL参数一起使用。
if (filter_var($input, FILTER_VALIDATE_EMAIL)) {
$type = "email";
} else {
$type = "username";
}
$sql = hive_query("SELECT * FROM `customers` WHERE `" . $type . "` = '" . $input . "'");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.