允许用户从userename或email登录

时间:2016-08-26 11:04:34

标签: c# asp.net

在我的网站中,我希望允许用户通过电子邮件或用户名登录。我试过跟踪,但只有当我使用电子邮件而不是用户名

时才登录
if (!string.IsNullOrEmpty(username.Text) & !string.IsNullOrEmpty(password.Text)) {
    string str = "select * from login where username=@username or email = @email and Password=@password";
    MySqlCommand cmd = new MySqlCommand(str, con);
    cmd.Parameters.AddWithValue("@username", username.Text);
    cmd.Parameters.AddWithValue("@email", username.Text);
    cmd.Parameters.AddWithValue("@password", password.Text);
    con.Open();
    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
    user = ds.Tables(0).Rows(0)("username");
    email = ds.Tables(0).Rows(0)("email");
    pswd = ds.Tables(0).Rows(0)("password");
    page = ds.Tables(0).Rows(0)("link");
    if (ds.Tables(0).Rows.Count > 0) {
        if (user == username.Text.ToString | email == username.Text.ToString & pswd == password.Text.ToString) {
            Response.Cookies("User_Type").Value = "manager";
            Response.Cookies("masterLogin").Value = username.Text;
            Response.Redirect(page);
        } else {
            Response.Write("<script language='javascript'>alert('User name or password is invalid');</script>");
        }
    }
}

5 个答案:

答案 0 :(得分:1)

使用以下sql查询。

select * from login where (username=@username or email = @email) and [Password]=@password // Password is a reserved keyword you cant use this as a column name.

请详细说明你得到的错误。

答案 1 :(得分:1)

检查此答案只需尝试使用以下代码替换您的代码

&#13;
&#13;
    if (user == username.Text.ToString || email == username.Text.ToString 
        && pswd == password.Text.ToString) {
&#13;
&#13;
&#13;

答案 2 :(得分:0)

缺陷就在这一行:

if (user == username.Text.ToString | email == username.Text.ToString 
    & pswd == password.Text.ToString) {

您需要撰写|&,而不是||&&

另外,您应该将||括在括号中,因为&&具有更高的优先级。

所以这就是解决方案:

if ((user == username.Text.ToString || email == username.Text.ToString) 
    && pswd == password.Text.ToString) {

答案 3 :(得分:0)

你的WHERE中的OR将缩短你的AND。

例如,尝试下面的等同于你的逻辑:
SELECT 'a' WHERE 1 = 1 OR 2 = 1 AND 3 = 1

这将选择'a'
您所追求的可能是:

select * from login where (username=@username or email = @email) and Password=@password"

答案 4 :(得分:0)

您应该考虑在查询中对条件进行分组,方法是将其括起来,如

select * 
 from login 
 where (username=@username or email = @email) 
 and Password=@password";
相关问题