Php 使用用户名或电子邮件登录
我正在尝试使用电子邮件或用户名让我的用户登录。目前只接受用户名。我的工作SQL如下所示:Php 使用用户名或电子邮件登录,php,mysql,Php,Mysql,我正在尝试使用电子邮件或用户名让我的用户登录。目前只接受用户名。我的工作SQL如下所示: $sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'"; $sql = "SELECT * FROM customers WHERE (login = '".$username."' OR email = '".$username."') AND password = '".
$sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'";
$sql = "SELECT * FROM customers WHERE (login = '".$username."' OR email = '".$username."') AND password = '".$password."'";
信息:
的值为$username
$\u POST['username']
的值为$password
md5($\u POST['password'])
$sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'";
$sql = "SELECT * FROM customers WHERE (login = '".$username."' OR email = '".$username."') AND password = '".$password."'";
我将使用以下命令检查此SQL:
$result = mysql_query($sql);
mysql_num_rows($result)
但目前它不起作用。如果我在SQL中使用
或
,mysql\u num\u rows
返回0
。有什么问题吗?或者有其他更好的方法来实现这一点吗?也许问题出在人物身上
SELECT * FROM `customers` WHERE (LOWER(`login`)='" . strtolower($username) . "' OR
LOWER(`email`)='" . strtolower($username) . "') AND `password`='" . $password . "'"
试试这个:用户名可能有用户名或电子邮件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 EXISTS(select 1 from customers where login = '".$username."'
OR email = '".$username."')
AND password = '".$password."'";
试试这个,我希望你的问题会得到解决。试试这个,我相信它会奏效: $sql=“从登录名为“$username”的客户中选择*”|电子邮件 ='“$username.”和密码='“$password.” 要确定密码何时出错,或仅确定登录凭据,请执行以下操作: 添加以下内容: 如果(mysql_num_rows($result)==0){echo'用户名或密码错误!';}
您只需在条件中使用2个查询和
或
$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需要的答案,这里有一个适合我的解决方案: 我使用了带有过滤器\u验证\u电子邮件参数的函数
if(filter\u var($input,filter\u VALIDATE\u EMAIL)){
$type=“电子邮件”;
}否则{
$type=“username”;
}
$sql=hive\u查询(“从`customers`中选择*,其中`type.`='''.$input.''”;
您的代码没有问题,因此出现了其他问题。您需要使用phpMyAdmin或其他工具直接在数据库上运行查询,以确定查询内容。也不要忘记检查mysql\u查询的结果
调用是否成功,并运行mysql\u错误
以确定是否存在问题。所有mysql\u查询
函数都不推荐使用。您的代码也可以使用。而md5密码只比纯文本存储稍微好一点,“它不起作用”是什么意思?提供更多细节。此外,当查询出现问题时,请始终echo$您的查询
,以准确了解发送到数据库的内容。代码正常,检查您是否输入了正确的用户名或电子邮件,以及password@Jocelyn:同意您的意见,@emjay还提供了$sql
的echo输出,这样每个人都可以看到,但您无法确定密码何时错误,或者只是登录凭据。为什么<代码>如果(mysql_num_rows($result)==0)回显“错误的用户名或密码!”如果=
区分大小写或LIKE
区分大小写取决于所使用的排序规则。为什么在只需要一个请求的情况下就要发出两个请求?所以假设用户名不能包含“@”?感觉是错误的方法。我做对了吗?您是否在SQL中使用按位操作数(|-按位或)?我肯定错过了什么你解决了问题还是仍然有问题?