2016-08-26 4 views
0

In meiner Website möchte ich Benutzern erlauben, sich sowohl von E-Mail-Adresse oder Benutzername. Ich habe versucht, folgend, aber es ist nur anmelden, wenn ich mit E-Mail gehe nicht mit BenutzernameBenutzer können sich sowohl von userenename oder E-Mail anmelden

if (!string.IsNullOrEmpty(username.Text) & !string.IsNullOrEmpty(password.Text)) { 
    string str = "select * from login where [email protected] or email = @email and [email protected]"; 
    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>"); 
     } 
    } 
} 
+4

Sind Sie Klartext-Passwörter zu speichern? Tu das nicht. –

+0

Warum verwenden Sie nicht [asp.net-Authentifizierung] (https://msdn.microsoft.com/en-us/library/eeyk640h.aspx). Es kümmert sich um Passwortverschlüsselung, Benutzersperre und vieles mehr. – VDWWD

Antwort

1

prüft gerade diese Antwort versuchen, Ihren Code zu ersetzen, mit dem Code folgenden

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

0

Der Fehler ist in dieser Zeile:

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

Statt | und &, müssen Sie || und && schreiben .

Auch sollten Sie die || in Klammern setzen, weil && höhere Priorität hat.

Das ist also die Lösung:

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

Ich debuggte meinen Code und ich sehe keinen Fehler in dieser Zeile. Meine Abfrage generiert leere Ergebnisse, die ein Problem erstellen – SUN

+0

@SUN Die Verwendung von einzelnen | und & ist im Allgemeinen falsch. Dies sind Bitoperatoren. Sie sollten immer die booleschen Operatoren || verwenden und && für boolesche Operationen. –

0

Ihre oder in Ihrer WHERE Ihre kurze und überprüfen.

Versuchen Sie zum Beispiel die folgenden, auf Ihre Logik entspricht:
SELECT 'a' WHERE 1 = 1 OR 2 = 1 AND 3 = 1

Dies wird wählen 'a'
Was sind Sie nach dem wahrscheinlich ist:

select * from login where ([email protected] or email = @email) and [email protected]"

0

Sie berücksichtigen sollten Gruppierung Ihre Bedingung in Ihrer Abfrage durch Klammern sie wie

select * 
from login 
where ([email protected] or email = @email) 
and [email protected]"; 
+0

Ich habe diese Abfrage in MySQL versucht. Dies sind meine tatsächlichen Eingaben (wählen Sie * aus dem Login where (username = '09840610866' oder email = '09840610866') und Password = 'subhash123'), aber geben Sie ein leeres Ergebnis – SUN

1

Verwenden Sie die folgende SQL-Abfrage.

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

und geben Sie bitte an, welchen Fehler Sie genau erhalten.

Verwandte Themen