2017-04-19 5 views
0

Ich habe ein Problem beim Versuch, Anmeldeinformationen zu überprüfen (Ich werde den Code unten veröffentlichen). Ich frage mich, ob es passiert, weil ich Benutzername und Passwort als String in der Datenbank gespeichert habe, sollte ich es als Integer gespeichert haben?Python3, Tkinter, SQLite3 - Login Codierung Fehler

Das Problem: Ich denke, es ist einfacher, einfach ein Beispiel zu geben, was das Problem ist, vielleicht ist es einfacher zu verstehen.

Informationen, die korrekt ist (username = etwas und Passwort = Test)

Beispiel 1: Sie Eingabe „etwas“ als Benutzername und „password“ als Passwort - das ist in Ordnung es funktioniert, aber das nächste Beispiel sind, wo die Dinge schief gehen.

Beispiel 2: Sie geben den Benutzernamen "somethingfpsadadoia" und das Passwort "testing" ein - das Programm sagt, es ist korrekt, solange das Passwort korrekt ist. So lange, wie Sie einen Teil des Benutzernamens unter Benutzername eingeben, dann funktioniert das Passwort, aber alles danach wird nicht berücksichtigt, um zu sagen, dass es tatsächlich falsch ist.

Sehr geschätzt, wenn jemand helfen kann!

"" " def is_valid():

UsernameValidity=UserName_Entry.get()   
PasswordValidity=Password_Entry.get() 
cursor.execute('''SELECT password FROM users WHERE username = ?''', (UsernameValidity,)) 
cursor.execute('''SELECT username FROM users WHERE password = ?''', (PasswordValidity,)) 
LogInAttempt = cursor.fetchone() 
print (Is_Valid) # Testing to see if it works on shell 
if LogInAttempt: 
    print (" One of the accounts have successfully logged in ") 
    IsValidText.config(text=" You have logged in! ", fg="black", highlightthickness=1) 
    myGUI.after(1000, CoreContent) # Ignore this one for now. 
else: 
    print (" One of the accounts inputted the wrong credentials! ") 
    IsValidText.config(text=" Invalid username or Password! ", fg="black", highlightthickness=1) 

"""

Antwort

1

Sie ausführen zwei völlig unabhängige Abfragen. Der zweite Aufruf an execute wirft alle Ergebnisse von dem ersten weg; Was Sie von cursor holen, ist das Ergebnis der zweiten Abfrage.

Sie haben die Datenbank zu sagen, beide Werte zu überprüfen, wenn bei jeder Zeile suchen:

cursor.execute('SELECT 1 FROM users WHERE username = ? AND password = ?', 
       [UsernameValidity, PasswordValidity]) 
LogInAttempt = cursor.fetchone() 
+0

Vielen Dank! – sago