Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用用户名或电子邮件登录_Php_Mysql - Fatal编程技术网

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

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如下所示:

$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如下所示:

$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中使用按位操作数(|-按位或)?我肯定错过了什么你解决了问题还是仍然有问题?