Python3,Tkinter,SQLite3 - 登录编码错误

时间:2017-04-19 13:16:39

标签: python tkinter sqlite

我在尝试验证凭据时遇到问题(我将在下面发布代码)。我想知道它是否正在发生,因为我将用户名和密码存储为数据库中的字符串,我应该将其存储为整数吗?

问题:我认为简单地举例说明问题是什么,也许更容易理解。

正确的信息(用户名=东西和密码=测试)

示例1:您输入“something”作为用户名,输入“password”作为密码 - 这很好用,但下一个示例是出错的地方。

示例2:您输入用户名“somethingfpsadadoia”和密码“testing” - 只要密码正确,程序就会说它是正确的。因此,只要您在用户名条目下拥有部分用户名,那么密码就可以使用,但之后的任何内容都不会被考虑为它说它实际上是错误的。

非常感谢,如果有人可以提供帮助!

“”” 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)

“”“

1 个答案:

答案 0 :(得分:1)

您正在执行两个完全独立的查询。对execute的第二次调用会抛弃第一个结果;您从cursor获取的内容是第二次查询的结果。

在查看每一行时,您必须告诉数据库检查两个值:

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